【JVM】初识JVM(下)

上篇博客中,我们说了说JVM的结构和堆的分代,这次我们简单说说JVM的垃圾回收机制和监测。

JVM的垃圾回收机制

再来看下图,只有方法区和堆是线程共享的,所以只有他俩有垃圾回收机制。其余的都随线程死而死了,也就没有垃圾之说了。

何为垃圾?不再被引用的对象就是垃圾。垃圾回收就是将此对象清除出来,释放空间。这样就可以盛放新的对象了。
至于方法区是不是和堆中的永久代是一回事,好像没有定论。

几种垃圾回收算法

复制算法

定义:把内存分为2个空间:A和B,一个用来负责装载正常的对象信息,一个用来做垃圾回收。每次把A中存活的对象全部复制到B里面,再一次性的将A删除。
其中,伊甸区和幸存0、1区的比例是:8:1:1。

特点:没有碎片问题,但是内存缩小为了原来的一半。适用于新生代的回收。

标记清除算法

定义:先标记,再清除。先开始对存活的对象进行标记,然后将没有被标记的对象进行回收。

特点:会产生大量的碎片

标记整理算法

定义:前面两者的综合,先标记、清除完,然后将存活的对象移动到内存的一端。

特点:成本较高,但是解决了碎片问题。适用于老年代的回收。

几种垃圾收集器

垃圾回收算法和垃圾收集器的关系:垃圾回收算法是理论,垃圾收集器是实践。可以说某某收集器用的是某某回收算法。
下图是7种垃圾收集器,3种适用于新生代,3种适用于老年代,还有一种G1适用于两者。如果两个收集器之间连线,说明其可以搭配使用。

新生代

Serial收集器
单线程,在进行垃圾收集时必须暂停其他所有的工作线程。

ParNew收集器
是Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余与Serial收集器相同。

Parallel Scavenge收集器
使用复制算法的并行的多线程收集器。

老年代

CMS收集器
一种以获取最短回收停顿时间为目标的收集器。优点:并发收集,低停顿。基于“标记-清除”算法。

Serial Old收集器
Serial收集器的老年代版本,单线程,使用标记整理算法。

Parallel Old收集器
Parallel Scavenge收集器的老年代版本,多线程,使用标记整理算法。

综合

G1收集器
基于“标记-整理”算法实现收集器,可以非常精确地控制停顿。

JVM性能监测

对于JVM调优,等日后再总结。今天只说一个监测工具——Java VisualVM。

启动

在cmd中输入jvisualvm命令,启动程序。
在这里插入图片描述

查看性能

此时就能在监视里看到性能状况了。
在这里插入图片描述
小结
在这次JVM的学习中,我对怎么学习有了更深一层的理解:
(1)学啥得有个系统,好理解的知识可以看书,难理解的可以看视频。先总结出一个体系,然后再往里面填东西,这个时候有哪些细节不懂,再去查博客。
(2)对学习材料要一个精通,多个泛读,不管多难的知识点,多看几个资料,当有了共鸣,也就理解了。如果还是不懂怎么办?那就“吊起来”,也就是写下来,不管了,等日后再来看,说不定就明白了。
(3)怎么使用博客?对于一个新概念,前期可以在网上查查这是个什么东西,10分钟大致浏览一下;后期填补空白的时候,可以多查查,看看别人是怎么说的。
(4)学新知识时,要多和旧知识、现实生活联系。这样,自己的知识网才能更严谨。

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的熊kfk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值