我必须解析一个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