java - JVM 执行 Java 应用程序时,OS 的作用是什么?为什么我们需要操作系统?

标签 java operating-system jvm cpu

我在互联网上做了一些阅读,有人说 Java 应用程序是由 Java 虚拟机 (JVM) 执行的。 “执行”这个词让我有点困惑。据我所知,操作系统可以执行非 Java 应用程序(即:用 C、C++...编写的)。在底层,就是操作系统将二进制程序加载到内存中,然后指挥CPU去执行内存中的指令。

那么现在有了 JVM,会发生什么?据我所知,JVM(包含运行时环境)将首先被操作系统调用。从那时起,JVM 将为应用程序生成一个(或多个)线程。我想知道操作系统的角色是否会再发挥作用?在我看来,JVM 已经“绕过了”操作系统,直接指示 CPU 执行应用程序。如果是这样,我们为什么需要操作系统?

更进一步,JVM 将使用其 JIT 将应用程序的字节码编译成机器码,然后执行这些机器码。既然已经是机器码了,还需要JVM吗?因为操作系统可以指示 CPU 执行这些机器代码,而不是 JVM。我在这里犯了什么错误吗?

我想从这里的人那里学到更多。如果我错了,请纠正我。非常感谢!

最佳答案

我们需要操作系统来完成 C 或 C++ 程序所能做的所有事情。默认情况下,JVM 会做一些更多的事情,但它不会取代操作系统所做的任何事情。唯一的区别可能是有时你有 Your Code [调用] JVM [调用] OS,或者使用编译代码你可以有您的代码 [调用] OS

与 C++ 类似,您可能有 Your Code [调用] Boost [调用] OS

当您的程序以 native 代码运行时,它不需要 JVM 本身。这很好,因为 JVM 知道何时“后退”并让应用程序运行。但是,并非所有程序都会在应用程序的剩余生命周期内编译为 native 代码,因此您仍然需要它。

可以通过 JNI 使用内核旁路设备/驱动程序,但 Java 不直接支持此类功能。

关于java - JVM 执行 Java 应用程序时,OS 的作用是什么?为什么我们需要操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791955/

相关文章:

java - 仅将 JButton 添加到 JTable 中的某些行和列

java - 如何通过负载测试优化 JVM & GC

iPhone OS 3.1.3 不适用于 Xcode 3.2.1。我必须安装 SDK 3.2 BETA 吗?

javascript - 双文件扩展名

java - 操作系统如何决定如何运行 .exe

java - 为一元非表达式生成 JVM 字节码

android - Kotlin 的启动是在主线程还是后台线程中启动协程?

java - 使 PrimeFaces 数据表默认可编辑

java - Spring Data 中的动态查询

java.lang.ClassCastException : libcore.net.http.HttpURLConnectionImpl 无法转换为 javax.net.ssl.HttpsURLConnection