Java的内存动态分配和垃圾收集的问题,都交给了JVM来处理。注意,将JVM运行数据区(虚拟机栈【栈帧】,程序计数器,堆内存)粗略的分为栈和堆(所有线程共享),回收的是堆中的对象实例。不是栈中的引用类型。
那么JVM是如何处理的?
从三个问题来分析:
1. 哪些内存需要回收?
2. 什么时候进行回收?
3. 如何回收?
注:现代收集器基本采用分代收集算法,堆分为:新生代和老年代。
事实上,不可达的对象,也并非“非死不可”,这时它们处于“缓刑”阶段,真正死亡至少要经历两次标记过程:
缺点:效率不高;标记清除后会产生大量不连续的内存碎片。
优点:实现简单,运行高效,可按顺序分配内存。
缺点:内存直接缩小为原来一半,代价太大;对象存活率较高时,效率变低。
适合堆中的老年代的垃圾收集
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012951554/article/details/48025045