我从多个来源读到,java垃圾收集器释放了未使用的对象的内存。我的问题是它是如何知道它没有被使用的?我是否正确地说,如果我初始化了一些数组,并且该数组从未被引用过或被修改过,那个变量的内存空间将被释放?
由于
答案 0 :(得分:1)
然后它将成为垃圾收集器的候选者。 如果没有对此对象的引用,它将是候选者。何时收集,取决于GC的策略。
答案 1 :(得分:0)
垃圾收集器只在需要时释放内存。因此无法保证它将被释放。
可以释放通过硬引用无法从Thread堆栈访问的任何对象。
答案 2 :(得分:0)
根据规格,您可以请求GC,但不能强制它。
在你的情况下,数组将成为GC的候选者,当JVM确定它需要内存时它会启动GC,通常是当可用内存占全部内存的15%时,这就是我观察到的IBM JVM,但并非总是如此。
答案 3 :(得分:0)
垃圾收集器使用非确定性方法...即。你永远不会知道它什么时候会运行......你可以要求它,但永远不要确定它会在你打电话后立即运行......
只有在程序中完全没有引用或者在执行完所有引用后它们都没有引用时,才会从内存中清除为数组提供的示例,但是你无法确定当那个记忆被释放时......
你可以把垃圾收集者想象成一个懒惰的家伙....但是,为什么要责备它,毕竟它完成了所有肮脏的清洁工作;)