我应该对我的Java应用程序进行什么调整,使其停止崩溃



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

我们正在监控和触发手动GC以减轻痛苦,但我希望JVM自己和GC在适当的时候都能预料到这一点。

我应该考虑什么标志来触发GC,比如说80%——这种坦率的方法是正确的吗?

首先检查是否有:

  • a StackOverFlowError
  • 内存不足错误

StackOverFlowError与堆栈有关:

当应用程序递归过深而导致堆栈溢出时抛出。

OutOfMemoryError与堆有关:

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

如果您有StackOverFlowError,则可能是您遇到了与递归未完成有关的问题。因此,请检查您的退出条件,以确保您拥有正确的退出条件。另一种可能性是有两个(或多个)方法相互调用。

如果你有一个OutOfMemoryError,你可能在内存中存储了太多对象。例如,如果在映射中存储对象(例如,将映射用作内存缓存系统)而不删除对象,就会发生这种情况。

最新更新