При исследовании Почему ThreadPoolExecutor ведет себя по-другому при запуске Java-программы в Eclipse и из командной строки? Я написал тест, который вызывает очень странный 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
вызов break GC/JVM?