不同操作系统下的 Java 程序效率

标签 java operating-system jvm

我最近遇到了一个与 Java 相关的问题(解释一下):

  1. Java 应用程序可能在操作系统 A 上以合理的速度运行,但在操作系统 B 上运行缓慢,这是什么原因?

  2. 程序员可以采取什么措施来纠正这个问题?

我的回答是(我知道我错了,但我会解释我的思考过程)

(1) 应用程序在任何具有 JVM 的操作系统上应该以大致相同的速度运行,因为应用程序是在虚拟机内运行的。只要虚拟机设计正确,就没有什么关系。

(2)呃..

我的问题是:这个问题的正确答案是什么?

最佳答案

一切都与实现有关。

问题在于,JVM本身就是一个在主机操作系统上本地运行的程序,负责实现符合语言和库规范的Java库。此实现需要管理系统资源(例如文件、线程、套接字等),并且每个操作系统可能都有自己的有关这些资源管理的“最佳实践”,这可能不一定与各种 Java 规范的设计一致。此外,操作系统本身实现了这些系统资源的接口(interface),其实现可能不如其他操作系统那么健壮。

例如,几年前,Linux 线程实现的性能远低于类似 UNIX 操作系统(例如 Solaris、AIX 等)上相同 POSIX 线程 API 的性能。因此,运行在 Linux 机器上的 JVM 与 Solaris 机器上运行的 JVM 具有相同的功能,但 Linux JVM 会受到该操作系统上(当时)不太优秀的线程实现的阻碍。

关于不同操作系统下的 Java 程序效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019859/

相关文章:

java - Intellij Ant - javac 不编译文件,没有错误或消息

linux - 在关闭 NX 位的情况下在 Linux 中分配数据页

windows - 在 Windows 8 中使用 mysqldump 自动备份 MySQL @localhost

Java - 线程中出现异常 "main"java.util.ConcurrentModificationException

java - 创建具有多个单词的扫描仪

Java多线程代码错误

Python 多文件内容

java - 我可以从同一个 JVM 渲染到多个显示器吗?

Java Object.wait(long, long) 实现与文档不同

java - 如何将外部源代码传递给java中的线程?