java的运行机制详解

JAVA运行机制详解 | JVM规格描述 (一) Java应用程序的开发 Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将 Java源程序翻译为JVM可执行代码--字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由... 阅读详情

我们可以通过helloworld来理解这几个缩写词的具体含义:

public class HelloWorld {
public static void main(String[] args) {
System.out.println("helloworld");
}
}

编译之后, 我们得到了HelloWorld.class(图中的"Your program's class files")
在HelloWorld里面, 我们调用了 JAVA API中的 java.lang.System这个类的静态成员对象 out, out 的静态方法: public static void println(String string);

然后我们让虚拟机器来执行这个HelloWorld。
1. 虚拟机会在classpath中找到HelloWorld.class。
2. 虚拟机中的解释器(interpret)会把HelloWorld.class解释成字节码。
3. 把解释后的字节码交由execution engin执行。
4. execution engin会调用native method(即平台相关的字节码)来在host system的stdout(显示器)的指定部分打印出指定的字符串。
5. 这样, 我们就看到"helloworld"字样了。

有了这个流程后, 我们就好理解上面几个术语了:
a. JDK: java develop kit (JAVA API包)
b. SDK: software develop kit, 以前JDK 叫做java software develop kit, 后来出了1.2版本后, 就改名叫jdk了, 省时省力, 节约成本。
c. JRE. java runtime environment 我们的helloworld必须在JRE(JAVA运行环境,JAVA运行环境又叫JAVA平台)里面, 才能跑起来。 所以, 显然地, JRE其实就是JDK + JVM

d. JVM java virtual machine. 简单地讲, 就是把class文件变成字节码, 然后送到excution engin中执行。而为什么叫虚拟机, 而不叫真实机呢? 因为JVM本身是又不能运算, 又不能让显示器显示"helloworld"的, 它只能再调用host system的API, 比如在w32里面就会调c++的API, 来让CPU帮他做做算术运算,来调用c++里面的API来控制显示器显示显示字符串。 而这些API不是JDK里面有的,我们平时又看不见的,所以我们就叫它native api了(亦曰私房XX)。

e. 解释平台无关。 有人会说, 在linux的里面调用native api与w32里面调用的api肯定不一样吧? 那为什么说JAVA是平台无关的呢?
其实是这样的, 君不见java.sun.com里面又有jdk-for-w32又有jdk-for-linux下载吗? 刚才不是说了吗? native api, native api, 就是我们平时看不见的api吗! 调用native这些烦琐的活儿都让jdk去做了。所以我们调用的时候只用知道jdk(java api) 里面的java.io.*能提供磁盘访问功能, java.awt.* 能画个框框画个圆圆就行了吗。 至于JDK又是怎么调用的, 在LINXU上更圆呢? 还是在W32上更圆,(x) 这个就是JDK个人的事情了。(理论上讲是一样圆的, 当然这又和显示器是否纯平相关了:D)

同时, 这里就引申出了另一个话题。既如何编写平台无关的JAVA程序。 其中关键的一条, 就是调用且只调用jdk中的API, 而不要私自调用native api。 原因很简单啊, JDK-for-linux和JDK-for-w32表面都是一样的,所以我在w32里面调用JDK写的java程序,在linux里面也会一样的写法啊, 所以就可以移植来移植去都没问题。(b) 但是如果我在w32里面调用了 一个图形显示的native api, 当我移植到linux去的时候, 谁又能保证里面也有相同名称,相同参数,相同返回值, 相同功能的native api供我调用呢!(?)

文章出处:http://www.diybl.com/course/3_program/java/javaxl/200888/134966.html

 

告别环境报错:Qt Creator里配置Android SDK/NDK/JDK路径的完整避坑指南 本文详细解析了在Qt Creator中配置Android SDK/NDK/JDK路径的完整避坑指南,深入探讨了路径检测的内部机制、构建套件配置的隐藏逻辑以及项目级与全局配置的优先级。通过实际案例和高级排查技巧,帮助开发者解决常见的环境报错问题,提升Qt安卓开发效率。 阅读详情

相关推荐

5G LDPC编码实战:从校验矩阵到Matlab代码实现(附完整源码)

本文深入解析5G NR标准中的LDPC编码工程实现,聚焦于从3GPP协议中的QC-LDPC校验矩阵到高效Matlab代码的转换。文章详细阐述了基础矩阵(BG1/BG2)选择、提升因子确定以及利用双对角结构的快速编码算法,并提供了完整的、可优化的Matlab源码,旨在帮助通信算法工程师和开发者快速构建5G LDPC编码仿真原型,为硬件实现奠定基础。

table的专栏 376

