让 JVM 根据需要增加内存需求,直至达到虚拟机限制的大小?
我们发布了一个Java应用程序,其内存需求可能会有很大差异,具体取决于它正在处理的数据的大小。如果未设置最大 VM(虚拟内存)大小,则 JVM 通常会因大数据上的 GC 故障而退出。
我们希望看到的是,JVM请求更多的内存,因为GC无法提供足够的内存,直到总的可用VM耗尽。例如,从128Mb开始,每当GC失败时,就会以几何方式(或其他一些步骤)增加。
JVM(“Java”)命令行允许显式设置最大VM大小(各种-Xm*命令),并且您认为这已经足够了。我们尝试在应用程序附带的 .cmd 文件中执行此操作。但是,如果您选择任何特定的数字,则会出现以下两种不良行为之一:1)如果您的数字足够小,可以在大多数目标系统上工作(例如,1Gb),则对于大数据来说还不够大,或者2)如果您将其设置为非常大,JVM将拒绝在实际VM小于指定值的系统上运行。
如何设置Java以在需要时使用可用的VM,而无需事先知道该数字,也无需在启动时将其全部抓取?