[英]IBM java Heap memory issue in AIX server
我在AIX服务器IBM Java中遇到了一些堆内存问题。
首先说明问题,下面是C#代码调用的Java方法,Java代码返回数组列表。 即报告对象的运行方法给出了数组列表。 然后,C#代码会将数组列表写入文件。 这是现有的框架。
public List runReport( Integer ifeId, List params ) throws ReferenceCoreException
{
ReportInterface report=new ReportInterface();
// sanity check
// run the report
// MED: need a way of getting this session's data source
return report.run( HibernateSession.getDataSource(), ifeObj, params);
}
catch ( Exception e )
{
throw new ReferenceCoreException( e );
}
}
每当我们进行堆转储时,它就会显示内存已满。 即Xmx是8 GB,堆转储也说7.9 GB已满。
我的问题是:一旦返回数组列表,理想情况下应该由GC清除它。 如果不能,则可以添加finally块并使报表对象为null,如下所示?
public List runReport( Integer ifeId, List params ) throws ReferenceCoreException
{
ReportInterface report=new ReportInterface();
// sanity check
// run the report
// MED: need a way of getting this session's data source
return report.run( HibernateSession.getDataSource(), ifeObj, params
);
}
catch ( Exception e )
{
throw new ReferenceCoreException( e );
}
Finallay
{
report=null;
}
}
我认为,如果我们将报表对象设置为null,则应断开报表对象与run方法返回的数组列表之间的连接,并且GC可以回收数组列表堆内存。 这是正确的吗? 如果我的理解错了,请纠正我。
还建议一旦report.run方法将数组列表返回给C#,是否还有其他方法可以清除数组列表?
同样为什么AIX服务器IBM Java不会抛出内存不足错误,而Java进程却只是挂了呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.