week1-JAVA笔记-初始化与清理
访问权限
1、public 任何都可以访问
2、private 仅类和类内方法
3、protected 相比于private,继承类可以访问
4、默认 同一包下可以访问
初始化与清理
每一个类,都应该有一个构造方法,如果没有,编译器会自动帮你创建一个默认构造方法。
除构造方法,编译器禁止任何其他方法调用构造方法
清理
垃圾回收器只知道释放那些经由new分配的内存,针对特殊内存(非new),java允许类中定义finalize()方法。工作原理:一旦垃圾回收器准备好释放对象占用的空间,将首先调用其finalize()方法,并在下一次垃圾回收发生时,才会真正回收对象占用的空间。java一切皆对象,所以一般情况finalize应对的是非java语言(本地方法)分配的内存空间的释放,因此不建议过多使用finalize方法。
垃圾回收模式
引用计数:每一个对象都含有一个应用计数器,当有引用连接到对象时,计数器加1.。但引用离开作用域或者被置为null时,计数器减一,为0时回收。
缺点:开销不大,但这项工作的开销会贯穿整个程序的生命周期。对象间循环引用时,这种方法会失效。
stop-and-copy:暂停程序运行,将所有存活的对象从当前堆复制到另一个堆,没有被复制的都是垃圾,对象复制到新堆时,它们是一个挨着一个紧凑排列的。
缺点:效率低,原因有二。一,数据在两个堆内来回倒腾,维护成本高。解决方式:在堆中分配几块大内存,复制动作发生在几个大内存中间。二在于复制,程序只会生产少量垃圾,复制式回收器仍然复制所有内存。解决方式:进行检查,没有新垃圾产生,转换另一种工作模式-mark-and-swap。
mark-and-swap:从堆栈和静态存储区,遍历所有引用,对存活对象进行标记,全部标记完成时进行清理。清理完后的堆是不连续的。需要对堆进行整理。
自适应:根据回收器效率,实时调整模式,所有对象都很稳定则采用mark-and-swap,堆空间碎片较多,转为stop-and-copy。
初始化
java会确保所有变量在使用前都得到恰当的初始化。
初始化顺序
在类的内部,变量初始化发生在会发生在构造方法之前。即使变量的定义在构造方式之后。而静态成员最先被初始化且仅初始化一次。静态变量和代码块和class文件都存储在方法区中。

浙公网安备 33010602011771号