在调查为什么在Eclipse中运行Java程序和从命令行运行时ThreadPoolExecutor的行为不同时,我编写了一个测试,它会抛出一个非常奇怪的OutOfMemoryError(最大内存=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呢?