Java垃圾回收机制,以及分代垃圾回收称过程(文档翻译)

     自动垃圾回收是查找堆内存的过程。识别那些对象正在使用,哪些对象没有被使用,并且删除未使用的对象。一个正在使用的对象,或者正在被引用的对象,意味着你的程序仍然保留着一个指向这个对象的指针。一个未被使用的对象,或者未被引用的对象,是不再被你的程序使用的对象。因此被无效对象占用的内存应该被回收。

     在C语言当中,分配和取消内存使用是手动的过程。在Java当中,取消内存分配是被垃圾回收器自动处理,基本的过程如下。

第一步:标记

          第一步叫做标记,这一步是定位/标识哪一块内存正在使用,哪一块内存将被回收。蓝色的是保留了引用的对象,金色是未使用的(应当被回收的对象),所有的对象都被扫描。这是一个耗时的过程。

 

 

第二部:正常删除

     正常伤处未引用的对象,保留引用的对象,并且指向可用内存空间。

    

第二步:2a 删除并且使内存空间变得紧凑

       为了提高性能,除了删除未引用的对象,你还可以让保留的引用对象变得紧凑,通过将引用对象移动到一起。这个能让创建爱你内存空间更容易快,更快。

为什么使用分代垃圾回收?

早期开始的时候,不得不标记和压缩所有的对象,在JVM中是低效的,当越来越多的对象被创建,对象列表不断地增长,导致越来越唱的垃圾回收时间,然而,对于应用的经验分析表明,大多数对象的生命是很短暂的。

       这里是一个例子,随着时间的变化,存活对象的变化情况。

JVM分代

从对象的创建行为,可以被用于加强JVM的性能,堆内存被分为较小的部分或者.代,堆内存分为 年轻代/年老代,和永久代。

下面是Hotspot 堆内存结构。年轻代是所有新对象创建和变新年龄的地方。当年轻代内存占满了之后,会触发minor GC ,也就是小范围GC。minor GC发生在年轻。在对象高死亡率的条件下MinorGc能优化性能。年轻代充满了无效对象将被回收的特别快。一些存活的对象更新年龄最后移动到年老代。

Stop the world Event(停止世界事件)

所有的minor GC 是Stop world事件,这意味着所有的应用程序线程停止,直到Minor GC操作完成。

年老代用于存储长期存活的对象,一般来说,到达指定的阈值年轻代的对象会被移动到年老代。直到年老代被填充满触发majorGC。MajorGc 也会触发stop the world时间。频繁触发major collection是非常耗时的,因为它涉及到所有存活的对象。所以对于响应式程序。majorGC 应该被最小化。应当注意的是,Major GC停止程序的时间受到垃圾回收器的类型影响。

永久代包含JVM使用的元数据,用于描述应用的classes,和方法。

 

 

===================================这里是分代垃圾回收过程=====================================

1、首先所有的新对象创建在年轻代的Eden区。

2、当Eden区填内存块填充满之后,触发Minor GC

3、引用对象被移动到第一个survivor空间也就是s0,无引用对象将被删除,当清空eden区空间时。

 

4、在下一次minorGc,执行步骤3的操作,未引用的对象将会被删除,引用的对象呗移动到survivor区。在这一次操作中,这些存活的对象会被移动到S1,这一次GC会涉及到Eden区、S0区,将这两个区存活的对象移动到S1后,清空这两个内存块。并且存活对象的年龄将+1。

5、在下一次Gc中,会重复3,4的过程。会切换survivor区,引用的对象被移动到S0,S1和Eden区会被清空

 

 

6、当存活的对象的年龄到达一个阈值之后(一般是15,这里的展示的是8),这些存活的对象会升级到年老代。

7、持续进行MinorGc操作,满足条件的对象会被移动到年老代,升级当爷爷。

 

8、以上几个步骤很大程度覆盖了整个年轻代 的GC过程,最后,MajorGc将会在年老代执行。清理和压缩空间。以下是GC工程总览。

验证这个过程可以使用JDK自带的工具jvisualvm.exe 目录在Java\jdk1.8.0_31\bin, 永久代在新版本的Hotspot已经删除,新版本增加了MetaSpace。元数据区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值