JVM是什么?
JVM是java程序运行环境,它可以做到一次编译,到处运行
一、大体上由四部分组成
1.类加载子系统:
根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区
2.执行引擎:
负责解释命令,交由操作系统执行;
3.运行数据区:
我们所有所写的程序都被加载到这里,之后才开始运行
4.本地接口:
与native libraries交互,其他语言交互的接口
二、执行流程
由类加载子系统将java代码转化为字节码并加载到内存中存储在运行数据区,由于字节码并不能直接被底层cpu所执行,所以将字节码转交给执行引擎翻译成底层系统指令再调用本地接口执行整个程序
三、JVM内存结构
程序计数器、栈、堆、方法区
1.程序计数器:用于记录正在执行的字节码指令位置,线程私有,唯一一个不会抛异常的区域
2.栈:
(1) 虚拟机栈 : java方法执行时会在虚拟机栈中创建一个栈帧并进入虚拟机栈,其中存储了该方法的局部变量表,操作数栈,动态链接,方法出口等信息;每个线程都会有一个独立的栈,主要用于方法的调用,方法调用完后会被弹出栈空间,先进后出的顺序
(2) 本地方法栈:是调用其他语言方法时存储信息的内存空间
栈内存不够时,会报 OOME内存溢出 错误,动态扩容申请深度不足也会报错
3.堆:
存放对象实例的内存空间,被所有线程所共享,是java虚拟机内存回收的管理的重要区域,如果堆中没有内存完成实例分配,并且堆也无法扩展时,则抛出OOME异常。
4.方法区:
可以认为是堆的一部分,用于存储已被虚拟机加载的信息,常量、静态变量、即时编译器编译后的代码。虚拟机启动的时候创建,关闭虚拟机时释放
标签:总结,java,虚拟机,学习,内存,JVM,方法,加载 From: https://blog.csdn.net/2401_82985792/article/details/143455174