导航:首页 > 源码编译 > jvm编译后的文件格式

jvm编译后的文件格式

发布时间:2022-11-28 01:17:02

java程序运行的五个步骤

1、Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode) 2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言("semi-interpreted" language)。

第一步(编译): 创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点像make。如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol”的错误。

编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);方法字节码放的是类中各个方法的字节码。

第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。

2、下面是程序运行的详细步骤:

㈡ java源程序编译过后的文件是什么文件

1.
java文件编译过后会生成一个class文件,里面是以二进制方式存放的代码
2.
机器可以识别class文件中的内容,然后作出相应的操作。

㈢ java源代码与字节码文件类型有哪些

java源文件的格式是text/html类型的,可以直接用记事本打开。编码可以是utf-8,也可以是其它类型的。后缀为.java
源文件编译后的字节码是以CAFE BABY开头的二进制文件。需要JVM才能读懂。后缀为.class
一般来说,一个类对应一个字节码文件,内部类编译后也会生成一个单独的字节码文件。字节码文件是以类名来命名(标识)的。

一些相关的字节码文件可以按照包结构打包成jar文件。jar文件和zip文件差不多。

java程序一般都会依赖很多的jar文件,比如最基本的rt.jar。

㈣ 1.一个Java源程序编译后会生成一种扩展名为 的字节码文件。

填写:.class。
解释:java文件通过jvm虚拟机编译后会生成二进制码,显示的文件格式就是“.class”.
之后通过 “java 文件名”的形式运行即可。

㈤ java文件格式是什么

Java一般存在两种文件格式,如下:
1.*.java文件是保存源代码的文本文件
(*代表类名)
使用
javac
*.java可以编译该文件
使用
java
*可以运行该类
2.*.class是用于保存
Java类的
二进制编码以及Class对象,每一个
Java类都有一个解释该类特征的
Class对象。*.jar文件
是一种压缩文件格式

㈥ java中什么是能够在计算机CPU上执行的二进制代码

java中的JVM是能够在计算机CPU上执行的二进制代码。

Java代码需要经过编译和解释两个步骤,才在能在平台上运行。首先java语言的编译器,帮java代码编译成class的字节码,之后通过java虚拟机(JVM)来解释执行。

java代码是如何编译的?

首先编译的解释:把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序。编译的具体过程,可以看看《编译原理》相关的书籍。

其实java的编译过程,和通常c/c++还是不同的。

java编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);方法字节码放的是类中各个方法的字节码。

Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效地保证了java的可移植性和安全性。

c/c++的编译,当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。

简单的可以这样理解它的功能:就是将java编译之后的字节码,解释成cpu能够执行的二进制代码。

JVM是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(class file)。类文件的组成包括JVM指令集,符号表以及一些补助信息。

java虚拟机工作的原理,可以自己找一下网上的资料。大家还需要思考的问题,jvm的内存、jvm的垃圾回收(GC)、Android的朋友还要区分(Dalvik 和标准 Java 虚拟机JVM)的区别。

java代码编译之后,可以直接运行在Windows或者其它装有JVM虚拟机的系统下。而C或C++直接编译成与机器和操作系统相关的代码。所以C语言编译的程序没有跨平台性,就算没有使用到操作系统相关的API,在不同的系统下也必须重新编译才能运行。

㈦ JAVA程序编写的文件是什么格式的

JAVA
程序编写的源文件(源代码)是以".java"为结尾的,JVM(JAVA虚拟机解析的文件)是以".class"为结尾的,".class"文件就是java的可执行文件,同.exe文件具有同等的效果,.class文件采用的是魔力数字存储,同时为了在不同的CPU下运行,规定了字节的保存形式,采用大端字节顺序(BIG_ENDIAN)来保存的。而且".class"文件里面包含有编译器的版本以及兼容性数据!

㈧ JVM_字节码文件(ClassFile)详解

我们知道 javac 命令可以将 .java 文件编译成 .class 文件,而这个 Class 文件 中包含了 Java虚拟机 指令集、符号表以及若干其他辅助信息;最终将在 Java虚拟机 运行。

本文是以 JVM8 为例的。

