不同操作系统下的 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 - 为什么我不能创建大尺寸的数组?

java - 条件查询组合和谓词和或谓词在where方法中

performance - 使用时间戳 : How expensive is memory store and load? 实现 LRU

java - 如何在 java 中使用 facebook 登录验证用户

node.js - 在 Node/Grunt 中执行特定于操作系统的脚本

algorithm - 分布式系统中的锁定数据结构

java - Jvm heapdump 不是由信号生成的

Scala 泛型 - 为什么我不能在泛型类中创建参数化对象?

Java 线程执行后被多次中断

java - 怎么知道Field是数组? Java 中的 (java.lang.reflect.Field)