首页 > 解决方案 > 我应该对我的 Java 应用程序进行什么调整以使其停止崩溃?

问题描述

无论我分配多少内存 4、8 或 10 Gig,我的应用程序都会消耗大部分内存 - 96% - 每隔几天就会停止,因为它没有足够的内存留给 GC。

我们正在监视和触发手动 GC 以减轻痛苦,但我希望 JVM 能够预见到这一点,并在适当的时候进行 GC。

我应该考虑哪些标志来触发 80% 的 GC - 这种坦率的方法是否正确?

标签: javagarbage-collectionjvm

解决方案


首先检查您是否有:

StackOverFlowError 与堆栈有关:

当由于应用程序递归太深而发生堆栈溢出时引发。

OutOfMemoryError 与堆有关:

当 Java 虚拟机因为内存不足而无法分配对象时抛出,并且垃圾收集器无法提供更多内存。

如果你有一个 StackOverFlowError 可能你有一个与递归没有完成有关的问题。所以检查你的退出条件以确保你有正确的退出条件。另一种可能性是让两个(或更多)方法相互调用。

如果您有 OutOfMemoryError,您可能会在内存中存储很多对象。例如,如果您将对象存储在 Map 中(例如将映射用作内存缓存系统)而不删除它们,就会发生这种情况。


推荐阅读