我通常对jvm堆大小所做的就是将最大值设置得很高,以避免臭名昭著的OutOfMemoryException。
但是,这种策略(或缺乏策略)似乎并不明智。 :-)。
我的问题是如何选择最小值和最大值,以及两者之间的差异(max-min应该小还是大?)。
例如,从here:
谢谢。
最佳答案
简短答案:不要猜测您的应用程序。
jconsole can give you useful high-level data,例如对主要居民组的感觉与我们通常分配并进行垃圾收集的 transient 数据的比较。如果查看该显示器的“内存”选项卡,通常会看到像锯齿一样的东西。锯齿的下角大约是我通常将堆最小设置的位置,而我将使用锯齿的峰值或斜率来尝试最大的堆。如果您的 dentry 非常陡峭,您可能会考虑使用一个大堆只是为了延迟垃圾收集。但是,如果不是这样,则可以尝试使用较小的最大堆,以查看这是否可能为计算机上的其他进程留下更多资源(例如)。
您还应该考虑server VM,因为这将导致不同的垃圾回收行为。
综上所述,您还应该使用更详细的工具,例如jvisualvm to profile the memory usage of your process。您可能会调整或消除内存泄漏或贪婪的分配器。那将完全改变您的堆需求。