jvm学习笔记(GC,分代思想,TLAB),一文轻松搞定

本文详细阐述了Java内存管理中的新生代、老年代结构,以及不同类型的垃圾收集(MinorGC、MajorGC和FullGC)。重点介绍了分代GC的设计目的和JDK8后的Metaspace变化。此外,还讨论了GC对性能的影响,特别是STW机制和System.gc()的触发条件。
摘要由CSDN通过智能技术生成

经研究,不同对象的生命周期不同,70%~90%是临时对象

1.新生代:有Eden,两块大小相同的Survivor(又称form/to,s0/s1)

构成,form和to总有一方为空,并且form和to不固定指向哪方

2.老年代:存放新生代中经历多次GC仍能存活的对象

在这里插入图片描述

理解: 其实不分代完全可以,分代的唯一理由就是优化GC性能,如果没有分代,那所有的对象在一块,就如同把学校的人都关在一个教室,GC的时候要找到哪些对象没用,这样就会对堆的所有区域进行扫描,而很多对象都是朝生夕死的,如果分代的话,把新创建的对象放到某一地方,当GC的时候先把这块存储“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来

在这里插入图片描述

Jdk8以后开始把类的元数据放在本地堆内存中,这一块区域就叫做Metaspace

该区域在jdk7及以前是属于永久带的,元空间和永久代都是用来存储class相关信

息,包括class对象的Method,Field等,元空间和永久代其实都是方法区的实现,

只是实现有所不同,所以说方法区其实只是一种JVM的规范。

其中:Jdk1.6 —> jdk1.7的时候将字符串常量池存放的地方从方法区改到

了堆空间

二、三类GC介绍

===========================================================================

JVM在进行GC时,并非每次都对上面三个内存(新生代,老年代,方法区)区域

一起回收的,大部分时候回收的都是指新生代。

针对HotSpot VM的实现,它里面的GC按照回收区域分为两大种类型:一种是部

分收集(Partial GC),一种是整堆收集(Full GC)

1.部分收集:不是完整收集整个Java堆的垃圾收集,其中又分为:

(1)新生代收集(Minor GC / Young GC):只是新生代(Eden / S0,S1)的

垃圾收集

(2)老年代收集(Major GC / Old GC):只是老年代的垃圾收集

· 目前,只有CMS GC 会有单独回收老年代的行为

· 注意,很多时候Major GC 会和Full GC 混淆使用,需要具体分辨是

老年代回收还是整堆回收

(3)混合收集(Mixed GC):收集整个新生代以及部分老年代的垃圾收集

· 目前,只有G1 GC会有这种行为

2.整堆收集(Full GC):收集整个Java堆和方法区的垃圾收集

1.Minor GC


年轻代GC(Minor GC)触发机制

1.当年轻代空间不足时,就会触发Minor GC,这里的年轻代满指的是Eden代满,Survivor满不会引发GC(每次Minor GC 会清理年轻代的内存)

2.因为,Java对象大都具备朝生夕死的特性,所以MinorGC非常频繁,一般回收速度也比较快,这一定义既清晰又易于理解

3.Minor GC会引发STW,暂停其他用户的线程,等垃圾回收结束,用户线程才恢复运行**

Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程

序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现

象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这

些现象多半是由于gc引起,因此jvm调优大部分是让GC的次数少一些。

2.Major GC


老年代GC(Major GC)触发机制

1.指发生在老年代的GC,对象从老年代消失时,我们说“MajorGC”或“Full GC”发生了

2.出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行MajorGC的策略选择过程)

·也就是在老年代空间不足时,会先尝试触发MinorGC,如果之后空间还不足,则触发Major GC

3.Major GC的速度一般会比Minor GC慢十倍以上,STW的时间更长

4.如果Major GC后,内存还不足,就报OOM了

5.Major GC的速度一般会比Minor GC慢十倍以上

3.Full GC


触发Full GC执行的情况有如下五种

1.调用System.gc()时,系统建议执行Full GC,但是不必然执行

2.老年代空间不足

3.方法区空间不足

4.通过Minor GC后进入老年代的平均大小大于老年代的可用内存

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

]
[外链图片转存中…(img-ghamB0wT-1710883958408)]
[外链图片转存中…(img-l5oVfJct-1710883958408)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-EFPhprQy-1710883958409)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值