天天看点

java虚拟机

jvm规范:定义了

        ---Class文件类型

        ---运行时数据

        ---帧栈

        ----虚拟机的启动

        ----虚拟机的指令集

java虚拟机

vm指令集:类型转换,出栈入栈操作,运算,流程控制,函数调用。

jvm需要对java Library提供以下支持:

--反射java.lang.reflect

--ClassLoader

--初始化class和interface

--安全相关 java.security

--多线程

--弱引用

 jvm编译:javap进行反汇编

jvm启动的流程:在当前路径和系统版本找jvm.cfg文件,根据配置找到JVM.dll,初始化JVM虚拟机获得JNIEnv接口,找到main方法开始运行。

java虚拟机

jvm基本结构:

  pc寄存器:

每个线程拥有一个pc寄存器。

在线程创建时创建。

指向下一条指令的地址。

执行本地方法时,pc的值为undefined。

方法区:

保存装载的类信息,通常和永久区关联在一起。

类型的常量池

字段,方法信息

方法字节码

java堆:

和程序开发密切相关,new出来的对象都在这里。

应用系统对象都保存在java堆中。

所有线程共享java堆。

对分代GC来说,堆也是分代的。

GC主要工作是区间。

java栈:

线程私有。

栈由一系列帧组成(因此栈也叫帧栈)

栈保存一个方法的局部变量,炒作数栈,常量池指针。

每一次方法调用创建一个帧,并压栈。

java虚拟机

 栈上分配:

java虚拟机

 内存模型:

每个线程有一个工作内存和主存独立

工作内存存放主存中变量值得拷贝

java虚拟机

线程共享:

java虚拟机

线程总是在自己的本地内存中存储变量,本地内存存储共享内存变量的一个副本,共享内存在主存当中的,共享变量存在时延和误差。

指令重排原则:

 jvm参数设置:

-Xmx20m -Xms20m -Xmn15m  -XX:+PrintGCDetails -Xloggc:log/gc.log

设置jvm参数并且将参数输出到文件目录:

java虚拟机

JVM中的新生代和老年代(Eden空间、两个Survior空间)

上一篇: Java虚拟机
下一篇: java虚拟机