jvm简称java虚拟机。jvm使用软件模拟java字节码的指令集。
jvm规范:定义了
---Class文件类型
---运行时数据
---帧栈
----虚拟机的启动
----虚拟机的指令集
vm指令集:类型转换,出栈入栈操作,运算,流程控制,函数调用。
jvm需要对java Library提供以下支持:
--反射java.lang.reflect
--ClassLoader
--初始化class和interface
--安全相关 java.security
--多线程
--弱引用
jvm编译:javap进行反汇编
jvm启动的流程:在当前路径和系统版本找jvm.cfg文件,根据配置找到JVM.dll,初始化JVM虚拟机获得JNIEnv接口,找到main方法开始运行。
jvm基本结构:
pc寄存器:
每个线程拥有一个pc寄存器。
在线程创建时创建。
指向下一条指令的地址。
执行本地方法时,pc的值为undefined。
方法区:
保存装载的类信息,通常和永久区关联在一起。
类型的常量池
字段,方法信息
方法字节码
java堆:
和程序开发密切相关,new出来的对象都在这里。
应用系统对象都保存在java堆中。
所有线程共享java堆。
对分代GC来说,堆也是分代的。
GC主要工作是区间。
java栈:
线程私有。
栈由一系列帧组成(因此栈也叫帧栈)
栈保存一个方法的局部变量,炒作数栈,常量池指针。
每一次方法调用创建一个帧,并压栈。
栈上分配:
Java栈 – 栈上分配,只能分配小对象
小对象(一般几十个bytes),在没有逃逸的情况下,可以直接分配在栈上
直接分配在栈上,可以自动回收,减轻GC压力
大对象或者逃逸对象无法栈上分配
原文:https://www.cnblogs.com/q1359720840/p/10586583.html