Java程序运行机制

Java程序运行机制

qq_45382625的博客 3799

Trae IDE与Playwright MCP:5分钟实现零代码网页数据抓取

网页数据抓取是数据采集和自动化处理中的基础技术,其核心原理是通过程序模拟浏览器行为,定位并提取页面中的结构化信息。传统方式依赖编写脚本处理网络请求、解析HTML和应对反爬机制,技术门槛较高。而结合AI与自动化工具的新范式,通过自然语言交互即可完成复杂操作,极大降低了技术门槛并提升了开发效率。这种技术价值在于将开发者从繁琐的编码中解放,使其更专注于数据分析和业务逻辑。在数据监控、市场调研、竞品分析等应用场景中,快速获取网页数据是关键需求。本文以Trae IDE集成Playwright MCP为例,演示如何通过

culi3118的博客 498

Java运行机制

Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将 Java源程序翻译为JVM可执行代码--字节码。再由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。

个人学习笔记库,一篇一篇记录成长的足迹 1万+

STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成

本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。

palm99的专栏 748

机器视觉学习(七)—— 卷积、边缘和滤波器

卷积运算、垂直边缘与水平边缘、滤波器

歆歆~黯了 2740

Java的运行机制详解

其中JVM是运行Java程序的核心虚拟机,而运行Java程序不仅需要核心虚拟机,还需要类加载器,字节码校验器以及Java的基础类库等。使用Java语言进行程序设计时,不仅要了解Java语言的特点,还要了解Java程序的运行机制。首先将扩展名为java的源文件进行编译,生成扩展名为class 的字节码文件,然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来。为了让初学者能更好地理解Java程序的运行过程,接下来以1.4节中的例1-1为例,通过图1-17来详细地分析程序的执行过程。

代码是程序员的语言,博客是思想的桥梁,连接你我,共享智慧之光。 3218

ArcGISPro应用指南:ArcGISPro制图全流程详解

本文介绍了基于ArcGIS Pro的地图制作基本流程,旨在帮助读者快速掌握从数据加载到地图输出的完整制图操作。文章首先简要概述了GIS技术在当今数据驱动时代的重要作用,并引出ArcGIS Pro作为专业GIS平台的优势与应用价值。随后,内容围绕地图制作的核心步骤展开,包括数据加载、布局创建、地图范围设置以及各类地图要素(如指北针、比例尺、图例、图名)的插入与样式调整。此外,还介绍了如何通过添加图形、文本及动态元素增强地图表达效果,并最终完成地图导出设置与文件输出格式的选择。

weixin_45812624的博客 1356

JAVA 的运行机制

2. 类加载和字节码验证:Java 运行时环境(Java Runtime Environment,JRE)中的类加载器负责加载字节码文件,并将其转换为可执行代码。同时,Java 虚拟机(Java Virtual Machine,JVM)会对字节码文件进行验证,确保其符合 Java 语言规范和安全要求。3. 字节码解释和即时编译:一旦字节码文件加载到内存中,JVM 将解释执行字节码指令。总的来说,Java 的运行机制涉及源代码的编写和编译、类加载和验证、字节码解释和即时编译、运行和垃圾回收以及异常处理。

Eliauk_lxy的博客 2799

蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现

通常情况下,较优的解对应的路径上的信息素会被加强,而较差解对应的信息素则会减少或蒸发。的化学物质,这种物质会在蚂蚁走过的路径上留下痕迹,后续的蚂蚁会根据这些信息素的浓度来选择路径,从而形成一条从蚁巢到食物源的。在求解TSP蚁群算法中,每只蚂蚁相互独立,用于构造不同的路线,蚂蚁之间通过信息素进行交流,合作求解。的过程,该路段经过的蚂蚁越多,信息素留下的就越多,浓度越高,更多的蚂蚁都会选择这个路段。需要注意的是,蚁群算法是一种。(6)计算每只蚂蚁的总距离:遍历每只蚂蚁的路线,累加经过的城市之间的距离。

m0_73804764的博客 1万+

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之EcuC模块配置详解(上)

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之EcuC模块配置详解(上)

weixin_42412049的博客 1529

java运行机制_java的运行机制详解 .

我们可以通过helloworld来理解这几个缩写词的具体含义:public class HelloWorld {public static void main(String[] args) {System.out.println("helloworld");}}编译之后, 我们得到了HelloWorld.class(图中的"Your program's class files")在HelloWor...

weixin_31758889的博客 222

WinCC实现定时存储数据至SQLServer

环境 Win10 WinCC V7.5 SQL Server 2016 运行结果 流程 WinCC变量 全局VB脚本 (我设置的是每2秒存一次,因此周期性触发器设置1秒)

