JAVA内存管理新生代_JVM之HotSpot内存管理机制(三)

释放双眼,带上耳机,听听看~!

HotSpot在内存管理上对JVM内存采用了分代管理机制:

5fd65baa7804f1a85ad7190a6eb6855b.png

HotSpot将堆内存分为了三个区域:

1)Perm:永久代(1.7版本及之前被称为永久代对应的是Method Area方法区)

2)New/Young:新生代(新生代由Eden伊甸园区和存活区组成)

3)Old:旧生代

在tomcat管理界面可查看到JVM分代管理的信息

以下基于jdk1.8

d1026c0b09c4ebc61f578bc4d9ce8365.png

1df4dba28e71321123b4d7c37a989a3e.png

新生代(New/Young):

f0fdfe534a5e15a62ad936810f8c69cc.png

新生代用于存放新创建的对象,新生代又被分为三个区段,分别是Eden伊甸园区、S0区、S1区(S0和S1区原名为 Survivor Space存活区),又被称为From/To区,To总为空。

一般在Eden分配对象,优化:Thread Local Allocation Buffer;

保存80%-90%生命周期较短得对象,新生代区域GC频率高,所以采用效率较高的 复制算法Copying

GC类型:Minor GC 被称为小GC,针对新生代的垃圾回收。新生代区可能会一直进行创建对象、复制对象、GC掉不可用对象,保留可用对象,交换S0到S1的名称,直到新生代区内存区域满了之后,就会将活下来的对象移动到Old区,然后进行Minor GC操作。

在HostPsot内存管理中,不同对象的生命周期不同,98%的对象都是临时对象(临时对象只会在新生代中进行复制,在被放到旧生代之前就被抛弃,只有极少数的对象能被放到旧生代中)。

旧生代(Old):

3c8c8d6fb6973c0ea28fa971fecca3c2.png

存放新生代中经历多次GC仍然存活的对象

新建的对象也有可能直接在年老代中分配,取决于具体GC的实现。可以配置参数当对象大于多少内存空间则直接放入旧生代等。

GC频率相对较低,因为对象要成功熬过在新生代过程中的好几轮的GC才能进入旧生代区,旧生代采用 标记-清理-压缩(mark-sweep-compaction)算法,使算法的结合和优化。

GC类型:Major GC 被称为大GC,针对旧生代的垃圾回收。当新生代将对象陆续放入旧生代区域中,旧生代内存空间满了以后,则会进行Major GC,来一次清理以释放内存空间。

永久代(Permanent Generation):

永久代存放Java本身的一些数据,当类不在使用时,也会被回收。

永久代在JDK1.7版本中对应的是JVM运行时内存环境中的Method Area方法区。

在JDK1.8中取消了永久代,用于代替永久代的有Code Cache代码缓存区、Compressed Class Space压缩类空间、Metaspace元空间。

GC类型:Full GC :完全的垃圾回收, 针对永久代(Code Cache代码缓存区、Compressed Class Space压缩类空间、Metaspace元空间)、新生代、旧生代三者的垃圾回收、

如果永久代内存区域也满了以后则会进行一次Full GC,此次GC会暂停JVM的所有线程,来专注清理内存空间,务必对代码来说是一次打击。会造成程序进入一个假死的状态,因为所有的JVM线程全部被终止,不会再处理任何请求。被称为 STP状态。

当永久代和旧生代触发GC时,多数垃圾回收器都会触发Full GC。

* 首先按照新生代配置的GC方式进行 Minor GC 小GC。

* 再按照旧生代配置的GC方式对 旧生代代和永久代进行GC

* 如果JVM估计 Minor GC 后可能会发生晋升失败,则直接采用旧生代配置的GC方式对 Young、Old、Perm进行大GC或者Full GC。

本章完 下章讲解HotSpot垃圾回收器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值