执行环境用于保存解释器对Java字节码进行解释过程中所需的信息 。它们是:上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针 。执行环境是一个执行一个方法的控制中心 。例如:如果解释器要执行iadd(整数加法),首先要从frame寄存器中找到当前执行环境,而后便从执行环境中找到操作数栈,从栈顶弹出两个整数进行加法运算,最后将结果压入栈顶 。
操作数栈用于存储运算所需操作数及运算的结果 。
运行数据
JVM定义了若干个程序执行期间使用的数据区域 。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁 。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁 。分别有程序计数器,堆,栈 , 方法区,运行时常量池 。
运行过程
上面对虚拟机的各个部分进行了比较详细的说明,下面通过一个具体的例子来分析它的运行过程 。
虚拟机通过调用某个指定类的方法main启动 , 传递给main一个字符串数组参数,使指定的类被装载,同时链接该类所使用的其它的类型,并且初始化它们 。新建一java源文件并取名HelloApp.java,内容如下:
class HelloApp {
public static void main(String[] args) {
System.out.println("Hello World!");
for (int i = 0; iargs.length; i++ ) {
System.out.println(args);
}
}
}
在命令模式下输入:javac HelloApp.java 进行编译,这时同目录下会产生一个编译后的文件:HelloApp.class
然后在命令行模式下键入:java HelloApp run virtual machine
将通过调用HelloApp的方法main来启动java虚拟机,传递给main一个包含三个字符串"run"、"virtual"、"machine"的数组 。我们略述虚拟机在执行HelloApp时可能采取的步骤 。
?
?
JVM虚拟机运行过程
开始试图执行类HelloApp的main方法,发现该类并没有被装载,也就是说虚拟机当前不包含该类的二进制代表,于是虚拟机使用ClassLoader试图寻找这样的二进制代表 。如果这个进程失败 , 则抛出一个异常 。类被装载后同时在main方法被调用之前,必须对类HelloApp与其它类型进行链接然后初始化 。链接包含三个阶段:检验,准备和解析 。检验检查被装载的主类的符号和语义,准备则创建类或接口的静态域以及把这些域初始化为标准的默认值,解析负责检查主类对其它类或接口的符号引用,在这一步它是可选的 。类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行 。一个类在初始化之前它的父类必须被初始化 。
有没有java代码翻译软件?Java里面涉及的英语无非就是48个关键字 , 其余的都可以自定义,所以,这48个的意义和用法必然是要记住的 , 其余的都是自定义的,要靠涉及英语的地方只能靠中英翻译一类的软件翻译了 。
===============================
更扩展的揣摩LZ的意思,难道你想要一种能把Java代码以及里面的运作流程翻译成大白话的软件?这估计难度也太大了吧 。
JAVA阅读源码,大量英文注释阅读不方便,求集成idea里面的翻译java注释由英文翻译为中文的工具 。学会在idea(eclipse)中阅读、调试源码,是java程序员必不可少的一项技能 。
在idea中配完环境后,默认其实也是能够对jdk的源码进行debug调试的 。但是无法在源码中添加自己的注释,无法添加自己的理解 。如果干瞪眼看的话,可能过段时间,就忘记了 。下面就介绍下,如何在jdk源码中为所欲为,像在我们自己的代码中一样写注释、调代码:
打开idea,选择Project-File-Project Structure-SDKs-Sourcepath,初始状态如下图 :
推荐阅读
- 网红直播间一米高摆件图片,网红直播间多大面积
- 鸿蒙系统升级后优化时间,鸿蒙升级后怎么优化
- 闫莺区块链,区块链管理委员会
- mysql设置多表外键关联,mysql设置多个外键
- c语言函数图解 c语言函数图解大全
- php建站修改数据库信息,php数据库密码修改
- linux哪里执行命令,linux执行命令是什么
- 电脑看不见抖音直播怎么办,为什么电脑抖音看不了直播
- Python函数卷积 python的卷积函数