Glassfish上的内存管理

时间:2012-06-12 07:34:41

标签: memory-management glassfish

我在@TimerService实例实现的Glassfish服务器上运行了几个后台任务。这些服务的目标是从文件中提取数据并将该数据插入数据库。

我最初尝试在JPA中执行此操作,但系统很容易陷入困境,我现在已将流程转换为JDBC,响应速度更快。然而,在某些地方仍然存在巨大的内存泄漏,我无法指出。

每个文件都是在管理自己的事务的方法中提取的(1个文件= 1个事务)。我认为,一旦这个方法最终确定所有变量松散范围并且是GC,但事实并非如此。很短的时间后,我遇到了OutOfMemoryException

我想知道Glassfish是否,如何以及为什么要保留对我的变量(非常重的对象)的引用。我可以应用哪些设置或方法来最小化这些内存泄漏?

作为参考,我使用股票Glassfish设置进行了一些修改:

-XX:+CMSPermGenSweepingEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:MaxPermSize=256m
–XmX1024m

1 个答案:

答案 0 :(得分:2)

您可能正在处理类加载器泄漏。当您解组时,JAXB可以执行此操作。要确定您应该使用内存分析器。我强烈建议您使用Eclipse Memory Analyzer Tool。只需按照一些教程进行操作,您就应该能够理解它。