我是靠谱客的博主 痴情短靴,最近开发中收集的这篇文章主要介绍事关Java垃圾,你知道吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

NO·1.简述java垃圾回收机制?★

在java中,程序员是不需要显示的去释放一-个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

NO·2.java中垃圾收集的方法有哪些?★

1.标记-清除:

这是垃圾收集算法中最基础的,根据名字就可以知道, 它的思想就是标记哪些要被回收的对象,然后统回收。 这种方法很简单,但是会有两个主要问题: 1.效率不高,标记和清除的效率都很低; 2.会产生大量不连续的内存碎片,导致以后程序在分配较大的对象时,由于没有充足的连续内存而提前触发-次 GC动作。

2. 复制算法:

为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分, 然后每次只使用其中的一块,当块内存用完时,就将还存活的对象复制到第二块内存上,然后一次性清楚完第一块内存,再将第二块上的对象复制到第块。但是这种方式,

内存的代价太高,每次基本上都要浪费般的内存

于是将该算法进行了改进,内存区域不再是按照1 : 1去划分,而是将内存划分为8:1:1 三部分,较大那份内存交Eden区,其余是两块较小的内存区叫Survior区。每次都会优先使用Eden区, 若Eden区满,就将对象复制到第二块内存区上,然后清除Eden区,如果此时存活的对象太多,以至于Survivor不够时,会将这些对象通过分配担保机制复制到老年代中。(java 堆又分为新生代和老年代)

3. 标记-整理

该算法主要是为了解决标记清除,产生大量内存碎片的问题;当对象存活率较高时,也解决了复制算法的效率问题。它的不同之处就是在清除对象的时候现将可回收对象移动到端,然后清除掉端边界以外的对象,这样就不会产生内存碎片了。

4.分代收集

现在的虚拟机垃圾收集大多采用这种方式,它根据对象的生存周期,将堆分为新生代和老年代。在新生代中,由于对象生存期短,每次回收都会有大量对象死去,那么这时就采用复制算法。老年代里的对象存活率较高,没有额外的空间进行分配担保,所以可以使用标记整理或者标记清除。

学编程的小伙伴们,以上信息你知道吗?这是应该知道的哦,请存入你的脑瓜✔

最后

以上就是痴情短靴为你收集整理的事关Java垃圾,你知道吗?的全部内容,希望文章能够帮你解决事关Java垃圾,你知道吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部