第五章 初始化与清理

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虚拟机》摘录一段理解)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值