执行Java代码的原则

执行Java代码的原则。

对任何语言来说,想要达到精通的程度,就必须研究其执行原理(或称为底层机制),这并不是一个好方法。
在这里插入图片描述

这篇文章主要关注java源代码的执行方式,也就是从程序员编写JAVA源代码到最终产品的形成,在这一过程中经历了什么?如何执行每个步骤呢?什么是执行原则呢?

执行Java代码的原则。

编写java源代码。

java源文件:表示用于存储java源码的文件。

首先看一下下面的代码:

MyTest是由public来修饰的,所以存储java源代码的文件名是MyTest。

发布类我测试{

publicstaticvoidmain(字符串[]){

(a)System.out.println(“TestJavaexecuteprocess.”);

}

}

因为MyTest是由public修饰的,所以ClassA不能由public修饰。

类A{}

因为MyTest是由public修饰的,所以ClassB不能由public修饰。

类B{}

java源文件名是public类在源文件中的名称。

执行Java代码的原则。

一个java源文件可以包含多个类,但是只允许有一个public类。

编译java源代码。

在结束java源程序的编码之后,需要编译器编译。

jdk安装完成之后,打开jdk目录,其中包含两个.exe文件:javac.exe(编译源代码,xxx.java)和java.exe(执行字节码,xxx.class)。

下面的图表显示:

执行Java代码的原则。

切换到MyTest.java文件夹。

执行Java代码的原则。

javac.exe编译MyTest.java

执行Java代码的原则。

在编译之后,发现e:Blogs目录中有更多的文件,后缀为class:A.class、B.class和MyTest.class。

执行Java代码的原则。

tip:当javac.exe编译java源代码时,java源代码中有几个类,它们被编译成相应的bytecode文件(.class文件)

在这个类中,字节码文件的文件名就是类的名称。一定要注意,即使没有在源文件中定义类,也会被源文件引用,编译之后,编程相应的字节码文件。

例如,A类引用C类,C类没有定义在A类的源文件中,C类被编译为C.class对应的字节码文件。

tips:关注微信公众号:Java后台,获取每日的技术博客推送。

执行java源代码文件。

在java.exe中执行java源文件。

执行Java代码的原则。

目前,java源程序基本执行了结果并正确打印了预期结果,按照上述步骤,我们可以总结如下:

执行Java代码的原则。

如上文所述,在JVM中的执行是抽象的。下一步,我们将分析字节码文件(.class文件)是如何在虚拟机中逐步执行的。

JVM如何执行字节码文件。

装入字节码文件。

在javac.exe编译器将.java源码编译成.class字节码文件之后,JVM就可以完成接下来的工作了。

首先,JVM通过类加载器(ClassLoader),将class文件和相关的JavaAPI装载到JVM中,以便JVM随后进行处理。

这一阶段包括以下几个基本概念和知识。

JDK、JRE和JVM之间的关系。

jdk(JavaDevelopmentKit),Java开发工具包,主要用于开发,在jdk7之前JDK包含了JRE。

JavaRuntimeEnvironment是运行Java程序的核心环境,包括JVM和一些核心库。

Java虚拟机(VM),VM是一种计算设备的规范,它是一种虚构的计算机,通过在实际计算机上模拟各种不同的计算机功能来实现,VM是JRE的核心模块。

二、JVM。

JVM是一种计算设备的规范,它是一台虚构的计算机,通过在实际计算机上模拟各种计算机功能来实现。

JavaVirtualMachine的主要任务是装载class文件并执行其中的字节码,在不同的JavaVirtualMachine中,执行引擎可能有不同的实现。
  在这里插入图片描述

发动机大体上有以下几种:

一次解释字节码引擎。

立即编译引擎

适应性最优器。

至于虚拟机的实现方式,就是软件方式、硬件方式和软件硬件结合的方式,这个要根据具体厂商来定。

什么是ClassLoader呢?

虚拟机的主要任务是装入class文件并在其中执行字节码,而class文件是由虚拟机的类装入器(ClassLoader)完成的,在一个Java虚拟机中可能会有多个类装入器。

任意一个java应用程序,都可以使用两种类装入器,即启动类装入器和用户自定义类装入器。

startclassloader是Java虚拟机唯一实现的一部分,它也可以被划分为原始类装载器、系统类装载器或默认类装载器。其主要作用是装载来自操作系统磁盘的对应类,例如JavaAPI类等。

Usercustomloading类,也就是按照用户自定义的方式进行装入。

执行Java代码的原则。

在JVM内存中存储字节码文件。

在JAVA虚拟机运行程序时,它需要有内存来存储很多东西。

例如字节码、由程序创建的对象、传递给方法的参数、返回值、局部变量和操作的中间结果等等,这些相关信息都组织成“运行时数据区”。

在Java虚拟机中,运行时数据区因厂商而异。一些运行时数据区被线程共享,而另一些仅能被特定的线程共享。

运行期数据区大致可以划分为几个区域:方法论区域、堆区、栈区、PC寄存器区域和本地方法栈区。

这一阶段涉及到以下基本概念和知识。

一、方法区。

方法区用于存储有关已加载class文件的解析信息。

在虚拟装入class文件之后,它从该class文件包含的二进制数据中解析类型信息,然后将其存储在方法空间中。

二、堆。

heap用于存储new对象等相关引用类型。在一个程序运行时,这个虚拟机会将它在运行时创建的所有对象放入堆中。

三、电脑登记程序。

个人计算机的寄存器主要用于存储线程。在新建线程时,该线程都会获得自己的PC寄存器(程序计数器)和java栈。

JAVA没有寄存器,它的指令集使用Java栈存储中间数据。

四、栈区

主要用于存储诸如基本数据类型等值类型。一定要注意,String是引用类型,并且存在于堆中。

JavaScript是由多个栈帧组成的,其中一个栈帧包含Java方法调用的状态,当线程调用某个方法时,该虚拟机将进入到该线程的Java栈,当该方法返回时,该栈帧将弹出Java栈。

执行Java代码的原则。

执行引擎与运行时数据区进行交互。

RuntimeData为执行引擎提供了执行环境和相关数据,它通过与RuntimeData交互,从而获得执行所需的相关信息,存储执行的中间结果等等。

执行Java代码的原则。

执行引擎与本地方法进行接口。

执行引擎在执行本地方法时调用本地方法接口,以获得相关的OS本地方法。

必须注意,本地方法与操作系统是强耦合的。

执行Java代码的原则。

JVM是在特定的操作系统上执行的。

JVM通过调用一个本地接口获得一个本地方法,从而实现在一个特定平台上执行。例如,它可以在Linux系统、Window系统和Unix系统上运行。

更多精彩内容:
https://www.yaoruanwen.com/n/477550.html
https://www.yaoruanwen.com/n/477555.html
https://www.yaoruanwen.com/n/477565.html
https://www.yaoruanwen.com/n/477570.html
https://www.yaoruanwen.com/n/477577.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值