动态增加java堆空间

我编写了一个java程序,用于测试具有不同处理器数量的不同机器上的几个multithreading算法的速度。

在某些机器上,merge sort *失败,因为它需要一个相当大的堆空间来处理非常大的数组。 在运行程序之前,我可以自己轻松地更改java堆空间,但我觉得更强大,更简单的方法是从程序本身执行此任务。

有没有办法在java程序的过程中从虚拟机请求/实现更多的堆空间

注意:我确实理解我可以用“java -Xmx1g Program”这样的脚本执行程序; 我对这个问题的好奇心部分是学术性的。

*我的实现不会在线合并。 它需要O(n)额外的内存。

Java没有设计能够动态管理内存,在这种情况下“java堆空间”,相反,它的设计是为了减轻程序员不必担心的问题。

简而言之,我不敢说在Java中没有像"malloc()""setHeapSize(int byes)"的东西。

在Java上,当你的程序启动时,你会受限于JVM可用的内存。 在内存管理方面,这既是一种祝福,也是一种诅咒。

对于这种动态内存分配,您应该尝试使用C和/或C++等语言来实现您的算法。

据我所知,没有办法在运行时控制堆大小。

但是可能没有必要:您可以分别使用-Xms和-Xmx开关提供最小和最大堆大小 。 (例如-Xms128m -Xmx512m)jvm将管理这些边界内的实际堆大小。

最大值不是使用的内存大小,这是基于使用情况的动态。

最大堆大小应该是您希望程序失败的点,而不是使用更多内存。 动态地改变它是没有意义的,甚至在学术上也是如此。