JAVA在JVM中运行流程

一、JVM的组成

回答:在JVM中共有四大部分,分别是Class Loader(类加载器)、Runtime Data Area(运行时数据区,内存分区)、Execution Engine(执行引擎)、Native Method Library(本地库接口)。

它们的运行流程是:
第一,类加载器(ClassLoader)把Java代码转换为字节码文件
第二,运行时数据区(Runtime Data Area)把字节码加载到内存中,而字节
码文件只是JVM的一套指令集规范,并不能直接交给底层系统去执行,而是
有执行引擎运行
第三,执行引擎(Execution Engine)将字节码翻译为底层系统指令,再交
由CPU执行去执行,此时需要调用其他语言的本地库接口(Native Method
Library)来实现整个程序的功能。

2、JVM 运行时数据区

运行时数据区包含了堆、方法区、栈、本地方法栈、程序计数器这几部分,每个功能作用不一样。

堆解决的是对象实例存储的问题,垃圾回收器管理的主要区域。

方法区可以认为是堆的一部分,用于存储已被虚拟机加载的信息,常量、静态变量、即时编译器编译后的代码。

栈解决的是程序运行的问题,栈里面存的是栈帧,栈帧里面存的是局部变量表、操作数栈、动态链接、方法出口等信息。

本地方法栈与栈功能相同,本地方法栈执行的是本地方法,一个Java调用非Java代码的接口。

程序计数器(PC寄存器)程序计数器中存放的是当前线程所执行的字节码的行数。JVM工作时就是通过改变这个计数器的值来选取下一个需要执行的字节码指令

3、程序计数器的作用

java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。并且这个线程的执行时间用完了,接着处理器就会又来执行被挂起的这个线程。这时候程序计数器就起到了关键作用,程序计数器在来回切换的线程中记录他上一次执行的行号,然后接着继续向下执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值