最近在看JVM,想到一个问题,就是 如果我实例化一个对象,该对象引用肯定在栈上,而对象实例化的数据等在堆上,如果我一直不引用该对象,也不让其他对象引用它,调用它,会不会java垃圾回收机制将堆内存数据清理,但我再使用栈上的该对象引用时,在堆上找不到,会不会在该内存空间重新建造数据,还是垃圾回收机制压根没有清理。。。。。。本人尚未触及垃圾回收机制,对垃圾回收机制一知半解,求大神为我解答!!!
GC判断一个对象是否存活常用的有两种办法:引用计数和可达分析。 (1)引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。 (2)可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。不可达对象。 通过第二种方式可以获取到这个对象有没有被引用,有引用就不会被清理。用过了,且后续不会再使用,通过第一种方式,在调用结束后会清理。
67,513
社区成员
225,879
社区内容
加载中
试试用AI创作助手写篇文章吧