JVM学习笔记(一)

JVM整体架构

JVM - Java Virtual Machine 是Java程序运行在物理机上的载体,不同系统具有不同的虚拟机实现。JVM是不跨平台的,但是它是Java程序跨平台的基础。JVM具有三个主要部分:

  • 类加载子系统 Class Loader
  • 运行时数据区 Runtime Data Area
  • 执行引擎 Execution Engine

类加载机制

  • 类加载:类加载器将class文件加载到虚拟机的内存(加载->链接->校验->准备->解析->初始化)。Java的Class文件是动态加载的,按需加载。
  • 类加载器:
    • 引导类加载器:BootstrapClassLoader,负责加载<JAVA_HOME>/lib目录中的类
    • 扩展类加载器:ExtensionClassLoader,负责加载<JAVA_HOME>/lib/ext目录中的类
    • 系统类加载器:ApplicationClassLoader,负责加载classpath目录中的类
    • 自定义加载器:CustomClassLoader
  • 类加载机制:
    • 全盘负责加载机制
    • 双亲委派加载机制:优先由父类加载器加载。具有沙箱安全机制以及避免类重复加载的优势。

运行时数据区

运行时数据区就是Java程序的内存区域。它包含五个部分:

  • 程序计数器:独占,记录即将执行的代码位置,存放下一行代码的指针。
  • 本地方法栈:独占,等级native方法,在执行引擎执行时加载本地方法库。
  • JVM方法栈:独占,每个线程对应一个JVM方法栈,线程中执行的每一个方法对应栈中的一个栈帧。执行时入栈,执行完出栈(后入先出)。栈帧内又分为几个部分:
    • 局部变量表:存放局部变量及对应的值。
    • 操作数栈:在局部变量运算的过程中临时储存变量数据的栈。
    • 动态链接:指向运行时常量池中该栈帧所属方法的符号引用。
    • 方法出口:方法后续执行的代码地址。
  • 方法区:共享,所有定义的方法的信息都存在方法区,包括静态变量、常量、类信息、运行时常量池。
  • 堆:共享,所有对象实例数据保存的内存空间,也是垃圾收集器管理的主要区域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值