每一个 Class文件 都有如下的 ClassFile 文件结构:

先简单介绍一下 ClassFile 文件结构各部分含义:

描述符是表示字段或方法类型的字符串。

字段描述符表示类、实例或局部变量的类型。

从上面文法可以看出,字段描述符中一共有三个类型:

方法描述符包含 0 个或者多个参数描述符以及一个返回值描述符。

看了描述符,可能大家有点疑惑,泛型信息怎么表示啊?

常量池的通用格式如下:

目前 JVM8 中一共用 14 种常量类型,分别如下:

我们知道要使用一个字段或者调用一个方法,就必须知道字段或者方法所属类符号引用,和字段的名字和类型,方法的名字和方法参数类型以及方法返回值类型。
但是我们知道类是能继承的,那么子类调用父类的方法或者字段,这里的所属类符号引用,到底是子类本身还是父类的呢?

我们知道类,方法,字段都有不同的访问标志,在 Class 文件 中使用一个 u2 类型数据项来存储,也就是最多可以有 16 个不同标志位。
在类,方法,字段中有相同的标志,也有不同的标志,总体规划,我们可以借助 Modifier 类的源码来了解:

在 Modifier 类中,类的访问标志:

我们知道在 java 中类可以用的修饰符有: public , protected , private , abstract , static , final , strictfp 。

但是我们再看 Class 文件 中类的访问标志:

仔细看,你会发现有些不同点:

在 Modifier 类中,字段的访问标志:

我们知道在 java 中字段可以用的修饰符有: public , protected , private , static , final , transient 和 volatile 。

但是我们再看 Class 文件 中字段的访问标志:

Class 文件 中字段的访问标志和 java 中字段的修饰符差不多,只是多了 ACC_SYNTHETIC 和 ACC_ENUM 两个标志。

在 Modifier 类中,方法的访问标志:

我们知道在 java 中方法可以用的修饰符有:
public , protected , private , abstract , static , final , synchronized , synchronized 和 strictfp 。

但是我们再看 Class 文件 中方法的访问标志:

字段详情 field_info 的格式如下:

方法详情 method_info 的格式如下:

关于 Class 文件 中属性相关信息,我们再后面章节介绍。

我们可以通过 javap 的命令来阅读 Class 文件 中相关信息。

这个是最简单的一个类,没有任何字段和方法,只继承 Object 类,我们来看看它编译后的字节码信息,通过 javap -p -v T.class 的命令:

我们重点关注常量池相关信息,会发现虽然 T.class 很干净,但是也有 15 个常量,来我们依次分析:

与之前的例子相比较,多了一个字段和方法,那么得到的字节码信息如下:

但是你会发现常量池中怎么没有这个字段 name 的 CONSTANT_Fieldref_info 类型的常量呢?
那是因为我们没有使用这个字段。

多写了一个方法 test1 来调用 name 字段和 test 方法,那么得到的字节码信息如下:

这里定义一个父类 TParent ,有一个公共字段 name 和方法 say 。子类

㈨ java是什么文件格式

java就是.java类型的文件,编译后就是.class文件

阅读全文

与jvm编译后的文件格式相关的资料

热点内容
java栈的元素 浏览:737
程序员与篮球事件 浏览:675
app反编译不完整 浏览:788
电脑上的文件夹怎么调整 浏览:7
服务器无响应是什么原因呀 浏览:984
wd文档里的app怎么制作 浏览:513
电脑里的文件夹没有了一般能恢复吗 浏览:418
哪里有配加密钥匙的 浏览:210
服务器开不了机怎么把数据弄出来 浏览:958
gif动态图片怎么压缩 浏览:521
黑猴子棒球压缩文件解压密码 浏览:631
如何让app适应不同的手机屏幕大小 浏览:10
苹果手机如何给安卓手机分享软件 浏览:761
苹果电脑怎么运行腾讯云服务器 浏览:59
明日之后沙石堡命令助手 浏览:261
蛋糕店用什么样的app 浏览:877
长安银行信用卡app怎么取现 浏览:635
dos命令cmd命令的 浏览:226
阿里云存档视频文件的服务器 浏览:194
ftp修改文件权限命令 浏览:491