JVM的运行及垃圾回收

JVM是如何运行的?

我们日常写的jar、war文件通过打包编译生成.class文件,通过类加载类器进行加载,放入metaspace空间。
Spring容器通过反射技术创建bean实例,此时会把bean对象存在于堆内存空间。
当客户端浏览器发起请求后,由线程执行该请求,线程会执行堆内存空间对象的一些方法。
线程是独享栈内存空间的,而此时会将方法写入栈帧,而方法中的局部变量会写入局部变量表中,如果该方法内还有其他方法执行,则一次将该方法与局部变量写入栈帧和局部变量表中(栈为先进后出),因此,先执行后写入栈帧的方法。
局部变量表中的变量会引用堆内存所创建的对象,当所有的方法执行完毕,栈帧中的方法不在引用堆内存中的对象,因此,就需要垃圾回收将堆内存中废弃的对象进行回收处理。

在这里插入图片描述
那么,垃圾回收器都会回收哪些对象呢?首先,如果是静态类型的变量或者正在被引用的变量,垃圾回收器都不会对它进行回收,其余的对象都可被回收。
如何将废弃对象进行垃圾回收呢?那就要针对堆内存的分配来进行,一般将堆内存分为年轻代和老年代,年轻代又分为Eden、S1、S2区域。举个例子,如果将4G内存分配给堆内存话,老年代和年轻代各占2G,而年轻代的Eden、S1、S2的比例一般8:1:1。
因为年轻代属于创建了大量的对象,并且常被废弃,因此存活对象很少,所以一般采用复制算法。将Eden区中存活的对象移入S1\S2区域,然后进行清除操作。
而进行老年代的对象一般为大对象或者长期存活的对象,一般阈值为15。在进行老年代垃圾回收的时候,一般采用标记-清除、标记-整理算法进行。标记清除算法会产生内存碎片,导致内存空间不足,因此才会有标记-整理,将存活对象向一侧移动后,然后清理到废弃对象。而分代收集算法说的就是根据年轻代和老年代的特点采用不同的垃圾收集算法。
那么在进行垃圾回收的时候,势必会用到垃圾收集器,其实在jdk1.8之前一般都采用parNew+cms的垃圾收集器,1.8以后一般都采用G1。而垃圾收集器不仅仅是这几种,包括
Serial 收集器,历史比较悠久,串行的垃圾收集器,在进行垃圾收集的时候,所有工作的线程都要暂停工作,因为没有和线程交互,所以比较简单高效,新生代采用复制算法,老年代采用标记-整理算法,是运行在client模式下的首要选择。

ParNew 收集器,新生代采用复制算法,老年代采用标记-整理算法,Serial的多线程版本,运行在server模式下的首要选择。除了Serial外,只有它能和CMS收集器配合工作。

Parallel Scavenge 关注吞吐量,高效率的利用CPU,为用户找到最合适的停顿时间或者最大的吞吐量。新生代采用复制算法,老年代采用标记-整理算法。
Serial Old Serial的老年代版本,是单线程收集器,作为CMS收集器的后备方案。

Parallel Scavenge 收集器的老年代版本,使用多线程和标记-整理算法,注重吞吐量和CPU资源的额场合,都可以考虑。

CMS 收集器,获得最短回收停顿时间为目标的垃圾收集器,非常符合在注重用户体验的应用上使用。是真正意义上的并发收集器,实现了垃圾收集线程和用户线程同时操作。包括初始标记,并发标记,重新标记和并发清除。

  • 初始标记,暂停所有的线程,记录下直接与root相连的对象,速度很快
  • 并发标记下,同时开启GC和用户线程,用一个闭包结构区标记可达对象。
  • 重新标记,修正并发期间因为用户程序运行而导致标记产生变化的那一部分对象的标记记录,停顿时间比初始标记的时间长,比并发标记的时间短一些。
  • 并发清除,开启用户线程,同时GC线程开始为标记区域做清扫。

G1收集器
面向服务器的垃圾收集器,配备多颗处理器及大容量内存机器,满足GC停顿时间的同时,还具备高吞吐量的性能。
并发并行,使用多个CPU缩短停顿时间,原本需要Java线程停顿执行的操作,G1收集器仍然可以让Java程序继续执行
分代收集,还是保留了分代的概念,局部是复制算法,整体是标记-整理算法。可预测的停顿,建立可预测停顿时间模型。
G1收集器,大致可以分为,

  • 初始标记
  • 并发标记
  • 重新标记
  • 筛选回收

G1收集器在后台维护了一个优先列表,每次根据允许收集的时间,优先选择回收价值最大的Region。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值