JAVA 基础知识
- Math.round(var); 用于四舍五入
- if(1)在java中不容许,C/C++能够。
- void也是根底数据类型之一。
- 所有根底数据类型都有初值0或者0.0,援用类型初值为null。
- this只能用于办法外部,用于示意 “调用这个办法的那个对象” 的援用。
- this还能够调用其余结构器,如:this(a,b);但只能用一次,且放在办法的第一行。
- static能够简略了解,全局的,只有一份,类加载时进行惟一一次初始化,不存在this,不能够间接调用非static变量或办法(能够非static援用入参,再在外面new对象)。
- 可变参数...原理: 编译器帮忙封装成数组。
- finalize()办法,一个类容许有一个该办法(Object的办法),用于JVM进行回收,但不能够间接调用!
- System.gc();用于回收runtime。
- 初始化程序:
父类动态变量---父类动态代码块---子类动态变量---子类动态代码块---父类非动态变量(以及父类非动态代码块)--父类构造函数---子类非动态变量(以及子类非动态代码块)---子类构造函数
口诀:
先动态,再非动态,再结构器。
先变量,再代码块。
- 枚举enum:
public enum name{ A,B,C,D}
类的static办法:values(),返回数组
非static办法:ordinal(),返回申明程序
GC自适应算法
- 援用记数 :对象有援用连贯,则计数器+1,断开连接时则减1。当计数器为0时,启动回收。
- 进行-复制 (copy-and-stop):先暂停程序,把堆中 “活” 的对象挪动另一个堆。
- 标记-扫描 (mark-and-swap):同样暂停程序,是找到所有“活”的对象,打上标记,标记打完后,把没被标记的对象清理进来。
↑ 自适应的,分代的,进行-复制,标记-扫描 垃圾回收期。。。。
JIT(just in time)编译器:将程序编译成机器码,晋升程序运行速度。
类加载时的两种策略:
- 让JIT编译所有代码。毛病:开展机器码比字节码大很多,导致程序速度慢。
- 惰性评估(lazy evaluation):必要时才让JIT工作,从不执行的代码就不让它编译。
HotSpot就采纳了相似于法2的技术进行优化。将class字节码与机器码放入缓存,执行次数越多,越快。