java - 为什么 Glassfish 在 Linux 中似乎比在 Windows 中需要更多内存?

标签 java windows linux jakarta-ee glassfish

我最近一直在修补 GlassFish 2.1.1,既有 Ubuntu Linux 机器,也有 Windows XP 机器。

查看 Windows 上代表 asadmin、JavaDB 服务器和 GlassFish 应用程序服务器域本身的“java”进程(使用任务管理器),它们加起来刚好超过 100 MB 的内存。

但是,查看 Linux 机器上的相同进程(使用“ps aux”和 Gnome 系统监视器)显示内存使用量大约为 800 MB。

这对我来说似乎非常奇怪。如果有的话,我会假设 Windows 上的内存使用不太有利。无论哪种方式,我都不会期望两者之间的 Swing 如此戏剧化。我在这里缺少一些基本的东西吗?我不一定需要详细的分析信息,我只需要两个平台上总内存使用量(真实世界)的大致准确数字。

最佳答案

因为您的衡量方式不同。

在支持虚拟内存和共享内存的系统上测量内存使用是出了名的困难; Linux 和 Windows 都属于这一类。

基本上它源于周围

  • 您是否计算刚刚分配但未映射的页面?
  • 您计算潜在的共享页面吗? (例如来自映射文件/可执行文件/库等的文件)

答案并非那么微不足道。

Linux 提供了两种“简单”的内存测量方法,即 RSS 和 VM 大小,这两种方法都不能准确代表人们在说“它使用了多少内存”时通常认为的意思。程序员认为他们的意思通常介于 RSS 和 VM 大小之间。

关于java - 为什么 Glassfish 在 Linux 中似乎比在 Windows 中需要更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822798/

相关文章:

c++ - 永无止境的 Win32 消息循环

linux - 有没有办法在整个项目代码中的某个日期之后找出更改的文件?

c++ - 在 Linux 中获取自纪元以来的秒数

java - 为 Java LocalDateTime 生成正确的 swagger 规范

java - 将 eclipse 指向 JRE 1.7 而不是 1.6

java - SEVERE : Servlet. servlet [package] 在路径 [/portal] 上下文中的 service() 抛出异常 java.lang.NullPointerException

windows - VC++中如何获取函数的真实地址

java - JVM 行为选项

java - 在 Windows 命令行参数中使用空格

linux - 在另一个脚本中使用脚本的结果