首页 > 编程语言 >java代码执行的过程

java代码执行的过程

时间:2023-04-05 16:25:25浏览次数:33  
标签:解释器 Java 字节 代码执行 JVM java 过程 运行

java程序的运行必须经过三个阶段:编写、编译、运行

编写:指在 Java 开发环境中进行程序代码的输入,最终形成后缀名为 .java 的 Java 源文件。

编译:通过java编译器将java源文件(*.java)编译为java字节码文件(*.class)

运行:通过java类加载器将java字节码加载到堆内存中,再通过java解释器将堆内存中的Class对象解释为可执行代码

具体流图:

具体解释:

1.字节码文件:字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码。它是一种二进制文件,是 Java 源文件由 Java 编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的 Java 解释器来解释执行,因此 Java 是一种在编译基础上进行解释运行的语言,经过类加载器加载进内存的Class类对象也是字节码文件,可以被解释器解释。
2.java类加载器:Java 解释器负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码,以便执行。因此 Java 程序不能直接运行在现有的操作系统平台上,它必须运行在被称为 Java 虚拟机的软件平台之上。

3.Java虚拟机:Java 虚拟机(JVM)是运行 Java 程序的软件环境,Java 解释器是 Java 虚拟机的一部分。在运行 Java 程序时,首先会启动 JVM,然后由它来负责解释执行 Java 的字节码程序,并且 Java 字节码程序只能运行于 JVM 之上。这样利用 JVM 就可以把 Java 字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对特定平台的 JVM,Java 程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也不用考虑字节码文件是在何种平台上生成的,不同操作系统之上的 JVM 是不同的,JVM 是 Java 平台架构的基础,Java 的跨平台特性正是通过在 JVM 中运行 Java 程序实现的。

 

标签:解释器,Java,字节,代码执行,JVM,java,过程,运行
From: https://www.cnblogs.com/Noob-Green-Hand/p/17289630.html

相关文章

  • C++库封装JNI接口——实现java调用c++
    1.JNI原理概述通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链接产物。然后暴露其实现类构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法。进一步......
  • Java Scanner的next和nextLine的区别
    一.next要读取到有效字符才能结束输入,否则会一直处于读取状态读取到有效字符前的空格,会自动清除只有读取到有效字符后,才会把之后的空格清除next不能读取带有空格的字符串空格不能输出只有读取到有效字符后才输出只能输出空格之前的字符二.nextLine1.以Enter为结束......
  • java——maven——分模块开发与设计
                注意:   参数说明:-DgroupId:项目组ID,通常为组织名或公司网址的反写。-DartifactId:项目名。-DarchetypeArtifactId:指定ArchetypeId,maven-archetype-quickstart用于快速创建一个简单的Maven项目。-DinteractiveMode:是......
  • Java基础
    注释1.单行注释//用于注释少量的代码或者对附近的代码进行说明2.多行注释/*/多用于注释多行代码3.文档注释/**/一般用于对类和方法进行说明vscode注释方法的快捷键:1.单行注释:选中区域Ctrl+/取消注释同样是这个快捷键2.多行注释:选中区域Alt+Shif......
  • Redis 的 Java 客户端
    实际项目中,需要通过编程语言去访问并操作Redis。Redis官方提供了多种语言的客户端,具体可访问以下地址:https://redis.io/clientsJava语言访问Redis,常用的API包括:(1)Jedis:一个很小但很健全的redis的java客户端,通过Jedis可以像使用Redis命令行一样使用Redis;Jedis......
  • java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSuppor
    1.报错截图2.问题原因缺少对应的类3.问题解决<dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><......
  • JAVA Spring Boot与海康威视摄像头的故事
    前言:JAVASpringBoot与海康威视摄像头的故事这两天因工作原因,需要对海康威视摄像头进行二次开发。说实话,刚打开开发手册的那一刻,很劝退。由于之前接触硬件开发不多,对于其中的嵌入式设备SDK、DLL动态组件库的内容不甚了解。挠破了头皮,冲!关于本贴刚开始的时候,真的是一步一个坑,虽......
  • Java代码规范和一些常见问题
     本文中的代码规范,是Java标准代码规范中的一小部分,在我看来,是最重要的一部分。  理想目标:不需要写注释,不需要和别人介绍,别人就知道你的项目大致是做什么的,每个类大概实现了什么功能。一.目的   一致性、快速阅读和理解  后期维护、提高工作效率 ......
  • Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当前计数到达零之前,await方法会一直受阻塞。之后,会释放所有等待的线程,awai......
  • mobxtem 使用的过程中突然 只能下载 不能上传
    问题: 昨天moba使用的还好好的。今天就只能下载不能上传了。解决: 我只是用了一个 ssh 的协议。只需要设置一下moba就可以了。截图如下:  首先将打开的终端全部关闭,然后,重新打开一个。 ......