JVM(Java捏造机)的核心构成

[复制链接]
发表于 2025-10-12 08:01:43 | 显示全部楼层 |阅读模式
1. 类加载器(Class Loader)


  •         功能:负责将.class文件加载到内存,并转换为JVM可辨认的数据结构。
  •         分类

    •                 启动类加载器(Bootstrap Class Loader):加载JAVA_HOME/lib下的核心类库(如rt.jar)。
    •                 扩展类加载器(Extension Class Loader):加载JAVA_HOME/lib/ext下的扩展类。
    •                 应用步调类加载器(Application Class Loader):加载用户类路径(ClassPath)的类。
    •                 自界说类加载器:用户可继承ClassLoader实现自界说加载逻辑。
           
  •         双亲委派模子:优先由父类加载器实行加载类,克制重复加载并确保安全

2. 运行时数据区(Runtime Data Areas)

JVM内存管理的核心地域,分为线程私有和共享地域:
2.1 线程私有地域


  •         步调计数器(Program Counter Register)

    •                 记载当火线程实行的字节码指令地点。
    •                 唯一不会发生内存溢出的地域。
           
  •         捏造机栈(Java Virtual Machine Stack)

    •                 存储方法调用的栈帧(Frame),每个栈帧包罗:

      •                         局部变量表:方法参数和局部变量。
      •                         操纵数栈:实行字节码指令的工作区。
      •                         动态链接:指向运行时常量池的方法引用。
      •                         返回地点:方法实行后的返回位置。
                     
    •                 大概抛出StackOverflowError(栈深度过大)和OutOfMemoryError(扩展失败)。
           
  •         本地方法栈(Native Method Stack)

    •                 为Native方法(如C/C++实现)服务,结构与捏造机栈类似。
           
2.2 线程共享地域


  •         堆(Heap)

    •                 存储全部对象实例和数组。
    •                 分为新生代(Young Gen)和老年代(Old Gen):

      •                         新生代:Eden区、Survivor区(From/To),使用复制算法采取。
      •                         老年代:存放长期存活对象,使用标志-整理或标志-扫除算法。
                     
    •                 大概抛出OutOfMemoryError。
           
  •         方法区(Method Area)

    •                 存储类元数据(如类名、字段、方法)、常量池、静态变量等。
    •                 实现变革

      •                         JDK 8前:永世代(PermGen),受JVM内存限定。
      •                         JDK 8+:元空间(Metaspace),使用本地内存(Native Memory)。
                     
           
  •         运行时常量池(Runtime Constant Pool)

    •                 方法区的一部门,存储类文件中的常量(如字符串字面量、符号引用)。
           

3. 实行引擎(Execution Engine)

负责将字节码翻译为呆板码并实行:

  •         表明器(Interpreter)

    •                 逐行表明实行字节码,启动速率快但实行服从低。
           
  •         即时编译器(JIT Compiler)

    •                 将热门代码(频仍实行的代码)编译为本地呆板码,提拔实行服从。
    •                 主流JVM(如HotSpot)采取分层编译(C1、C2编译器)。
           
  •         垃圾采取器(Garbage Collector)

    •                 主动采取堆中不再使用的对象内存,常见算法:

      •                         标志-扫除(Mark-Sweep):简单但产生内存碎片。
      •                         复制(Copying):用于新生代,无碎片但内存使用率低。
      •                         标志-整理(Mark-Compact):用于老年代,克制碎片。
                     
           

4. 本地方法接口(JNI, Java Native Interface)


  •         功能:答应Java代码调用本地方法(Native Method,如C/C++库)。
  •         示例:System.currentTimeMillis()底层通过JNI调用操纵体系API

5. 本地方法库(Native Libraries)


  •         构成:包罗JVM所需的本地库(如libjvm.so、libjava.so)。
  •         作用:支持JVM与操纵体系交互(如线程调治、文件操纵)。

JVM内存结构表示图


总结


  •         核心组件:类加载器、运行时数据区、实行引擎、本地接口及库。
  •         内存管理:堆和方法区是内存管理的重点,垃圾采取机制保障内存高效使用。
  •         性能优化:通过JIT编译、分代采取、元空间更换永世代等本领提拔服从。
  •         线程安全:私有地域隔离线程状态,共享地域需同步机制(如锁、CAS)。
明白JVM构成及工作原理,是优化Java步调性能、办理内存走漏和并发题目的关键根本。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表