Memory 64位Linux上的JVM配置

Memory 64位Linux上的JVM配置,memory,configuration,jvm,64-bit,Memory,Configuration,Jvm,64 Bit,我有一个服务器应用程序,运行在64位Ubuntu服务器上,内存为4Gb。 当我设置JVM时,我们使用Sun JVM 1.6配置参数,如:-Xms1024m-Xmx2560m,当启动在Tomcat 6上运行的应用程序时,我看到一个奇怪的内存分配。 Ubuntu的top命令显示虚拟内存大小几乎为3,2Gb。我不知道Ubuntu是否分配了启动JVM时我要求的内存,或者Ubuntu在-Xmx值上添加了一个部件交换,因此我得到了这么大的内存。 如果我在32位Ubuntu服务器上运行并配置-Xmx1536m

我有一个服务器应用程序,运行在64位Ubuntu服务器上,内存为4Gb。 当我设置JVM时,我们使用Sun JVM 1.6配置参数,如:-Xms1024m-Xmx2560m,当启动在Tomcat 6上运行的应用程序时,我看到一个奇怪的内存分配。 Ubuntu的top命令显示虚拟内存大小几乎为3,2Gb。我不知道Ubuntu是否分配了启动JVM时我要求的内存,或者Ubuntu在-Xmx值上添加了一个部件交换,因此我得到了这么大的内存。 如果我在32位Ubuntu服务器上运行并配置-Xmx1536m,那么当运行top命令时,我会看到1721m。谁能解释一下这些三角洲是什么,它们是什么时候来的? 我有其他进程在这些实例上运行,我想了解我应该为它们应用什么内存配置,并考虑Ubuntu的top命令的结果

提前感谢,,
Alex

您是否试用过像Yourkit这样的探查器?

JVM将使用一定数量的额外内存用于内部管理目的-这可能会有帮助:

还要注意的是,永久的一代被固定在老一代的末尾。还有一个 50Mb的小型代码缓存,用于内部JVM内存管理。这意味着总的初始堆 size=-Xms+-XX:PermSize+~50Mb,最大总堆大小=-Xmx+-XX:+MaxPermSize +约50Mb。例如,如果–Xms/–Xmx设置为512m,并且–XX:PermSize/MaxPermSize设置为128m, 整个虚拟机的大小实际上大约为700MB