skr? 3986

Java笔记——Java的运行机制详解

类的加载指的是将类的.class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象(规范中并未说明Class对象位于哪里,HotSpot虚拟机将其放在方法区中),用来分装类在方法区内的数据结构。在Worker类的二进制数据中,包含了一个对Car类的run()方法的符号引用,它由run()方法的全名 和 相关描述符组成。如果类中属于常量的字段,那么常量字段也会在准备阶段被附上正确的值,这个赋值属于java虚拟机的行为,属于变量的初始化。

a25847a的博客 1313

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Trae AI编程助手性能优化:从配置误区到高效人机协同编程实践

在AI驱动的软件开发领域,智能体(Agent)与技能(Skill)的协同工作模式正成为提升开发效率的关键。其核心原理在于,智能体通过任务分解、上下文感知和工具调用来理解和执行复杂指令,而非简单的模式匹配。这种技术价值在于将开发者从重复性编码中解放出来,专注于架构设计和逻辑审查。在实际应用场景中,如Spring Boot项目开发,正确的配置与引导能显著提升代码生成质量。本文聚焦于字节跳动的Trae AI编程助手,针对其常见的“代码质量不稳定”问题,深入剖析了因智能体工作模式误解和Skill配置不当导致的性能瓶

weixin_34067102的博客 332

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java程序的运行机制详解

Java程序从编写到最终运行都经历了那些过程?解决这个问题之前我们先简单了解一下。 Java程序有两个非常重要的两个阶段:编译阶段和运行阶段。 Java程序员直接编写的Java代码(普通文本)是无法直接被JVM识别的,Java代码这种普通文本被称为:Java源代码,也就是说Java程序员编写的代码是源代码。源代码不能直接执行,需要先进行编译,生成源代码对应的“字节码”,JVM能识别“字节码”。Java代码这种普通文本变成字节码的过程被称为:编译。 ...

JasonPuth的博客 959

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java的运行机制详解 .

我们可以通过helloworld来理解这几个缩写词的具体含义: public class HelloWorld { public static void main(String[] args) { System.out.println("helloworld"); } } 编译之后, 我们得到了HelloWorld.class(图中的"Your progra

lzy_happy的专栏 1410

java程序的运行机制详解

(一)  Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码--字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译

macsnow的专栏 874

Java代码在JVM上的运行机制详解

Java代码在JVM上的运行机制详解

m0_54258715的博客 649

java编译器源码详解_java应用程序的运行机制

计算机高级语言的类型主要有编译型和解释型两种,而java语言是两种类型的结合。C++,C属于编译型如果写的是C语言写好以后直接编译编译完成以后直接跟我们的操作系统挂钩。脚本语言比如PHP,JavaScript,Python是解释型语言。java源码写好以后首先java编译器把java的源码文件编译位class文件我们也叫字节码文件,然后把字节码文件给了jre(我们可以理解为虚拟机),jre中含有字...

weixin_36319938的博客 222

Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解

俗话说:“十五的月亮十六圆”。那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的。记得马云曾说:今天很残酷,明天更残酷,后天很美好,但绝大部分人是死在明天晚上,所以每个人不要放弃今天。是的,我们不应该放弃今天,因为每个脚印都值得期待,每一次机会都值得尝试。不扯了,还是步入正题吧! Java的运行机制:Java源程序经过编...

weixin_30783629的博客 87

JVM 全面详解:深入理解 Java 的核心运行机制

Jvm就是java虚拟机,

2301_79782001的博客 718

【Java基础核心知识点全解·01】Java运行机制详解:从 HelloWorld 到 classpath 找类流程

本文是《Java基础核心知识点全解》系列第 1 篇,面向 Java 初学者,从 .java -> javac -> .class -> JVM 这条主线出发,讲清 Java 程序从源码到运行结果的完整过程,并结合 HelloWorld 示例拆解 JDK、JRE、JVM、package、import、classpath 的关系。文章最后整理“找不到或无法加载主类”等常见问题排查方法,帮助读者建立 Java 入门阶段最关键的运行机制认知。

超级苦力怕的博客 1129

Java方法的静态绑定与动态绑定讲解(向上转型的运行机制详解)

原文地址:http://www.cnblogs.com/ygj0930/p/6554103.html 一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定。绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。 二:静态绑定 静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的,在编译的时候就可以连接到类的中,定位到这个方法。 在Java中,f...

kaven 1821
上一篇: java 模式对话框与非模式对话框的比较
下一篇: Applet ; Servlet ; Xlet ;
ap0406708
博客等级 码龄20年 4粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值