Java 多线程垃圾收集

Java 多线程垃圾收集,java,multithreading,garbage-collection,Java,Multithreading,Garbage Collection,可能重复: 我在一次采访中得到了这个问题: 假设我们创建了多个线程,如果其中一个线程调用垃圾收集,其他线程中未引用的对象也会被收集吗?是和否 如果其中一个线程调用垃圾收集,其他线程中未引用的对象是否也会被收集 对。对象不是“在线程中”——程序中运行的所有线程都有一个单一的对象图,因此当GC发生时,将收集不可访问的对象,而不管是哪个线程创建的对象,或者对它们有本地引用 否。当线程调用Runtime.gc()时,VM没有义务实际执行任何操作,因此可能没有gc发生,也没有收集内存。例如,当在命令行中

可能重复:

我在一次采访中得到了这个问题: 假设我们创建了多个线程,如果其中一个线程调用垃圾收集,其他线程中未引用的对象也会被收集吗?

是和否

如果其中一个线程调用垃圾收集,其他线程中未引用的对象是否也会被收集

对。对象不是“在线程中”——程序中运行的所有线程都有一个单一的对象图,因此当GC发生时,将收集不可访问的对象,而不管是哪个线程创建的对象,或者对它们有本地引用

否。当线程调用
Runtime.gc()
时,VM没有义务实际执行任何操作,因此可能没有gc发生,也没有收集内存。例如,当在命令行中指定了
-XX:+DisableExplicitGC
时,它不起作用

调用此方法表明Java虚拟机花费精力回收未使用的对象,以使它们当前占用的内存可用于快速重用


不。即使发生GC,也不一定会收集所有只能从一个线程堆栈访问的不可访问对象,因为分代GC只处理对象图的一个子集,如果该子集恰好包含由特定线程创建的所有无法访问的对象,那么这只是巧合。

这与多线程垃圾收集有什么关系?听起来像是多线程和垃圾收集。