我应该对Java应用程序进行哪些调整,以使其停止崩溃?

时间:2019-01-21 07:43:46

标签: java garbage-collection jvm

无论我分配4、8或10 Gig多少内存,我的应用程序都会消耗大部分内存(96%),并且由于没有足够的内存而每隔几天就会停顿GC。

我们正在监视并触发手动GC以减轻痛苦,但是我希望JVM在适当的时候能够预见到它本身和GC。

我应该考虑在80%时触发GC的哪些标志-这种坦率的做法是正确的吗?

1 个答案:

答案 0 :(得分:1)

首先检查您是否拥有:

StackOverFlowError与堆栈有关:

  

由于应用程序的递归太深而导致堆栈溢出时抛出。

OutOfMemoryError与堆有关:

  

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

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

如果发生OutOfMemoryError,则可能在内存中存储了很多对象。例如,如果您在不删除对象的情况下将对象存储在Map中(例如,使用Map作为内存缓存系统),就会发生这种情况。