第五章 初始化与清理
1. 重载overload和重写override
简单明了的说,重载发生在同一类中,方法名相同,参数不同;重写发生在子类与父类之间。两者都是多态的体现。
2. 自动类型转换和强制类型转换
short型的n -> int型的m,可以直接赋值,这是自动类型转换;但是int型的m -> short型的i,却需要加上转换类型,这是强制类型转化(窄化转化)。
short n = 1;
int m = n;
short i = (short) m;
3. 垃圾回收原理
此处简单记录一下《Java编程思想中》涉及到的垃圾回收原理。
停止-复制(stop-and-copy):理论上是先暂停程序的运行(所以它不属于后台回收模式),然后将所有存活的对象从当前堆复制到另一个堆,没有被复制的全是垃圾。当对象被复制到新堆上时,它们是一个挨着一个的,所以新堆保持紧凑排列(这也是为什么分配对象的时候“堆指针”只管依次往前移动)。然后就可以按前述方法简单、直接地分配内存了。这将导致大量内存复制行为,内存分配是以较大的“块”为单位的。有了块之后,垃圾回收器就可以不往堆里拷贝对象了,直接就可以往废弃的块里拷贝对象了。
标记-清理(mark-and-sweep):它的思路同样是从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。每当它找到一个存活对象,就会给对象一个标记。这个过程中不会回收任何对象。只有全部标记完成时,没有标记的对象将被释放,不会发生任何复制工作,所以剩下的堆空间是不连续的,然后垃圾回收器重新整理剩余的对象,使它们是连续排列的。
当垃圾回收器第一次启动时,它执行的是“停止-复制”,因为这个时刻内存有太多的垃圾。然后Java虚拟机会进行监视,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式;同样,Java虚拟机会跟踪“标记-清扫”效果,要是堆空间出现很多碎片,就会切换到“停止-复制”方式。这就是所谓的“自适应”技术。
分代收集算法:简单讲,就是将Java堆分为新生代和老年代。新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,选用复制算法;而老年代中对象存活率高,没有额外空间进行分配担保,就必须使用“标记-清理”或者“标记-整理”算法来进行回收。(经常看到新生代老年代,不明所以,特从《深入理解Java虚拟机》摘录一段理解)
上一篇: 中文分词API
下一篇: java抽象类可以被继承吗?