Bob*_*oss 19
我的问题是如何选择最小值和最大值,以及两者之间的差异(最大值应该小还是大?)
简短的回答:不要猜测,描述您的应用程序.
jconsole可以为您提供有用的高级数据,例如主要驻留集的感觉与我们通常分配的垃圾数据和垃圾收集.如果你看一下显示器的内存选项卡,你会看到的通常就像锯齿一样.锯齿的下角是我通常设置堆最小值的地方,而我会使用锯齿的峰值或斜率来试验堆最大值.如果你的牙齿非常陡峭,你可能会考虑一大堆来延迟垃圾收集.但是,如果不是,则可以尝试使用较小的堆最大值来查看是否可能为计算机上的其他进程留下更多资源(例如).
您还应该将服务器VM视为会导致不同的垃圾回收行为.
总而言之,您还应该使用更详细的工具(如jvisualvm)来分析流程的内存使用情况.您可能有内存泄漏或贪婪的分配器,您可以调整或消除.这将完全改变你的堆需求.
您应该启用GC日志记录并检查OOM的开销位置.
-verbose:gc
-Xloggc:gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
Run Code Online (Sandbox Code Playgroud)
您可能正在经历烫发空间限制,通过调整 -XX:MaxPermSize=YYYm
无论如何回答你的问题,我从没有最低限度开始,并设置相对较高的最大值.然后我绘制gc日志图并找出我的替代状态; 在视觉上为不同代人选择高于平均水平的尺寸.像金融图表一样阅读它,你会希望看到新一代的良好传播以及终身一代的持续增长和收集.如上所述,还要绘制你的烫发空间,以确保你不会不断增加.
GC调整是一门艺术,绝不是一门科学.
| 归档时间: |
|
| 查看次数: |
28037 次 |
| 最近记录: |