微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM初探

一个Java文件的执行流程粗略地讲就是这样:

在这里插入图片描述

1、javac编译器

在这里插入图片描述

2、类装载子系统

在这里插入图片描述

3、运行时数据区

在这里插入图片描述

3.1、程序计数器

程序计数器是一块很小的内存空间,用来记录当前线程执行字节码位置的行号,JVM就是通过程序计数器来选取下一条需要执行的字节码指令。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

由于Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储(线程私有)。

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。此内存区域是唯一一个在《Java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域。

3.2、本地方法

native方法执行时的入栈出栈操作都在这里进行。

HotSpot虚拟机将本地方法栈和Java虚拟机栈合二为一了。

3.3、Java虚拟机栈

3.4、

3.5、方法区

4、字节码执行引擎

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