从事 java 开发两三年了,最近开始重新看 java 编程思想,记录一下读书所得,以备以后查询,持续更新
流程控制
break continue 在循环中的使用,这两者都可以配合标签来跳出循环,不使用标签时 continue 直接跳转到本次循环的下一次循环,继续循环;break 直接跳出循环;使用标签时(多重循环),continue 会直接跳转到标签所在循环位置,并继续下一步循环;break 使用标签时,直接跳出标签所在循环
初始化与清理
堆栈与堆
finalize()在类要被回收之前调用(不能用来保证调用某些方法,一般用作某些本地方法调用,可以用做检差标志输出错误警告信息)
jvm 如何判断垃圾回收:对象引用计数(堆中对象持有一个引用计数器,如果为零表示需要被回收,这种方式无法回收循环引用的问题,基本没有 jvm 使用这种垃圾回收算法),主要介绍了两种”停止-复制”(暂停 jvm 从 root 路径出发将所有被引用的堆空间对象复制到新的堆空间,并将原来的空间全部回收)与”扫描-标记”(暂停 jvm,从 root 路径出发,将所有被引用的堆空间对象全部标记,标记完成后,回收所有的未被标记的对象)
jvm垃圾回收机制: “停止-复制” “扫描-标记” “块” jvm 可能会在两种回收机制之间自动适应;jvm 运行时段如果产生垃圾较少,采用”扫描-标记”,如果产生垃圾较多,导致块不够分配新的内存空间,需要整理堆空间时必须使用”停止-复制”,这两者都会暂停 jvm 进行垃圾回收,”停止-复制”性能比”扫描-标记”好,但是占用更多的堆空间,”扫描-标记”会造成堆空间碎片
对象初始化顺序 :
static 修饰的成员变量(不赋值)—>static 修饰的代码块与 static 修饰的成员变量的赋值(顺序与代码先后顺序一致)—>成员变量(不赋值,非 static 修饰)—>成员变量赋值与非 static 修饰的代码块(顺序与代码顺序一致)—>构造函数;前两步对于所有类只会调用一次(前两步在类第一次加载时调用(new,使用静态方法,静态成员变量));static 修饰的方法只能调用 static 变量