首页 > 其他分享 >[JVM]垃圾回收

[JVM]垃圾回收

时间:2024-07-12 16:54:53浏览次数:15  
标签:对象 回收 线程 垃圾 JVM 伊甸园 内存

垃圾回收机制
标记+清除

先标记哪些内存没有被引用,然后释放这些内存
注意,释放不代表要重写这些内存里的数据,只需要把这段内存的起始和结束的地址记录下来即可。
速度很快,但是很容易产生内存碎片

标记+整理

先标记哪些内存没有被引用,然后释放这些内存,
注意,释放内存之后要进行紧凑操作,也就是要把仍然有效的数据挨在一起,
不容易产生内存碎片,但是,花费时间较高,因为要牵扯到内存数据的复制还有仍然有效的这些对象地址的修改

标记+复制

from to
0 1 1 1 0 0 0 0 0 0
我们对from区的数据进行标记,把仍然有效的数据都复制到to区

from to
0 0 0 0 0 1 1 1 0 0
最后,交换from和to区域的指针,把这两块区域换过来
保持to区一直是空闲的。

from to
1 1 1 0 0 0 0 0 0 0
不会产生内存碎片,但是需要占用两倍的内存空间

分代垃圾回收

将内存区域分为新生代和老年代,
新生代的区域存放那些使用过后就被回收的对象,
而老年代则存放那些需要一直保存的对象,

新生代 老年代
伊甸园 from to
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
新产生的对象分配在伊甸园区域,
当伊甸园区域内存不够时,进行minorgc垃圾回收,
把仍然有效的对象放入to区,给这些对象的寿命+1,然后交换from和to,保持to一直是空的状态,
minorgc之后,伊甸园腾出空间,我们可以继续往里面存放对象,当伊甸园空间又不足的时候,我们再次进行minorgc,这一次不仅要考虑伊甸园中的对象是否存活,还要考虑from中的对象是否存活,把存活的仍然存活的对象放入to区,对其寿命+1,

当经过多次回收的对象仍然存活时,也就是from区的对象寿命超过一定值的时候(默认15,因为使用4bit存储这个寿命),我们考虑将其放入老年代,

当老年代的内存也满了的时候,先进行一次minor gc如果内存还不足,再进行fullgc,对新生代和老年代进行统一的清理。

minor gc和full gc 会引发stop the world,也就是会停下用户线程,只允许垃圾回收的线程运行,因为垃圾回收涉及到了对象的移动操作,如果不停下用户线程,用户线程可能会去访问一个已经被清空的地址,产生混乱。等垃圾回收结束,用户线程再次运行。minor gc这个暂停时间是很短的,毕竟大多数的新生代都是垃圾,不需要移动很多。full gc暂停时间较长。

如果我们需要存放一个大对象,伊甸园没有这么大的空间而老年代却可以放得下时,会直接放入老年代。

如果在一个线程中发生了内存溢出,并不会影响到主线程main的运行。

垃圾回收器

串行
单线程,堆内存较小,适合个人电脑
吞吐量优先
多线程,堆内存较大,多核cpu,在一定时间范围内让STW最短
响应时间优先
多线程,堆内存较大,多核CPU,只关注单次STW,让每次STW最短

标签:对象,回收,线程,垃圾,JVM,伊甸园,内存
From: https://www.cnblogs.com/DCFV/p/18298872

相关文章

  • [JVM]类加载
    类加载加载java数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预先定义,引用数据类型才需要类的加载过程。类的加载,就是将java类的字节码文件加载到内存中,并通过字节码在内存中构建出类的原型---类模板对象。jvm把字节码中的常量池,类字段,类方法等信息存储到类模......
  • 旧衣回收小程序开发,提高回收效率,实现创收
    随着人们生活水平的提高,对穿衣打扮也越来越重视,衣服更换频率逐渐增高,旧衣回收行业因此产生,并随着市场规模的扩大,拥有了完善的回收产业链,旧衣回收行业的发展不仅能够让大众获得新的赚钱方式,也为我国资源回收利用、保护环境做出了贡献。一、旧衣回收小程序特点旧衣回收市场的......
  • 十八.升职加薪系列-JVM垃圾回收器-开天辟地的ZGC
    前言随着Java的发展,JVM的GC垃圾回收器也在跟着升级,从早起的单线程垃圾回收器Serial,到多线程的垃圾回收器ParallelScavenge,再到并发垃圾回收器CMS,G1等。它们在某些对延迟要求比较高的系统来说都有些力不从心,比如:12346,股票,基金等业务。JVM垃圾器的STW机制(StopTheWorld)......
  • CleanMyMac X4.15.5破解版下载!你的电脑清洁神器,让垃圾无处遁形
    ......
  • JVM是如何创建一个对象的?
    面试连环callJava对象创建的流程是什么样?JVM执行new关键字时都有哪些操作?JVM在频繁创建对象时,如何保证线程安全?Java对象的内存布局是什么样的?对象头都存储哪些数据?带着这些问题,让我们开始吧!......
  • Java虚拟机(JVM)修复
    一、确定问题原因首先,需要明确Java虚拟机出现问题的具体原因。这可以通过以下方式进行:查看错误日志:JVM和Java应用程序会生成日志文件,这些文件记录了运行时的详细信息,包括错误信息和系统警告。通过查看这些日志,可以获得导致JVM故障的线索。使用调试工具:如jstack、jmap、jconsole......
  • JVM是如何创建一个对象的?
    哈喽,大家好......
  • Java中的垃圾回收机制详解
    Java中的垃圾回收机制详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Java中的垃圾回收(GarbageCollection,GC)机制是Java虚拟机(JVM)管理内存的一项重要功能。GC机制通过自动回收不再使用的对象所占用的内存,防止内存泄漏,提升应用程序的性能和稳定性。......
  • 回收站清空恢复?其实很简单!6种方法集合任你选!
    在我们的日常生活和工作中,误删文件的情况时有发生,尤其是当我们匆忙操作或者误操作时,更容易将重要文件不小心清空到回收站。回收站清空恢复看似复杂,实则方法多样,只需掌握正确的技巧,就能轻松恢复重要文件。本文将为大家介绍六种行之有效的方法,其中包括使用广受好评的嗨格式数据恢......
  • 垃圾话
    有点急眼,把做题纪要删了,因为觉得自己效率太低,并且啥都不会,写出来不好看。很难受,之前总写日记,实际上也不是日记,后来从丁真那里学到个词,叫“垃圾话”。之后觉得确实很垃圾,全都隐了。在那天又一次立flag,要提高自己状态。感觉状态确实比前几天好很多,但是效率仍太低了,很焦虑,只能继续......