假设我有32 GB的RAM,我通过指定-xmx2048m为我的java进程分配了2GB。但实际上我的进程通常只消耗1GB的堆。那么分配的剩余1GB内存会发生什么呢?剩余的RAM总量是30 GB还是31 GB?
这取决于版本,例如,Java8将为Xmssize(min)使用物理内存的1/64。因此,对于您来说,这是32GB/64&对于您的-xmxsize(最大值)来说,这还不到您物理内存的1/4。所以对你来说这是32GB的1/4
然而,这并不适用于所有人。
找出大小的最简单方法是运行下面的命令(命令仅适用于Linux)
java -XX:+PrintFlagsFinal -version | grep HeapSize
问题内容: 在采访中问。如果指定最大堆大小(Xmx)大于可用RAM,会发生什么情况?我还想知道,如果指定最小堆大小(Xms)大于可用RAM,会发生什么情况? 问题答案: 找出答案的最简单方法是尝试并查看。 编辑: 实际上至少有两个答案。如前所述,可能是在64位系统上,您的应用程序的内存使用量可能会越来越大,并且开始崩溃。在32位系统上,情况有所不同,因为os无法为您提供那么多的堆空间。例如,如果我
问题内容: 这是 不是 增加Java的堆的最大尺寸的虚拟机启动后。技术原因是什么?垃圾回收算法是否取决于要使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止Java应用程序从DOS的系统中移至其他应用程序? 问题答案: 最后我知道在Sun的JVM中,必须在连续的地址空间中分配整个堆。我想对于大堆值,很难在启动后将其添加到您的地址空间中,同时又要确保它保持连续。您可能需要在启动时获取它
问题内容: 当我运行具有NLP库的Java类时出现此错误。 任何想法,我怎么可以解决这个错误:) 问题答案: 您应注意,如果将初始堆大小设置为大于最大堆大小,则应用程序将产生此类错误 表示 初始堆大小 表示特定JVM 允许的最大堆大小 错,因为默认的最大堆大小可能小于128m 更好,因为初始大小等于或大于最大值 在此处阅读更多信息http://javahowto.blogspot.com/2006
我在WebSphere管理控制台中:Application servers>as-name>Process definition>Java Virtual Machine。 有一个字段“最大堆大小”。 指定最大堆的两个选项有什么区别?
我刚刚在VServer和JRE Build1.7.0_67-B01上安装了Ubuntu 64bit。如果我想运行一个java jar文件,它说 无效的最大堆大小:-XMX错误:无法创建Java虚拟机。错误:发生致命异常。程序将退出。 我试了1M,256M,1024M,2G和4G的-XMX,都不起作用。是不是有我不知道的隐藏设定? 下面是我使用的命令:
问题内容: 我有两台linux机器(都是VM),一台有12GB内存,另一台有8GB内存。 我试图在两台机器上启动相同的Java程序,并且最大可能的最大堆大小(使用-Xmx标志)。以下是我得到的结果。 12GB机器:9460MB 8GB机器:4790MB 如果我指定的最大堆大小超出了限制,我将得到以下错误。 我检查了两个系统中的可用内存(使用命令),然后得到关注。 12GB机器:大约3GB可用空间。