java - 我应该对我的 Java 应用程序进行什么调整以使其停止崩溃?
问题描述
无论我分配多少内存 4、8 或 10 Gig,我的应用程序都会消耗大部分内存 - 96% - 每隔几天就会停止,因为它没有足够的内存留给 GC。
我们正在监视和触发手动 GC 以减轻痛苦,但我希望 JVM 能够预见到这一点,并在适当的时候进行 GC。
我应该考虑哪些标志来触发 80% 的 GC - 这种坦率的方法是否正确?
解决方案
首先检查您是否有:
StackOverFlowError 与堆栈有关:
当由于应用程序递归太深而发生堆栈溢出时引发。
OutOfMemoryError 与堆有关:
当 Java 虚拟机因为内存不足而无法分配对象时抛出,并且垃圾收集器无法提供更多内存。
如果你有一个 StackOverFlowError 可能你有一个与递归没有完成有关的问题。所以检查你的退出条件以确保你有正确的退出条件。另一种可能性是让两个(或更多)方法相互调用。
如果您有 OutOfMemoryError,您可能会在内存中存储很多对象。例如,如果您将对象存储在 Map 中(例如将映射用作内存缓存系统)而不删除它们,就会发生这种情况。
推荐阅读
- c# - 有没有办法在一个操作中设置多个变量c#
- c - 本地性与更改 argc 和 argv 的名称有什么关系?
- reactjs - 为什么'onSnapshot' google firebase 如此之快,立即被解雇?
- python - 未定义播放器
- r - 如何根据 r 修改 Weibull 回归中的基线风险?
- c - 循环直到 2147483647 才运行
- vba - 中断 For 循环以在每个循环循环中输入用户输入
- javascript - 未捕获(承诺中):TypeError:无法读取未定义的属性“userSubject”类型错误:无法读取未定义的属性“userSubject”
- database - 在 mongodb 中查找特定内容
- html - 如何使用 VBA 从嵌套的 Div 中抓取