java - Spring Boot 在 Linux 中运行比 Windows 使用更多的内存

标签 java windows spring spring-boot linux-kernel

我试图弄清楚为什么同一个 Web 应用程序在 Ubuntu Linux 16 中使用的内存比在 Windows 10 中运行的内存要多。有什么理由吗?我一直认为 Linux 在服务器模式下运行任何应用程序都更快、更轻。顺便说一下,两个操作系统 (OS) 都是 64 位。

请参阅下面的屏幕截图和消耗的内存。

Windows 10 Windows 10 Ubuntu Linux Ubuntu Linux 正如您在任务管理器中看到的那样,Linux 使用更多的 morey 来运行相同的应用程序。我还尝试在 64 位 VM 中运行 Spring Boot,这比在简单的 32 位 VM 中运行需要更多内存。

Windows 使用 Spring Boot 管理 Java 应用程序是否更好?

最佳答案

正如评论中提到的,Windows 和 Linux 有不同的内存管理系统。它们的内存使用情况可能不同的原因有多种,例如,如果 Windows Java 使用由另一个应用程序加载的动态链接库 (DLL),则它可能不会在内存分配计算中包括共享库。此外,在 Windows 和 Linux 上实现 JVM 及其 API 所需的代码可能有所不同。

当程序运行时,Windows 和 Linux 可能会根据操作系统配置和内核编程方式将 JVM 的不同部分分页或交换到磁盘。

您最好的选择是通过 VisualVM 等 Java Profiler 运行代码,以尝试获取有关应用程序各个部分使用了多少内存的更多信息。 Windows 计算程序的实际内存使用情况可能非常棘手,请参阅 https://superuser.com/questions/895168/how-to-measure-total-ram-usage-of-a-program-under-windows

关于java - Spring Boot 在 Linux 中运行比 Windows 使用更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687921/

相关文章:

windows - WaitForSingleObject 是否放弃线程的时间片?

windows - 使用浏览器帮助对象修改 HTTP 请求和响应

c++ - 在 Windows 中检测全屏应用程序退出

java - 如何将拦截器Jar文件注入(inject)到spring中?

java - JTextField,删除结束字符

java - StringBuilder 将 null 追加为 "null"

java - alarmmanager 总是在重启后被清除吗?

java - 找出用于在 Java 中实例化模板的类型

java - 使用 Pojo 而不是 Rest Controller 时 Spring 服务注入(inject)为 Null

java - Spring Boot 中的 spring.jpa.open-in-view=true 属性是什么?