Java中复杂对象的可用内存

yak*_*uka 10 java memory-leaks memory-management jaxb

我尽力解释我的问题.也许它有点抽象.

我读了一些关于不在Java代码中明确调用GC,终结方法,指向null等的文献.

我有一些大型XML文件(客户发票).使用Jaxb,文件在复杂的Java对象中进行编组.它的属性是基本类型(Integer,BigDecimal,String等),但也包括其他复杂类的类,其他类的列表,列表作为属性的类列表等.

当我用对象做我的东西时,我需要将它从内存中删除.有些XML非常大,我可以避免内存泄漏或OutOfMemoryError情况.

所以,我的问题是:

  • 将大对象分配给null是否足够?我读过,如果有软引用,GC将不会释放该对象.
  • 我应该深入清除对象,清除所有列表,为属性分配null等等吗?
  • 那么JaxB(我使用Java6,内置JaxB)和软引用呢?JaxB比旧的JibX marshaller更快,但我不知道它在内存使用方面是否更糟.
  • 我应该用WeakReference或类似的东西包装megacomplex JaxB类吗?

请原谅我混合Java内存使用概念,JaxB等.我正在研究大型运行进程的稳定性,而.hprof文件证明所有发票的所有客户数据都保留在内存中.如果这是一个简单,基本或罕见的问题,请原谅.

提前致谢

har*_*ldK 9

除非其他东西指向大对象(图形)的某些部分,否则分配大对象引用null就足够了.

最安全的是,在应用程序运行一段时间后使用分析器,查看对象引用,看看是否存在未正确GC的东西.