jvm结构介绍

ops/2024/12/15 22:11:12/

ba563c96b29245aeb05f37606d3e2108.jpgJava虚拟机(JVM)是Java平台的核心组件,它负责将Java字节码转换为机器码

 

 

1. 类加载子系统(Class Loading Subsystem):

 

    • 负责将Java类加载到JVM中。这包括从文件系统、网络或其他来源读取.class文件,并将其转换为JVM可以识别的数据结构(如方法区中的类元数据)。

 

2. 方法区(Method Area):

 

    • 也称为永久代(PermGen space,在Java 8之前)或元空间(Metaspace,在Java 8及之后)。它存储每个类的结构信息,如运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容,以及类的层次结构信息。

 

3. 运行时常量池(Runtime Constant Pool):

 

    • 是方法区的一部分,用于存储编译期生成的各种字面量和符号引用。这些字面量包括字符串字面量、数值字面量、布尔字面量和null字面量等。

 

4. 堆(Heap):

 

    • JVM的内存管理区域之一,用于存放对象实例和数组。堆是垃圾回收器管理的主要区域,分为年轻代(Young Generation)和老年代(Old Generation/Tenured Generation),有时还包括永久代(在Java 8之前)或元空间(在Java 8及之后,用于存储类的元数据)。

 

5. 年轻代(Young Generation):

 

    • 包括一个或多个Eden区(Eden Space)和两个Survivor区(Survivor Space,通常称为S0和S1或From和To)。新创建的对象首先被分配到Eden区,当Eden区满时,会触发一次年轻代垃圾回收(Minor GC)。

 

6. 老年代(Old Generation/Tenured Generation):

 

    • 用于存放经过多次年轻代垃圾回收后仍然存活的对象。随着对象在年轻代中存活时间的增加,它们会被逐渐晋升到老年代。

 

7. 栈(Stack):

 

    • JVM为每个线程分配一个私有的栈,用于存储线程执行时的局部变量表、操作数栈、动态链接、方法出口等信息。栈是线程私有的,不存在垃圾回收问题。

 

8. 本地方法栈(Native Method Stack):

 

    • 与Java栈类似,但用于支持native方法的执行。它是为JVM使用到的Native方法服务。

 

9. 程序计数器(Program Counter Register):

 

    • 也称为PC寄存器,它是线程私有的,用于存储当前线程正在执行的Java字节码的行号指示器。字节码解释器通过改变PC寄存器的值来选取下一条需要执行的字节码指令。

 

10. 执行引擎(Execution Engine):

 

    • JVM的执行引擎负责执行字节码指令。它可能是一个即时编译器(JIT Compiler),用于将字节码转换为机器码以提高执行效率;也可能是一个解释器,用于逐条解释执行字节码指令。

 

11. 垃圾回收器(Garbage Collector, GC):

 

    • 负责自动回收JVM中不再使用的对象所占用的内存空间。垃圾回收器有多种实现算法和策略,如标记-清除(Mark-Sweep)、标记-整理(Mark-Compact)、复制(Copying)和分代收集(Generational Collection)等。

 

12. 本地接口(Java Native Interface, JNI):

 

    • 允许Java代码与用其他编程语言(如C、C++)编写的应用程序或库进行交互。JNI是Java与其他语言通信的桥梁。

 

13. 安全管理器(Security Manager):

 

    • 提供安全管理机制,用于执行权限控制、安全策略检查等操作。安全管理器是可选的,但它在某些安全敏感的应用中非常重


http://www.ppmy.cn/ops/142217.html

相关文章

六、nginx负载均衡

负载均衡:将四层或者七层的请求分配到多台后端的服务器上。 从而分担整个业务的负载。提高系统的稳定性,也可以提高高可用(备灾,其中一台后端服务器如果发生故障不影响整体业务). 负载均衡的算法 round robin 轮询 r…

IDEA关闭注释折叠

参考:IDEA关闭注释折叠(注释doc的rendered view模式)_idea toggle rendered view-CSDN博客

ansible自动化运维(四)jinjia2模板

Jinjia2模板 前面说到playbook组成的时候,有介绍到template模块,而template模块对模板文件进行渲染时,使用的就是jinja2模板引擎,jinja2本身就是基于python的模板引擎,所以下面先来了解一下jinjia2模板的一些用法 基…

.NET中的JSON序列化库:Newtonsoft.Json与System.Text.Json对比与示例

在.NET生态系统中,存在多个用于JSON序列化的库,其中最为常用和知名的包括Newtonsoft.Json(也称为Json.NET)和System.Text.Json。以下是这两个库的区别: Newtonsoft.Json(Json.NET) 功能与灵活…

Python的3D可视化库【vedo】2-3 (plotter模块) 增删物体、控制相机

文章目录 4 Plotter类的方法4.3 渲染器内的物体操作4.3.1 添加物体4.3.2 移除物体4.3.3 渲染器的内容列表 4.4 相机控制4.4.1 访问相机对象4.4.2 重置相机状态4.4.3 移动相机位置4.4.4 改变相机焦点4.4.5 改变相机朝向的平面4.4.5 旋转相机4.4.6 对齐相机的上朝向4.4.7 缩放 pl…

在springBoot项目如何对本地配置文件和云服务配置文件独立配置

springBoot中配置文件本地和云服务配置文件独立配置 1.首先我们创建好一个springBoot项目后,需要再创建两个application.yml配置文件,如图 2.然后在各自的配置文件中配置各自环境的信息,注意的是在创建各自环境的yml文件时,必须…

WPF Combox使用 Text无法选择正确获取CHange后的Text

使用固定ComboxItem 无法通过 selectitem as object 来进行回去到 Content内的对香数据。那我只能这个样干&#xff1a; private void CBPaiweiLeixingSelect_Change(object sender, SelectionChangedEventArgs e){ ComboBox ThisBox sender as ComboBox;List<EDaxiaosuixi…

1125 子串与子列 (暴力搜索,PAT甲级中文版,C++实现)

子串是一个字符串中连续的一部分&#xff0c;而子列是字符串中保持字符顺序的一个子集&#xff0c;可以连续也可以不连续。例如给定字符串 atpaaabpabtt&#xff0c;pabt是一个子串&#xff0c;而 pat 就是一个子列。 现给定一个字符串 S 和一个子列 P&#xff0c;本题就请你找…