2024-06-28 13:48:00 | 我爱编程网
Java虚拟机处于机器和编译程序之间,在任何平台上都提供给编译程序一个共同的接口。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。 Java虚拟机的主要任务是装载class文件并且执行其中的字节码。Java虚拟机包含一个类装载器,它可以从程序和API中装载class文件。字节码由执行引擎来执行。 Java虚拟机结构 类装载器的体系结构是Java虚拟机在安全性和网络移动性上发挥重要作用的一个方面,图中所示的类装载器可以包含多个类装载器的子系统, Java应用程序能够在运行时决定需要安装的类,并且将被不同的类装载器装载的类存放在不同的命名空间。 执行引擎处于Java虚拟机的核心位置,它的行为由指令集所决定,其主要作用就是解释字节码(即运行经过编译后的Java程序的class文件) ,不同的执行引擎实现可能非常不同。由软件实现的虚拟机的执行引擎分为一次性解释字节码、即时编译器和自适应优化器,由硬件芯片构成的虚拟机用本地方法执行Java字节码,它的执行引擎是内嵌在芯片里。 Java虚拟机相当于一个堆栈计算机,它在指令间传送信息时不使用任何物理寄存器,而使用堆栈的帧来表示方法的状态、字节码的操作对象、方法的参数空间及局部变量的空间,它的“程序计数器”为一个伪寄存器,是当前所执行指令的字节码数组的一个指针。 Java实现方法 Java有两种实现方法:Java方法和本地方法。Java方法是由Java 语言编写,编译成字节码,存储在class文件中。本地方法是由其他语言(比如C,C++,或者汇编语言)编写的,编译成和处理器相关的机器代码,保存在动态连接库中,格式是各个平台专有的,它是联系Java程序和底层主机操作系统的连接方法。Java方法与平台无关,但是本地方法却不是,运行中的 Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。通过本地方法, Java程序可以直接访问底层操作系统的资源,使程序和特定的平台相关,一个本地方法接口——Java本地接口(JNI)使得本地方法可以在特定的主机系统的任何一个Java平台上运行。
Java工作原理
由四方面组成:
(1)Java编程语言
(2)Java类文件格式
(3)Java虚拟机
(4)Java应用程序接口
当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用 。
我爱编程网(https://www.52biancheng.com)小编还为大家带来Java运行机制。的相关内容。
java的运行流程
一,我们所看不到的:
1,如果java文件没有package,就默认给文件加上"无名"package;
2,默认导入java.lang包,所以我们的java程序中可以使用Sting,Math,Integer等类,包括一些异常类;
3,如果生成的类没有父类,则为这个类隐式加上父类:Object;因此,包括Object中的许多方法可以使用;
4,字段的初始化;
二,我们所看的到的:
既然看的到,就先看程序运行结果:
public class JRun1 {
public JRun1() {
System.out.println(" 构造函数");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
运行结果:
static{}
main()
显然,程序运行时,先运行:
static
{
System.out.println("static{}");
}
再调用main();
注意: 我们可以得到一个副产品:不用main方法也能运行的程序:
public class JRun1 {
static
{
System.out.println("no main()");
System.exit(0);
}
}
如果我们在类中建立一个对象:
public class JRun1 {
public JRun1() {
System.out.println(" 构造函数");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
new JRun1();
}
运行结果:
static{}
main()
{}
构造函数
从而,我们得出:
建立一个非主类对象,顺序为:静态初始化块static{}-->初始化块{}-->构造函数constructor;
那么,牵涉到继承,运行流程又如何?
看程序:
class JRun1Father{
JRun1Father(){
System.out.println("父类构造函数");
}
static{
System.out.println("父类静态初始化块");
}
{
System.out.println("父类初始化块");
}
}
public class JRun1 extends JRun1Father{
public JRun1() {
System.out.println("子类构造函数");
}
static
{
System.out.println("子类静态初始化块");
}
{
System.out.println("子类初始化块");
}
public static void main(String[] args) {
//System.out.println("主方法)");
new JRun1();
}
}
运行结果:
父类静态初始化块
子类静态初始化块
父类初始化块
父类构造函数
子类初始化块
子类构造函数
所以,牵涉到父类:父静态-->子静态-->父初始化及构造-->子初始化及构造;
注意:初始化块和构造是接连运行的,不会父类子类交替.
Java运行机制。java的运行流程一,我们所看不到的:1,如果java文件没有package,就默认给文件加上"无名"package;2,默认导入java.lang包,所以我们的java程序中可以使用Sting,Math,Integer等类,包括一些异常类;3,如果生成的类没有父类,则为这个类隐式加上父类:Object;因此,包括Object中的许多方法可以使用;4,字
Java异常机制是什么一、异常的关键字:一般来说,异常的关键字有:try、catch、finally、throw、throws。网上的资料对这几个关键字是这样解释的:try:Openingexception-handlingstatement.catch:Capturestheexception.finally:Runsitscodebeforeterminatingt
要在虚拟机上linux系统使用pycharm需要什么硬件配置我用的是VMware傻瓜式安装的ubuntu14.04-32位版本,安装后第一件事当然是$sudoapt-getinstallopenssh,这样才能使用ssh,推荐用putty客户端连接操作。先备份一下原有的list$cp/etc/apt/sources.list/etc/apt/sources.list.bak12
虚拟技术专业是学什么的虚拟技术专业要学的有编程、数学、物理、艺术。1、编程:这是任何计算机科学专业的基础。在虚拟技术中,你需要学习如何使用各种编程语言,如C++、Java、Python等,来创建和运行虚拟环境。2、数学:虚拟技术涉及到许多复杂的数学概念,如向量、矩阵、几何、线性代数等。这些数学知识将帮助你理解虚拟环境中的各种算法和模型。3、物理:虚拟技术中的许多概念都
java应用程序怎样打包成可jar执行程序(java打包成可执行文件)总体思路是先打成jar再把jar打成exe。主要看1.3和2.3里的内容就可以了。1.将项目打成jar:1.1要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可以用Eclipse的Export生成jar。经过尝试后,我不推荐用Ant打包,因为要自己编写xml脚本语言,还要增
机器狗编程制作教程练习什么技能机器狗编程制作教程练习的技能有:1、机器人控制技术。学会如何控制机器人的各种部分,例如运动,感知和动作。2、编程语言。机器狗编程制作需要使用编程语言例如Python或C++。3、数学与物理。机器狗的运动需要依赖于物理学规律,需要掌握基本的物理学知识以及数学技能。4、电子工程。了解电子工程基础知识,例如面包板,传感器,电机等。5、创新思维和问题
java中反射实例类装载的步骤及简要阐述java反射和类装载反射机制:Personp=newPerson();这是什么?当然是实例化一个对象了.可是这种实例化对象的方法存在一个问题,那就是必须要知道类名才可以实例化它的对象,这样我们在应用方面就会受到限制.那么有没有这样一种方式,让我们不知道这个类的类名就可以实例化它的对象呢?ThankGoodness!幸亏我们用的是java
java进程虚拟内存占用高有什么影响性能问题。虚拟内存是通过将部分数据从物理内存交换到磁盘上的虚拟内存中来实现的,如Java进程的虚拟内存占用过高,会导致频繁的内存页交换,这会增加磁盘I/O操作,降低系统性能,并导致应用程序响应变慢。Java程序占用内存太高了怎么办?先看下是否有内存泄露,简单的方法就是隔一段时间检查下内存,看看是否是持续上升。然后看下资源是否可以优化,
2023-12-21 16:29:16
2023-12-24 20:21:11
2024-04-13 17:18:48
2024-04-09 17:44:01
2024-04-04 05:10:44
2024-03-31 15:14:06