1、Java运行机制
java程序首先编译成字节码文件 .class文件——>通过JVM进行解析执行——>转换为0101机器码在计算机上运行。
2、JVM内存结构图
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对数据进行了不同的空间的划分,因此每一片区域都有特定的数据处理方式和内存管理方式。
具体划分为如下五个内存空间(非常重要)
A、栈:存放局部变量——>线程私有,生命周期和线程相同。栈由一系列帧组成(因此Java栈也叫做帧栈),帧保存一个方法的局部变量、操作数栈、常量池指针,每一次方法调用创建一个帧,并压栈。 每一次方法被调用直至执行完成的过程,对应着一个栈帧在虚拟机中从入栈到出栈的过程。
B、堆:存放所有new出来的东西——>和程序开发密切相关,应用系统对象都保存在JAVA堆中、所有线程共享Java堆、对于分代GC来说堆也是分代的、GC管理的主要区域。
C、方法区:被虚拟机加载的类信息、常量、静态常量等——>保存装载的类信息,类型的常量池,字段、方法信息,方法字节码。长和永久区(Perm)关联在一起。
D、程序计数器(和系统相关)——>每个线程拥有一个PC寄存器,在线程创建时创建,指向下一条指令的地址。执行本地方法时,PC的值为undefined。
E、本地方法栈: