动态增加java堆空间

Rob*_*obz 9 java heap mergesort scalability

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

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

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

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

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

jvd*_*ste 6

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

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


Jos*_*iaz 4

Java 的设计并不是为了能够动态管理内存,在本例中是“java 堆空间”,相反,它的设计目的是为了让程序员不必担心这一点。

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

在 Java 上,程序启动时JVM可用的内存量受到限制。就内存管理而言,这既是福也是祸。

对于这种动态内存分配,您应该尝试使用像Cand/orC++这样的语言来实现您的算法。