1.Java核心机制
Java两种核心机制
- Java虚拟机(JVM)
- 垃圾回收机制
2.深入字节码剖析Java虚拟机内存模型
2.1 以HelloWorld举例
2.1.1 运行流程
.java文件 —-> javac编译器 —-> .class文件 —–java—–>JVM(Java的JVM机制在软件层面屏蔽不同操作系统在底层硬件与指令上的区别)
2.2 JVM内部组成部分
每次创建一个虚拟机,都会对开辟每一个区域的内存块分配空间。
2.2.1虚拟机栈(线程)
每一个线程栈都会从 虚拟机栈里取出部分内存空间。
每个方法都会在线程栈里开辟一个 栈帧内存空间用于存放局部变量、操作数栈、动态链接、方法出口
理解局部变量、操作数栈、动态链表、方法出口
操作数栈与局部变量的理解看图
使用
javap
命令1
javap -c Math.class >math.txt # 反编译字节码文件并且保存为一个txt文件
源代码 反编译代码
动态链接
即方法栈帧 每次执行时都会去方法区 获取该方法的代码地址
方法出口
即方法运行完之后保存需要返回的信息找到调用代码的位置进行返回
2.2.2 程序计数器
概念: 用于存放代码正在运行或者马上执行的行号或者位置,本质是读出该代码在方法区的位置
程序计数器是每一线程所独有的,是从程序计数器区挖的一块存储空间
程序计数器的应用情况
- 在多线程的运行条件下,有优先级更高的线程抢占,当前线程被挂起,当重新执行该线程的时候就需要从程序计数器中读取出该代码的行号
2.2.3 方法区
存放常量、静态变量、类信息
2.2.4 本地方法栈
用native修饰的方法,底层是使用c/c++实现的