回收虚拟机空间,虚拟机回收磁盘空间

作者:高方托管网 2024-10-14 20:49:43 0

大家好,今天小编关注到一个比较有意思的话题,就是关于回收虚拟机空间的问题,于是小编就整理了1个相关介绍回收虚拟机空间的解答,让我们一起看看吧。

Spring管理单例对象的时候,如何实现不被JVM回收的?

这个问题肯定要分为JVM对象回收和Spring对象管理来说的!如果看完还不会,你尽管来抽我。。

回收虚拟机空间,虚拟机回收磁盘空间

一,JVM对象回收:

就是对没有引用存在的对象进行回收,最原始的做法是加一个对象引用计数器,比如A被B引用了,则A对象的引用计数器为1,只要B没被回收,A的引用计数大于0,A就不会被回收!

但是这样做是有隐患的,如果A引用B,B引用A,然后没有任何其他对象引用A,B的时候,理论上AB都应该被回收了,但是AB引用计数器上面的计数都为1,不能回收,这样两个永远不会使用但也无法回收的对象占据着内存,直到内存溢出!

JVM是怎么解决这一现象的呢?引入一个GCRoots(引用链)的东西,把静态对象引用,常量引用等作为根节点,其余所有的引用都挂在这棵引用树上,上面说到的AB,如果从根节点上遍历的时候没有找到AB的引用(不可达根节点),就说明AB已经脱离了引用链,就算引用计数器还为1,也将被回收!

二,spring管理对象:

首先我们要知道spring通过IOC控制反转帮助开发者管理对象,在spring容器启动的时候加载类(所有实现了BeanFactory的类),然后实例化对象(这儿不讨论是否懒加载等),最后进行使用!

如下图,就是创建对象的父接口:

先看SimpleJndiBeanFactory类:

到此,以上就是小编对于回收虚拟机空间的问题就介绍到这了,希望介绍关于回收虚拟机空间的1点解答对大家有用。

相关推荐