动态增加Java堆空间
-
25-09-2019 - |
题
我已经写,测试与处理器的各种数目的不同的机器几个多线程算法的速度的java程序。
在某些机器上,归并排序*,因为它需要一个相当大的堆空间来工作在非常大的阵列失败。我可以很容易地改变Java堆空间运行自己的程序之前,但我觉得自己像一个更强大和简单的方法是从程序本身做这个任务。
<强>有一种方法,以请求/ Java程序的过程中,实现从虚拟机更多的堆空间? 强>
请注意:我不明白,我可以像“java的-Xmx1g计划”的脚本执行程序;我对这个问题的好奇心是部分学者。
*我实现不在线合并。它需要O(n)的额外存储器。
解决方案
Java是没有设计为能够动态地管理存储器,在这种情况下“Java堆空间”,所有的对面,它被设计以便从具有到有关的担心减轻程序员。
总之,我不敢说有没有像Java中的"malloc()"
or "setHeapSize(int byes)"
。
在Java中,你是制约内存的大写金额提供给 JVM 当你程序启动。在内存管理而言,这既是一种祝福和诅咒。
有关那种动态内存分配,你应该尝试使用使用像C
和/或C++
语言,而不是实现你的算法。
其他提示
据我所知,目前还没有在运行时控制所述堆的大小的方式。
它可能不是必要的,但:可以提供与一个-Xms的最小和最大堆尺寸和-Xmx分别切换即可。 (例如-Xms128m -Xmx512m)JVM将这些范围内管理的实际堆大小。
的最大值是不使用的内存的大小,这是根据使用动态。
在最大堆尺寸应在哪些你宁愿程序失败的点,比使用更多的存储器。没有什么意义动态地改变这一点,甚至academicly。
不隶属于 StackOverflow