| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 学弟学妹们你连JVM虚拟机都搞不明白就不要想着去大厂实习了 -> 正文阅读 |
|
[Java知识库]学弟学妹们你连JVM虚拟机都搞不明白就不要想着去大厂实习了 |
Java 虚拟机是一个程序,其目的是执行其他程序。这是一个简单的想法,也是我们编码功夫最伟大的例子之一。JVM 打破了当时的现状,并在今天继续支持编程创新。 JVM 的用途JVM 有两个主要功能:允许 Java 程序在任何设备或操作系统上运行(称为“一次编写,随处运行”原则),以及管理和优化程序内存。1995 年 Java 发布时,所有计算机程序都写入特定的操作系统,程序内存由软件开发人员管理。所以JVM是一个启示。
为 JVM 制定技术定义很有用,而且软件开发人员也有日常思考方式。让我们分解一下:
当开发人员谈论 JVM 时,我们通常指的是在机器上运行的进程,尤其是服务器,它代表和控制 Java 应用程序的资源使用。将此与JVM 规范进行对比,后者描述了构建执行这些任务的程序的要求。 谁开发和维护 JVM?
JVM 中的内存管理与正在运行的 JVM 最常见的交互是检查堆和堆栈中的内存使用情况。最常见的调整是调整 JVM 的内存设置。 垃圾收集在 Java 之前,所有程序内存都由程序员管理。在 Java 中,程序内存由 JVM 管理。JVM 通过称为垃圾收集的过程来管理内存,该过程不断地识别和消除 Java 程序中未使用的内存。垃圾收集发生在正在运行的 JVM 中。 在早期,Java 因不像 C++ 那样“接近金属”而受到很多批评,因此速度也不快。垃圾收集过程尤其有争议。从那时起,各种算法和方法被提出并用于垃圾收集。通过持续的开发和优化,垃圾收集有了很大的改进。 “接近金属”是什么意思?
JVM 分为三部分可以说JVM包含三个方面:规范、实现和实例。让我们考虑其中的每一个。 1.JVM规范首先,JVM 是一种软件规范。JVM 规范以某种循环方式强调其实现细节并未在规范中定义,以便在实现时发挥最大的创造力:
JS Bach 曾经类似地描述过创作音乐:
因此,JVM 所要做的就是正确运行 Java 程序。听起来很简单,甚至从外面看起来很简单,但这是一项艰巨的任务,尤其是考虑到Java 语言的强大功能和灵活性。 JVM 作为虚拟机 JVM 是一种以可移植方式运行 Java 类文件的虚拟机。作为虚拟机意味着 JVM 是底层实际机器的抽象——例如运行您的程序的服务器。无论实际存在什么操作系统或硬件,JVM 都会为程序在其中运行创建一个可预测的环境。然而,与真正的虚拟机不同,JVM 不创建虚拟操作系统。将 JVM 描述为托管运行时环境或进程虚拟机会更准确。 2. JVM 实现实现 JVM 规范会产生一个实际的软件程序,它是一个 JVM 实现。事实上,有许多JVM 实现,既有开源的,也有专有的。OpenJDK 的HotSpot JVM是参考实现,并且仍然是世界上经过最彻底尝试和测试的代码库之一。HotSpot 也是最常用的 JVM。 几乎所有获得许可的 JVM 都是作为 OpenJDK 和 HotSpot JVM 的分支创建的,包括 Oracle 的许可 JDK。创建基于 OpenJDK 的许可分支的开发人员通常希望添加特定于操作系统的性能改进。通常,下载并安装 JVM作为Java 运行时环境(JRE)的捆绑部分。 3.一个JVM实例在 JVM 规范作为软件产品实施和发布后,可以将其作为程序下载并运行。下载的程序是 JVM 的一个实例(或实例化版本)。 大多数时候,当开发人员谈论“JVM”时,我们指的是在软件开发或生产环境中运行的 JVM 实例。可能会说,“嘿 Anand,该服务器上的 JVM 使用了多少内存?” 或者,“我不敢相信我创建了一个循环调用,堆栈溢出错误使我的 JVM 崩溃了。这是一个新手错误!” 什么是软件规范?
在JVM中加载和执行类文件我们已经讨论了 JVM 在运行 Java 应用程序中的作用,但它如何执行其功能呢?为了运行 Java 应用程序,JVM 依赖于 Java 类加载器和 Java 执行引擎。 JVM 中的 Java 类加载器Java 中的一切都是一个类,所有 Java 应用程序都是从类构建的。一个应用程序可以包含一个类或数千个。为了运行 Java 应用程序,JVM 必须将已编译的 .class 文件加载到可以访问它们的上下文(例如服务器)中。JVM 依赖其类加载器来执行此功能。 该Java类加载器是JVM的一部分加载类到内存中,使它们可用于执行。类加载器使用诸如延迟加载和缓存之类的技术来使类加载尽可能高效。也就是说,类加载并不是(比如说)便携式运行时内存管理那样的史诗般的脑筋急转弯,因此这些技术相对简单。 每个 Java 虚拟机都包含一个类加载器。JVM 规范描述了在运行时查询和操作类加载器的标准方法,但 JVM 实现负责实现这些功能。从开发人员的角度来看,底层的类加载器机制通常是一个黑匣子。 JVM 中的执行引擎一旦类加载器完成了加载类的工作,JVM 就会开始执行每个类中的代码。该执行引擎是JVM组件,用于处理此功能。执行引擎对于运行的 JVM 是必不可少的。事实上,就所有实际目的而言,它都是 JVM 实例。 执行代码涉及管理对系统资源的访问。JVM 执行引擎介于运行程序(需要文件、网络和内存资源)和提供这些资源的操作系统之间。 执行引擎如何管理系统资源 系统资源可以分为两大类:内存和其他一切。 回想一下,JVM 负责处理未使用的内存,而垃圾收集是执行该处理的机制。JVM 还负责分配和维护开发人员认为理所当然的引用结构。例如,JVM 的执行引擎负责获取newJava 中的关键字之类的东西,并将其转换为特定于操作系统的内存分配请求。 除了内存之外,执行引擎还管理用于文件系统访问和网络 I/O 的资源。由于 JVM 可跨操作系统互操作,因此这不是一项简单的任务。除了每个应用程序的资源需求外,执行引擎还必须响应每个操作系统环境。这就是 JVM 能够处理野外需求的方式。 JVM 演进:过去、现在、未来GitHub 星标 115k+的 Java开发教程,超级硬核! 1995 年,JVM 引入了两个革命性的概念,此后成为现代软件开发的标准:“一次编写,随处运行”和自动内存管理。软件互操作性在当时是一个大胆的概念,但今天很少有开发人员会三思而后行。同样,虽然我们的工程先驱必须自己管理程序内存,但我们这一代人是在垃圾收集中成长起来的。 我们可以说 James Gosling 和 Brendan Eich 发明了现代编程,但在接下来的几十年里,成千上万的其他人已经完善并建立了他们的想法。尽管 Java 虚拟机最初仅用于 Java,但今天它已发展为支持多种脚本和编程语言,包括 Scala、Groovy 和 Kotlin。展望未来,很难看到 JVM 不是开发领域的重要组成部分的未来。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/18 18:00:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |