JVM怎样判断是垃圾对象进行垃圾回收

简介: 本文讲解JVM怎样判断是垃圾对象进行垃圾回收。

前言



相信大家都听说过JVM垃圾回收机制,大概就是当我们的内存满了的话就会进行垃圾回收机制,将不再用到的对象清理掉,这样我们的内存就又可以有空间存东西了,那么JVM怎么能够知道哪些对象不再用到了呢?下面我来用一个小故事讲解一下。


小故事



李老板开了一个小超市,但是自己平时特别忙,就雇佣了一个管家来看店,平时管家一个人还可以忙的过来,但是快要过年了,大家都来买年货了,管家一个人忙不过来了,然后李老板就找了两个假期短工,一个是学生小明,一个是小明的老师老王,但是呢这两个都需要管家去面试,李老板因为在外地谈生意就直接打电话让两个假期短工直接去超市找管家面试,这里管家只能要一个人,管家想了想觉得学生又便宜又听话,所以就要了学生。到目前为止理论上老师没有面试上就应该回家了,但是在这里管家没有权利让老师回家,老师就赖在店里不走了,老师也不干活也不领工资就是占个座位睡大觉。这个时候店里越来越忙了,这时李老板从外地回来了而且还带回来一个更便宜的假期工小红,但是超市只能容纳三个人,目前已经满了,分别是管家、学生小明、睡觉的老师老王,这个时候李老板就问管家:“你招收了哪个人做假期工了啊!”。管家指向了学生小明,然后李老板知道睡觉的老师老王没有用了,就把他撵出去了,然后李老板让小红进来工作了。


解析



23.png


通过上面的小故事我们来理解一下上面这个图片,上面的图片中person对应管家、student对应小明、teacher对应老师老王,为什么我们在这里要把student和teacher都new出来呢,因为一开始李老板也不知道要哪个人,所以都让他们去超市里面试去了,所以两个人都得new出来,然后再超市里管家招收了学生,就相当于指向了学生一个引用,然后李老板就把老师撵出来了,在这里管家相当于专有名词来说就是“GCRoot根”,而李老板就相当于JVM中用来执行垃圾收集的方法,所以说JVM判断一个对象是不是垃圾就看它有没有被GCRoot根对象引用。


可达性分析算法



上述例子他有一个专有名词叫做“可达性分析算法”,就是通过GCRoot根出发,看看能不能达到一个对象,如果能达到就不是垃圾对象,如果不能达到就是垃圾对象,我们的一个指向就相当于一个小路,由于李老板在问管家招收了谁的时候,管家指向了学生小明,所以学生小明不是垃圾对象就不会被清理,而管家没有指向老师老王,所以老王就相当于垃圾对象就会被清理掉。


总结



所以在java中一个对象不再被使用的时候是不能被立马清理的,必须等李老板(jvm垃圾清理方法)来清理,那么李老板必须等人满了才会过来清理,不满的话是不会过来清理的,所以jvm垃圾清理执行的前提是内存满了,但是垃圾清理方法是会造成系统短暂停顿的,所以我们在jvm调优的时候就是为了尽量不让jvm执行垃圾清理方法。



相关文章
|
3天前
|
存储 算法 Java
先有JVM还是先有垃圾回收器?
是先有垃圾回收器再有JVM呢,还是先有JVM再有垃圾回收器呢?或者是先有垃圾回收再有JVM呢?历史上还真是垃圾回收更早面世,先有垃圾回收再有JVM。下面我们就来刨析刨析JVM的垃圾回收~
13 0
先有JVM还是先有垃圾回收器?
|
3天前
|
安全 算法 Java
深入浅出JVM(十三)之垃圾回收算法细节
深入浅出JVM(十三)之垃圾回收算法细节
|
3天前
|
存储 算法 Java
深入浅出JVM(十二)之垃圾回收算法
深入浅出JVM(十二)之垃圾回收算法
|
3天前
|
存储 算法 NoSQL
深入浅出JVM(十一)之如何判断对象“已死”
深入浅出JVM(十一)之如何判断对象“已死”
|
3天前
|
算法 Java PHP
JVM 的垃圾回收机制以及垃圾回收算法的详解
JVM 的垃圾回收机制以及垃圾回收算法的详解
10 0
|
3天前
|
存储 缓存 算法
深入浅出JVM(一)之Hotspot虚拟机中的对象
深入浅出JVM(一)之Hotspot虚拟机中的对象
|
3天前
|
监控 算法 安全
JVM工作原理与实战(三十九):G1垃圾回收器原理
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器执行流程、年轻代回收原理、卡表(Card Table)、记忆集的生成流程、年轻代回收的详细步骤、混合回收的步骤、初始标记、并发标记、SATB、转移等内容。
22 0
|
3天前
|
存储 监控 算法
JVM工作原理与实战(二十七):堆的垃圾回收-G1垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器、G1垃圾回收器的回收方式、G1垃圾回收器执行流程、垃圾回收器的选择等内容。
12 0
|
3天前
|
机器学习/深度学习 监控 算法
JVM工作原理与实战(二十六):堆的垃圾回收-垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收器、Serial垃圾回收器、SerialOld垃圾回收器、ParNew垃圾回收器、CMS垃圾回收器、Parallel Scavenge垃圾回收器、Parallel Old垃圾回收器等内容。
13 0
|
3天前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
22 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法