Linux上的jvm和solaris机器的区别

我在linux&solaris机器上运行2个jboss5.1服务器,具有类似的jvm(xms&xmx)configuration。 但是当我检查服务器启动时的内存使用情况:

  • Linux机器 – 2.1GB内存使用率(RES)

  • Solaris机器 – 500MB的mem使用

linux上的jboss进程所使用的内存从一开始就高于1 GB(甚至在任何类加载开始之前)。 当我从Linux转储它的大小只有700 MB左右。

什么可能造成这样的记忆差异?

很多事情可能会有所不同,而且这里没有足够的信息来了解什么。 例如,他们是64位的操作系统和64位的JVM吗? 那么malloc的行为呢 – 这取决于操作系统。 仅仅因为一个进程要求N字节的内存并不意味着它会立即得到那么多的内存 – 内存分配器可以非常聪明。 那么就是OS是如何报告这个问题的呢?

“内存使用”意味着很多东西。 我们是在谈论Java堆(如果你在启动后拿起两个虚拟机的堆转储和一个相同的启动位工作,他们是相同的大小还是不同的?),或者加上类数据等等。 在图片中也有热点,将Java字节码编译成两个操作系统之间不同的本地代码(如果您的Solaris机器是Sparc机器,可能会有很大的差异)

最可能的是64位和32位,但是不可能说。 你可以使用一些原生的分析工具来查看哪些调用正在分配内存 – 这将开始澄清事情。

除非它引起问题,否则可能不需要担心 – 但健康的好奇心是一件好事。