JVM运行流程和结构

1运行流程

整个流程是:


1.      通过java xx命令进入jvm中

2.      装载配置:根据当前的路径和系统版本寻找 jvm.cfg文件

3.      根据配置文件寻找jvm.dll 文件:jvm.dll文件为JVM的主要实现

4.      初始化JVM 得到JVM对应的接口和findClass等操作实现

5.      找到main()方法进行操作运行。

 

.Java文件在执行时候先转化为 .class文件再在虚拟机之中进行执行。

 

.Class文件在虚拟机之中的执行流程:

1.      Class文件通过类加载器子系统进入内存空间。

2.      Java堆,java栈进行操作(二进制操作)

3.      调用本地方法库将执行结果输出

4.      堆栈操作结束进行垃圾回收GC

由此可见JVM实现垃圾的自动回收机制,相对C++ 比较方便。

 

2.JVM结构

JVM的结构组成:


有表可以得到JVM 包括:

1.      PC寄存器

2.      垃圾回收器

3.      方法区

4.      Java堆

5.      Java 栈

6.      本地方法栈

 

PC寄存器

每个线程拥有一个PC寄存器

在线程创建时创建的

指向下一条指令的地址

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

方法区

保存装载的类信息

1类型的常量池

2 字段,方法信息

3方法字节码

Java堆

和程序开发密切相关

1.应用系统对象都保存在Java堆中

2.所有线程共享Java堆 (公共区域)

3.对分代GC来说,堆也是分代的

4.GC的主要工作区间

 

Java栈

1.线程私有

2.栈由一系列帧组成(因此Java栈也叫做帧栈)

3.帧保存一个方法的局部变量、操作数栈、常量池指针

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

 

栈中包含

1. 局部变量表包含参数和局部变量(static 方法和 非static 方法 栈中位置区别)

2.  Java没有寄存器,所有参数传递使用操作数栈 。

在栈中的操作:


1.      a进栈 --- 100 进栈中

2.      b进栈 --- 98 进栈中

3.      弹出两个变量求和,和压栈  --198进栈

4.      弹出结果,放在局部变量2中 ----- c=a+b;

5.      局部变量2压栈  ------- c=198进栈

6.      返回结果 --------- return c;

栈上分配

分配对象:

1.        小对象(一般几十个bytes),在没有逃逸的情况下,可以直接分配在栈上

2.        直接分配在栈上,可以自动回收,减轻GC压力

3.        大对象或者逃逸对象无法栈上分配

JVM内存模型:


1.      主内存空间是共享空间

2.      工作内存空间是私有的空间

3.      线程工作内存与主内存之间数据更新有延迟

4.      Volatile可以实现工作内存与主内存之间的数据快速更新

 

JVM运行:

1.解释运行

–      解释执行以解释方式运行字节码

–     解释执行的意思是:读一句执行一句

2编译运行(JIT)

–     将字节码编译成机器码

–      直接执行机器码

–      运行时编译

–      编译后性能有数量级的提升

 

编译运行效率高于解释运行的效率。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值