我知道我们可以通过最大化这些JVM变量-Xms,-Xmx来增加堆大小。
但我有疑问:
答案 0 :(得分:0)
在尝试使用java设置堆大小时,需要注意几点,快速搜索后我发现以下网站对JVM如何处理堆有一些要点: http://javarevisited.blogspot.co.uk/2011/05/java-heap-space-memory-size-jvm.html
*显然Oracle java站点应该是您的第一个调用点。
1)我不认为你可以在运行时动态调整堆空间。所以把它设定为开始是必须的。
2)取决于您是否运行32/64位操作系统,以及PC上有多少RAM
3)请参阅上面的链接和Oracle自己的文档,它太大了,无法描述:)
4)真正取决于您的编程和PC上的资源。良好的编程实践应该可以阻止任何重大问题,但是如果你找到太多完整的GC,你可能希望看看你是否有“内存泄漏”问题。在堆的Perm部分的某处
答案 1 :(得分:0)
关于你的第一个问题:使用java.nio.ByteBuffer.allocateDirect()
你可以在堆之外分配内存,即在运行时扩展内存占用量。
来自Javadocs:
直接缓冲区的内容可能位于正常的垃圾收集堆之外,因此它们对应用程序内存占用的影响可能并不明显。因此,建议直接缓冲区主要分配给受基础系统本机I / O操作影响的大型长期缓冲区。通常,最好只在它们在程序性能上产生可测量的增益时才分配直接缓冲区。
答案 2 :(得分:0)
处理堆空间的其他方法是什么?
大约有500个用于控制堆的选项,其中最常见的是Hotspot VM Options
堆内存是否依赖于系统辅助内存?
当涉及堆大小时,只有主要内存需要担心。 64位JVM的默认堆大小是主内存的1/4。