我们有一个Java应用程序有点庞大,需要太多内存,虽然我使用Xm
标志设置了初始和最大内存,但有时会冻结,我们在1之后得到OutOfMemoryError
-2分钟(如果我们很幸运的话)。
如果发生这种情况,我们需要重启应用程序。
我们通过一个只运行命令行的本机c应用程序运行该程序。
Xmx
标志怎么办? 答案 0 :(得分:7)
如果我没有设置Xmx标志怎么办?
然后JVM默认为应用程序的(通常是适度的)内存大小。
这是否意味着无限的内存使用?
没有
如何在C或Java中冻结应用程序?
修复内存泄漏 1 。
请注意,我回答的问题使用'release'而不是'realize'。仔细考虑之后,我觉得答案应该保持完全相同。 “释放(内存)”或“实现(存在问题)”不会实际上修复问题。最好的方法是修复实际问题(内存泄漏)。
暂且不说。我不认为问题出在C代码中,但是一个简单的测试(从命令行启动应用程序)应该显示出任何一种方式。 原因我认为问题是Java代码是(假设)全功能JVM检测到OutOfMemoryError
。
如果是C app。有使用的内存空间,JVM为自己或应用程序保留。我猜这个错误会有很大不同,可能是:JVM internal error..
其他贡献者提供了一系列好的建议,我将在此重新审视。
close()
全部存在,请在代码中搜索:
答案 1 :(得分:2)
使用C本机代码运行应用程序并不意味着您可以通过JVM参数控制整个内存使用情况。 尝试为您的系统运行内存监控(例如Linux上的TOP,使用shift + m进行内存使用排序)或者更好地为应用程序配置内存。
尝试在运行应用程序后获取内存转储(有一些分析工具,大多数IDE也提供了一些功能)来检查java对象。