在调查为什么 ThreadPoolExecutor 在 Eclipse 和命令行中运行 Java 程序时表现不同?我写了一个测试,抛出一个非常奇怪的 OutOfMemoryError (max mem = 256 Mb)
class A {
byte[] buf = new byte[150_000_000];
protected void finalize() {
int i = 1;
}
}
A a1 = new A();
a1 = null;
A a2 = new A();
注释掉int i = 1
并且测试有效。据我了解,什么时候finalize
是空的 HotSpot 只是忽略它。但是一个实际上是空的finalize
调用怎么会破坏 GC/JVM 呢?