<分区>
Possible Duplicate:
Garbage Collection and Threads
我在面试中遇到了这个问题: 假设我们创建了多个线程,如果其中一个线程调用垃圾回收,其他线程中未引用的对象是否也会被回收?
<分区>
Possible Duplicate:
Garbage Collection and Threads
我在面试中遇到了这个问题: 假设我们创建了多个线程,如果其中一个线程调用垃圾回收,其他线程中未引用的对象是否也会被回收?
最佳答案
是也不是。
if one of the threads calls garbage collection, will the un-referenced objects in other threads be collected also?
是的。对象不是“在线程中”——程序中运行的所有线程都有一个对象图,因此当 GC 发生时,无法访问的对象将被收集,无论哪个线程创建它们,或对它们有本地引用。
没有。当线程调用 Runtime.gc()
时,VM 没有义务实际执行任何操作,因此可能没有 GC 发生并且没有收集内存。例如,当在命令行指定 -XX:+DisableExplicitGC
时,它没有任何效果。
Calling this method suggests that the Java virtual machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse.
没有。即使发生 GC,也不一定会收集所有只能从一个线程的堆栈中访问的无法访问的对象,因为分代 GC 仅处理对象图的一个子集,并且如果该子集恰好包含由一个线程创建的所有无法访问的对象特定线程那么它只是巧合。
关于java - 多线程垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14555095/