jvm学习笔记(GC,分代思想,TLAB),面试4个月被17家公司拒绝

本文详细介绍了Java虚拟机中的TLAB(ThreadLocalAllocationBuffer)概念,探讨了为何需要分代思想以及新生代、老年代和元空间的结构。文章还阐述了GC(垃圾回收)的分型,特别是部分收集(如MinorGC和MajorGC)和整堆收集(FullGC),以及它们的触发条件和性能差异。最后,给出了学习前端开发资源的推荐。
摘要由CSDN通过智能技术生成
  • 四、TLAB(Thread Local Allocation Buffer)

    • 1.什么是TLAB
  • 2.为什么有TLAB(Thread Local Allocation Buffer)

  • 五、测试堆空间常用的jvm参数


前言

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

在jvm中,大致可以将堆空间分为年轻代,老年代,永久代,在这些区分中免不了的要进行垃圾回收(GC),接下来简述为什么要进行划分以及三种主要的GC的介绍,至于jvm更基本的知识可以参见其他文章


一、分代思想

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

1.为什么需要把java堆进行分代,不分代就不能正常工作了吗?


经研究,不同对象的生命周期不同,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了

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

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

推荐一些系统学习的途径和方法。

路线图

每个Web开发人员必备,很权威很齐全的Web开发文档。作为学习辞典使用,可以查询到每个概念、方法、属性的详细解释,注意使用英文关键字搜索。里面的一些 HTML,CSS,HTTP 技术教程也相当不错。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

HTML 和 CSS:

html5知识

css基础知识

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】]( )**

HTML 和 CSS:

html5知识

css基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值