1 JVM的内存区域布局
-
java代码的执行步骤有三点
- java源码文件->编译器->字节码文件
- 字节码文件->JVM->机器码
- 机器码->系统CPU执行
-
JVM执行的字节码需要用类加载来载入;字节码文件可以来自本地文件,可以在网络上获取,也可以实时生成。就是说你可以跳过写java代码阶段,直接生成字节码交由JVM执行
-
其中Java虚拟机栈、程序计数器、Heap、本地方法栈、Metaspace属于JVM运行时的内存;按是否线程共享则可以分两类
-
JAVA堆和MetasSpace元空间属于线程共享的;虚拟机栈和本地方法栈、程序计数器是线程私有的
2 JVM五大数据区域介绍
-
2.1 程序计数器(Progarm Counter Register)
- 一块较小的内存空间, 是当前线程所执行的字节码的行号指示器。线程有一个独属的程序计数器,字节码解析工作时需要程序计数器来选取下一指令,分支、循环、跳转等依赖它
- 正在执行java方法线程的计数器记录的是虚拟机字节码指令的地址;如果还是Native方法,则为空
- 程序计数器内存区域是唯一一个在虚拟机中没有规定任何OutOfMemoryError错误的区域
-
2.2 虚拟机栈(Virtual Machine St