发布网友 发布时间:2022-04-23 00:41
共4个回答
热心网友 时间:2022-04-26 11:13
内存回收机制就是对象没有引用就会回收
其实Java垃圾回收主要做的是两件事:1)内存回收 2)碎片整理
垃圾回收算法
1)串行回收(只用一个CPU)和并行回收(多个CPU才有用):串行回收是不管系统有多少个CPU,始终只用一个CPU来执行垃圾回收操作,而并行回收就是把整个回收工作拆分成多个部分,每个部分由一个CPU负责,从而让多个CPU并行回收。并行回收的执行效率很高,但复杂度增加,另外也有一些副作用,如内存随便增加。
2)并发执行和应用程序停止 :应用程序停止(Stop-the-world)顾名思义,其垃圾回收方式在执行垃圾回收的同时会导致应用程序的暂停。并发执行的垃圾回收虽然不会导致应用程序的暂停,但由于并发执行垃圾需要解决和应用程序的执行冲突(应用程序可能在垃圾回收的过程修改对象),因此并发执行垃圾回收的系统开销比Stop-the-world高,而且执行时需要更多的堆内存。
3)压缩和不压缩和复制 :
①支持压缩的垃圾回收器(标记-压缩 = 标记清除+压缩)会把所有的可达对象搬迁到一起,然后将之前占用的内存全部回收,减少了内存碎片。
②不压缩的垃圾回收器(标记-清除)要遍历两次,第一次先从跟开始访问所有可达对象,并将他们标记为可达状态,第二次便利整个内存区域,对未标记可达状态的对象进行回收处理。这种回收方式不压缩,不需要额外内存,但要两次遍历,会产生碎片
③复制式的垃圾回收器:将堆内存分成两个相同空间,从根(类似于前面的有向图起始顶点)开始访问每一个关联的可达对象,将空间A的全部可达对象复制到空间B,然后一次性回收空间A。对于该算法而言,因为只需访问所有的可达对象,将所有的可达对象复制走之后就直接回收整个空间,完全不用理会不可达对象,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存。
看看这个:http://developer.51cto.com/art/201304/387381_1.htm
热心网友 时间:2022-04-26 12:31
j就是java虚拟机清理内存中一些不用 的对象
热心网友 时间:2022-04-26 14:05
对象没有引用就会回收。
热心网友 时间:2022-04-26 18:05
http://wenku.baidu.com/view/bc2d7685d4d8d15abe234e31.html