java内存管理
一、什么是JVM?
jvm的核心功能:
1、软件层面的机器码翻译
java的特点是Write Once Run EveryWhere ,这个特点的实现依赖于不同类型的JVM。class文件运行时需要转换成机器识别的机器指令,而JVM在软层面上完成了从我们认识的指令到机器指令的转换。
2、内存管理
二、java运行时数据区
1、我们写一个类无非包含三种代码:数据代码(int i=1;),指令代码(i++;)和控制代码(return;);计算机底层的操作也主要包含三个方面:数据流、指令流、控制流。
2、程序计数器:指向当前线程正在执行的字节码指令的地址(行号)
java程序执行的最小单位是线程,每个线程都有自己的程序计数器。程序计数器的作用就在于当线程挂起时,记录当前线程执行到哪一步。
3、虚拟机栈:存储当前线程运行方法时所需要的数据,指令
帧
虚拟机栈是每个线程独享的内存区域,一个栈帧对应一个方法,当方法运行时就会进行压栈。局部变量的宽度是32位。
4、操作数栈
如上图所示,通过javac -c -v命令查看java编译器为我们生成的字节码文件
将字节码文件输出到txt文件中。
可以通过查看字节码指令,查看代码运行的具体操作过程
5、动态链接
java中的方法在运行期间,确定要执行该方法的类。如java的运行时多态。
6、出口
方法运行结束时需要出栈。java的出口分为两种,正常出口(如return)和异常出口(如抛出异常,捕获异常)
7、本地方法栈
java中用native修饰的方法,通过C或者C++去实现
8、方法区
存储类信息,静态变量,常量,JIT(Just In Time简称JIT,IT的核心思想: 可概括为“在需要的时候,按需要的量生产所需的产品",如java动态生成的class文件)