四、JVM原理-4.1、JVM介绍

news/2024/9/22 7:16:50/

4.1、JVM介绍

4.1.1、如何理解Java虚拟机,它的结构是如何设计的?

答:
Java虚拟机(Java Virtual Machine,JVM)是Java语言编写的程序在运行时的执行环境。它是Java的核心组成部分,负责解释和执行Java字节码(即编译后的Java源代码)。

JVM的设计结构主要由以下几个部分组成:

  1. 类加载器(Class Loader):类加载器负责加载Java的类文件,并将其转换为可以被JVM执行的格式。类加载器根据类的名称和其他信息,从文件系统、网络或其他来源加载类,并将其存储在JVM的内存中。

  2. 运行时数据区(Runtime Data Area):运行时数据区是JVM在执行Java程序时使用的内存区域。它包括了方法区、堆、栈、程序计数器等内存区域。其中,方法区用于存储类的结构信息、常量池等,堆用于存储对象实例,栈用于存储方法的局部变量和操作数栈,程序计数器用于记录当前执行的字节码指令。

  3. 执行引擎(Execution Engine):执行引擎负责解释和执行Java字节码。它包括了解释器和即时编译器两种执行方式。解释器逐条解释执行字节码指令,而即时编译器将字节码转换为本地机器码,以提高执行效率。

  4. 垃圾回收器(Garbage Collector):垃圾回收器负责回收不再使用的内存空间。它会定期检查并回收没有被引用的对象,并释放其占用的内存。Java的垃圾回收器大大简化了开发人员对内存管理的工作。

  5. 本地方法接口(Native Interface):本地方法接口允许Java程序调用本地系统的特定功能或资源。通过本地方法接口,Java程序可以与底层操作系统和硬件进行交互。

扩展:
JVM的设计结构使得Java程序具有跨平台的特性,即一次编写、到处运行。由于JVM的存在,Java程序可以在任何支持JVM的平台上运行,而不需要对程序进行修改。同时,JVM提供了丰富的运行时环境和自动内存管理,大大简化了开发人员的工作。

4.1.2、什么是双亲委派机制?

答:
先了解一下Java的类加载机制:Java编译器将Java源文件编译成.class文件,再由JVM加载.class文件到内存中,JVM加载完成后得到一个Class字节码对象。拿到字节码对象后就可以进行实例化了。
类的加载过程需要使用加载器,JVM设计了3个加载器,分别是Bootstrap类加载器、Extension类加载器、Application类加载器,这些类加载器分别加载不同作用范围的jar包和class文件。

  • Bootstrap类加载器:负责Java核心类库的加载,也就是%{JDK_HOME}\lib下的jar包等;
  • Extension类加载器:负责加载%{JDK_HOME}\lib\ext目录下的jar包和class文件;
  • Application类加载器:负责当前应用中的classpath下的所有jar包和文件;

除了系统提供的这些类加载器,还可以通过ClassLoader类来实现自定义加载器。
接下来说双亲委派机制,当JVM需要加载一个类时,双亲委派机制会按照一定的顺序将类加载的请求传递给父类加载器。具体过程如下:

  1. 首先,Bootstrap ClassLoader加载平台的核心类库。这些类通常位于JDK的lib目录下。
  2. 如果父类加载器无法加载所需类,请求将传递给扩展类加载器。
  3. 如果扩展类加载器也无法加载类,请求将再次传递给应用程序类加载器。
  4. 只有在应用程序类加载器无法加载类的情况下,才会由当前类加载器尝试加载类。
  5. 如果所有的父类加载器都无法加载类,JVM将抛出ClassNotFoundException异常。

父委派模型
双亲委派机制的优势在于避免了重复加载类,确保类的唯一性和一致性。它有效地解决了类加载冲突的问题。


http://www.ppmy.cn/news/1528724.html

相关文章

驾驶员注意力分神状态检测系统源码分享

驾驶员注意力分神状态检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of …

#读书#经济#《宏观经济学》by N.Gregory Mankiw 第十版 - 第2篇 古典理论:长期中的经济 - 第7章 失业 - 复习题

备注:本文尝试回答本章的复习题,以便巩固本章知识点的学习,不是标准答案。 1.什么决定了自然失业率? 假定劳动力市场规模给定的情况下,自然失业率由入职率和离职率决定。 2.描述摩擦性失业与结构性失业之间的差别 摩…

Istio下载及安装

Istio 是一个开源的服务网格,用于连接、管理和保护微服务。以下是下载并安装 Istio 的步骤。 官网文档:https://istio.io/latest/zh/docs/setup/getting-started/ 下载 Istio 前往Istio 发布页面下载适用于您的操作系统的安装文件,或者自动…

JAVA:Nginx(轻量级的Web服务器、反向代理服务器)--(1)

一、Nginx:起因 nginx为什么为开发出来,起因是什么 总述:NGINX 的开发起因源于上世纪 90 年代末至 2000 年代初的互联网快速发展。当时,互联网流量急剧增长,特别是像 Apache 这样的传统 Web 服务器在高并发连接处理方面开始显现出瓶颈。 举例子:Apache 的 "每个连接…

游戏服务器知识

在多人在线游戏中,确保服务器对所有较为重要的游戏逻辑保持最高权限是至关重要的。这样可以防止作弊、保证游戏公平性以及维护一致的游戏体验。以下是实现这一目标的一些关键方法: 权威性服务器架构: 在这种模式下,服务器是唯一决…

Spring Mybatis 动态语句 总结

1.简介 Mybatis 提供动态语句的功能来增强多条件变动的查询语句。 2.代码 if和where搭配使用&#xff1a; <select id"query" resultType"a">select * from t_a<where><!-- where内没有条件满足&#xff0c;不转成where&#xff0c;有…

【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣965, 2331, 100, 1379

1. 力扣965&#xff1a;单值二叉树 1.1 题目&#xff1a; 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,n…

计算机毕业设计 健身房管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…