jvm布局介绍

农民  金牌会员 | 2024-12-16 17:44:02 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 820|帖子 820|积分 2460


 固然可以,JVM(Java Virtual Machine,Java虚拟机)是Java语言的核心组件之一,它负责将Java字节码转换为特定平台上的呆板码
JVM布局
 
  1. 类加载子体系(Class Loader Subsystem)
 
      • 类加载器(Class Loader):负责将Java类的字节码加载到JVM中,并转换为运行时数据布局(如方法区中的类元数据信息)。
 
      • 双亲委派模子(Parent Delegation Model):类加载器加载类时采取的一种策略,从父类加载器开始加载,如果父类加载器找不到类,再由子类加载器加载。
 
  2. 方法区(Method Area)
 
      • 类元数据(Class Metadata):存储已加载类的信息,如类名、父类名、接口名、方法信息、常量池等。
 
      • 运行时常量池(Runtime Constant Pool):存储编译期生成的各种字面量和符号引用。
 
      • 静态变量(Static Variables):类的静态成员变量在方法区分配内存。
 
  3. 堆(Heap)
 
      • 年轻代(Young Generation):包括Eden区和两个Survivor区(通常称为S0和S1),用于存放新生成的对象。
 
      • 老年代(Old Generation):存放生命周期长的对象。
 
      • 永世代/元空间(PermGen/Metaspace,Java 8及以后为Metaspace):在Java 8之前,用于存放类的元数据信息;在Java 8及以后,元空间被移到了本地内存(Native Memory)。
 
  4. 栈(Stack)
 
      • 线程私有栈(Thread Private Stack):每个线程都有一个独立的栈,用于存放线程执行时的局部变量、操纵数栈、动态链接、方法出口等信息。
 
      • 栈帧(Stack Frame):方法调用时,会在栈中创建一个栈帧,用于存放该方法执行时的局部变量表、操纵数栈等信息。
 
  5. 程序计数器(Program Counter Register)
 
      • 当火线程执行的字节码的行号指示器:记录当火线程所执行的字节码的行号,用于控制循环、分支、异常处理等。
 
  6. 本地方法接口(Native Method Interface, NMI)
 
      • JNI(Java Native Interface):答应Java代码与用其他编程语言(如C、C++)编写的本地代码进行交互。
 
  7. 垃圾收集器(Garbage Collector, GC)
 
      • 标志-扫除(Mark-Sweep):一种垃圾收集算法,起首标志全部可达对象,然后扫除未标志的对象。
 
      • 复制(Copying):将内存分为两块,每次只使用其中一块,当这块内存用完时,就将还存活的对象复制到另一块内存中,然后扫除当前使用的内存。
 
      • 标志-整理(Mark-Compact):标志全部可达对象,然后移动它们到内存的一端,扫除另一端未标志的对象。
 
      • 分代收集(Generational Collection):根据对象的生命周期是非,将内存分为年轻代和老年代,对不同代的对象

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表