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

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

前言



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


小故事



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


解析



23.png


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


可达性分析算法



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


总结



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



相关文章
|
1月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
40 0
|
10天前
|
算法 网络协议 Java
【JVM】——GC垃圾回收机制(图解通俗易懂)
GC垃圾回收,标识出垃圾(计数机制、可达性分析)内存释放机制(标记清除、复制算法、标记整理、分代回收)
|
1月前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
44 3
|
1月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
12天前
|
缓存 Java
JVM对象引用
本次课程聚焦JVM对象引用,涵盖强引用、软引用、弱引用和虚引用。强引用是最常见的引用类型,确保对象不会被垃圾回收器回收,适用于需要确保对象存活的场景;软引用在内存不足时会被优先回收,常用于缓存;弱引用的对象随时可能被回收,适合临时对象;虚引用最弱,主要用于接收对象回收通知,进行资源清理。通过合理选择引用类型,可优化内存管理,避免内存泄露。
|
2月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
54 1
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
110 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
4月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
3月前
|
存储 Java PHP
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
88 0
|
4月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制(GC)
本文将探讨Java的自动内存管理核心——垃圾回收机制。通过详细解析标记-清除算法、复制算法和标记-整理算法等常用垃圾回收算法,以及CMS、G1等常见垃圾回收器,帮助读者更好地理解Java应用的性能优化和内存管理。同时,探讨分代收集、分区收集等策略在实际项目中的应用。结语部分总结了垃圾回收机制在Java开发中的重要性,并展望了未来可能的发展。
95 0