我必須解析一個3千兆xml文件,並用SAX生成一個修改後的文件。Java垃圾收集器 - 我如何確定它已被執行
要做到這一點,我使用序列化的對象,一個線程。
第一次測試對於小文件來說非常棒。但是對於一個3 giga文件,它會產生大量未使用的實例。
我想確保垃圾收集器已被執行。
我的想法:
if(...)
{
for (int i = 0; i < 100; i++)
{
System.gc();
}
}
或另一種思路:
if(...)
{
Thread.sleep(1 800 000);//30mn
for (int i = 0; i < 50; i++) {
System.gc();
}
Thread.sleep(1 800 000);//30mn
for (int i = 0; i < 50; i++) {
System.gc();
}
}
我不知道Java垃圾收集很多東西......你對此怎麼看?
GC將在JVM認爲必要時執行,您無法做任何事情,即使您自己使用** system.gc調用它也不保證在調用它的那一刻完成...... –
'System.gc()'給JVM一個提示來做垃圾回收。不能保證會發生。通常在Java中,你不能強制分配內存被釋放。 – hotzst
「它會產生很多未使用的實例」 - 也許jvm會調用gc,因爲這個原因! – Arthas