Java虚拟机学习(三)-类文件结构的简单介绍

【深入Java虚拟机】之二:Class类文件结构 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各种变量、关键字和运算符的语义最终都是由多条字节码命令组合而成的,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更强大,这便为 阅读详情

我们都知道计算机在执行程序时,只能识别0和1格式的程序,但在Java虚拟机出现之后,便有了一种新的程序存储格式——字节码。也正因为实现了从机器码到字节码的转变,使得Java程序可以”Write Once, Run Anywhere”(一次编写,到处运行)。时至今日,出现了一大批基于虚拟机运行的语言,比如:Scala、Groovy等。
今天的学习结果就是记录一下Java程序在编译成字节码后的文件结构,也就是Class的文件结构。如果大家想要了解更多的相关介绍,可以阅读Java虚拟机规范。

1.Class类文件的结构
每个Class文件都是由8字节为单位的字节流组成。所有的16位、32位和64位数据都被构造成2个、4个和8个字节单位来表示。多字节数据项按照Big-Endian(以最高位字节放在地址最低位,最低位字节放在地址最高位的顺序存储)。

在Java虚拟机规范中使用类似于C语言结构体的伪结构来存储数据,这种伪结构有两种数据类型:无符号数和表。
无符号数属于基本数据类型,以u1、u2、u4、u8来分别表示1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成的字符串值。
表是由多个无符号数或者其他表作为数据项构成的复合数据类型。

Class类文件结构体

ClassFile {    
    u4 magic;   //魔数 有固定值0xCAFEBABE
    u2 minor_version;     //副版本
    u2 major_version;     //主版本
    u2 constant_pool_count;  //常量池计数器
    cp_info constant_pool[constant_pool_count-1];   //常量池
    u2 access_flags;   //访问标志
    u2 this_class;    //类索引,标识当前类  
    u2 super_class;   //父类索引,标识父类
    u2 interfaces_count;   //接口技术器
    u2 interfaces[interfaces_count];    //接口表  
    u2 fields_count;   //字段计数器
    field_info fields[fields_count];    //字段表
    u2 methods_count;   //方法计数器  
    method_info methods[methods_count];   //方法表
    u2 attributes_count;   //属性计数器  
    attribute_info   //属性表
} 

下面介绍一下结构体中各项的具体表述意义:
magic:魔数,魔数的唯一作用是确定这个文件是否为一个能被虚拟机所接受的 Class 文件。魔数值固定为 0xCAFEBABE,不会改变。

minor_version major_version :副版本号和主版本号,minor_version 和 major_version 的值分别表示 Class 文件的副、主版本。它们共同构成了 Class 文件的格式版本号。

constant_pool_count :常量池计数器,constant_pool_count的值等于constant_pool表中的成员数加1。constant_pool 表的索引值只有在大于 0 且小于 constant_pool_count 时才会被认为是有效的。

constant_pool:常量池,constant_pool 是一种表结构,它包含 Class 文件结构及其子结构中引用的所有字符串常量、类或接口名、字段名和其它常量常量池中的每一项都具备相同的格式特征——第一个字节作为类型标记用于识别项是哪种类型的常量,称为“tag byte”。常量池的索引范围是1至constant_pool_count−1。

access_flags :
访问标志,access_flags 是一种掩码标志,用于表示某个类或者接口的访问权限及基础属性,如:public、abstract等。

this_class :类索引,this_class 的值必须是对 constant_pool 表中项目的一个有效索引值。constant_pool 表在这个索引处的项必须为 CONSTANT_Class_info 类型常量,表示这个 Class 文件所定义的类或接口。

super_class: 父类索引,对于类来说,super_class 的值必须为 0 或者是对 constant_pool 表中项目的一个有效索引值。如果它的值不为 0,那 constant_pool 表在这个索引处的项必须为 CONSTANT_Class_info 类型常量,表示这个 Class 文件所定义的类的直接父类。

interfaces_count :接口计数器,interfaces_count 的值表示当前类或接口的直接父接口数量。
interfaces:接口表,interfaces[]数组中的每个成员的值必须是一个对constant_pool 表中项目的一个有效索引值,它的长度为 interfaces_count。每个成员 interfaces[i] 必须为 CONSTANT_Class_info 类型常量,其中 0 ≤ i < interfaces_count。在 interfaces[]数组中,成员所表示的接口顺序和对应的源代码中给定的接口顺序(从左至右)一样,即 interfaces[0]对应的是源代码中最左边的接口。

fields_count :字段计数器,fields_count 的值表示当前 Class 文件 fields数组的成员个数。fields数组中每一项都是一个 field_info 结构的数据项,它用于表示该类或接口声明的类字段或者实例字段。
fields:字段表,fields数组中的每个成员都必须是一个 fields_info 结构的数据项,用于表示当前类或接口中某个字段的完整描述。fields数组描述当前类或接口
声明的所有字段,但不包括从父类或父接口继承的部分。

methods_count :方法计数器,methods_count 的值表示当前 Class 文件methods数组的成员个数。
methods:方法表,methods[]数组中的每个成员都必须是一个 method_info 结构的数据项,用于表示当前类或接口中某个方法的完整描述。

attributes_count :属性计数器,attributes_count 的值表示当前 Class 文件 attributes 表的成员个数。
attributes:属性表,attributes 表的每个项的值必须是 attribute_info 结构。在Java虚拟机规范里,Class 文件结构中的 attributes 表的项包括下列定义的属性:
InnerClasses、EnclosingMethod、Synthetic 、Signature 、SourceFile, SourceDebugExtension、Deprecated、RuntimeVisibleAnnotations、RuntimeInvisibleAnnotations以及BootstrapMethods属性。对于支持 Class 文件格式版本号为 49.0 或更高的 Java 虚拟机实现,必须正确识别并读取 attributes 表中的 Signature、RuntimeVisibleAnnotations和RuntimeInvisibleAnnotations。对于支持 Class 文件格式版本号为 51.0 或更高的 Java 虚拟机实现,必须正确识别并读取 attributes 表中的BootstrapMethods属性。

上述所有数据项的介绍都来自与Java虚拟机规范,更具体的描述可以参考Java虚拟机规范。

3、Java虚拟机与类文件结构深度剖析 本文深入解析了Java虚拟机(JVM)的核心机制,包括空引用处理、数据类型表示和方法调用管理等内容,并详细介绍了编译后的Java代码与JVM之间的关键纽带——类文件结构。通过对类文件头、字段、方法以及相关技术要求的探讨,帮助读者全面理解Java程序从源代码到字节码的执行过程,为提升Java开发技能奠定坚实基础。 阅读详情

相关推荐

如何提取大端存储(Big-Endian)二进制文件中的数据,并输出到txt中

如何提取大端存储(Big-Endian)二进制文件中的数据,并输出到txt中。matlab实现

java新手超级入门——类结构篇

1、 Java项目由编写的多个源文件(*.java)组成。多个源文件中必定有且只能在某一个源文件中有一个主函数,主函数就是程序的入口。阅读项目源程序首先要找到主函数,根据主函数中的代码分析各个类和接口,从而实现阅读、分析所有的源代码。 2、 每个源文件(*.java)由一个或多个类组成。 3、 Java程序的编写组成就是在写类、接口 4、 一个java基本类结构如下: 类的修饰符 cla

liujun13579的专栏 1万+

EDF Browser使用说明和技巧

edf browser使用说明和一些小技巧

Erhu_666的博客 8315

Java教程:了解Java类的组成

一直很喜欢一句广告词:生活就是一个七天又一个七天。而我想说的是,Java应用就是一个类又一个类。Java是面向对象的语言,对象都是由类实例化而来。一个Java应用,不论简单还是复杂,都是由若干个Java类组成的。因此,对于初学者,先了解Java类的组成是必要的。 Java类的组成主要有3部分:数据成员、构造方法、方法成员。 首先看下边的代码,是一个简单的Java类:

ones123654的专栏 1628

谷歌浏览器崩溃排查:闪退、卡死、网页打不开的修复指南

浏览器多进程架构通过进程隔离、GPU加速和扩展沙箱提升网页渲染效率,但配置损坏、扩展冲突、显卡驱动异常或系统资源不足时,常会以闪退、卡死、白屏、内存占用飙升和能上微信却打不开网页等形式暴露。排查价值在于先分层定位系统、进程、配置扩展与网页内容,再用无痕模式、chrome://crashes、chrome://gpu和浏览器任务管理器收集证据,避免盲目重装。对办公、开发运维和日常维护场景,禁用扩展、关闭硬件加速、刷新DNS缓存、重置配置文件乃至干净重装,都是可复用的工程化处置手段。围绕谷歌浏览器崩溃的典型症状

weixin_34138056的博客 425

红外热成像仪原理及应用

目录什么是红外热成像背景介绍热成像技术原理热成像分类红外热成像和夜视仪之间的区别红外热像仪夜视仪红外照明相机对比红外热像仪都能看透什么如何选择制冷型和非制冷型红外热像仪制冷型红外热像仪非制冷型红外热像仪实例对比成像速度空间分辨率灵敏度光谱滤波同步何如选择合适的红外热像仪像素测温范围和被测物温度分辨率空间分辨率温度稳定性热像仪的距离系数比常见热成像仪关键参数量程视场角 (FOV)红外分辨率热灵敏度(NETD)焦距光谱范围精度内置优化分析NTED(热灵敏度)什么是NETD如何测量NETD?NETD如何影响测量?

zhy295006359的博客 2万+

Java虚拟机——类文件结构

1.概述 编译后的 .class 文件是虚拟机实现平台移植性的根本,下来我们一起来一步一步分析一下 .class 文件。 (ps:此文章借鉴了周志明老师写的《深入理解Java虚拟机》中的第六章,文中用的代码比较差,当时代码规范不是很好) 2.Class 类文件的结构 Class文件是一组以8位字节为基础单位的二进制流,各个数据严格按顺序排列在一起,中间没有分隔符。 虚拟机规定,Class 文件采用...

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 354

相似贴子推荐:基于 LangChain4j + Milvus 的混合检索实战

本文提出了一种基于LangChain4j和Milvus的混合检索方案,用于解决论坛社区中的相似帖子推荐问题。该方案结合稠密向量语义检索和BM25关键词检索的优势,通过RRF算法实现结果融合。系统采用bge-small-zh模型生成语义向量,利用Milvus 2.5+原生支持的BM25功能和混合搜索API,在百万级数据规模下实现50ms内的检索延迟,召回率和精确率分别提升15%和22%。文章详细介绍了从数据预处理、向量化到混合检索的完整实现流程,并探讨了进阶优化方向,为推荐系统和RAG应用提供了高效解决方案。

分享AI、区块链技术及应用,未来已来 88

深入理解Java虚拟机:Jvm总结-类文件结构以及类加载机制

代码编译的结果从本地机器码转变为字节码,冲破了平台界限。

Oceáno的博客 1496

【unity实战】Unity游戏开发:如何用ScriptableObject与序列化多态实现可复用的模块化效果系统?

本文介绍了两种实现卡牌游戏效果系统的模块化设计方案。方案一使用ScriptableObject创建独立的效果资产,通过组合实现不同效果,优点是数据可复用、可视化编辑,缺点是同类不同参数效果需创建大量SO文件。方案二利用SerializeReference特性直接嵌套效果实例,避免SO文件过多,但需要插件支持编辑器多态显示。两种方案都将效果与卡牌解耦,提高了代码复用性和扩展性,解决了硬编码带来的重复、维护困难和扩展不便等问题。开发者可根据项目需求选择合适方案,或结合两者优势构建更灵活的系统。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 436

AMBA-CHI协议详解(七)

本节描述该协议包含的支持系统保序需求的机制。

Crazzy_M的博客 1158

Java虚拟机——类文件结构(一)

《深入理解Java虚拟机》第二版 周志明 目录第六章 类文件结构 ~p162~无关性基石Class类文件的结构1. 魔数与Class文件的版本2. 常量池3. 访问标志4. 类索引、父类索引与接口索引集合5. 字段表集合 ~p175~6. 方法表集合 ~p178~7. 属性表集合 ~p180~· code属性 ~p182~· Exceptions属性 ~p188~· LineNumberTable属性 ~p189~· LocalVariableTable属性 ~p189~· SourceFile属

highmiao的博客 1302

YOLOv11改进 - C3k2融合 | C3k2融合融合WDBB宽度多样分支模块(Width Diverse Branch Block)通过多尺度分支增强特征表征能力

本文着眼于灰度图像目标检测所面临的挑战,提出了增强型目标检测网络 YOLO - MIF,该网络整合了多种多信息融合策略以对 YOLOv8 网络进行改进。文章开篇介绍了一种可创建伪多通道灰度图像的技术,此技术能增加网络的通道信息,同时缓解潜在的图像噪声与虚焦模糊问题。随后运用网络结构重新参数化技术,在不增加推断时间的情况下提升网络的检测性能。此外,引入了一种新颖的解耦式检测头,增强了模型处理灰度图像时的表现能力。

魔改工程师的博客 770

JAVA虚拟机【类文件结构】

代码编译的结果从本地机器吗转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。 1. 无关性的基石: 各种平台的虚拟机都统一使用字节码作为程序存储格式,这是平台无关的基石。同时,语言无关性也在被开发者所重视,JAVA虚拟机同样可以运行其它的程序。 2. class文件结构: Class文件是以8位字节为基础单位的二进制流,中间没有分隔符,所以整个Class文件都是程序运行的...

fanyuwgy的博客 312

【数据同化第二期】数据同化中三大理论基础之一(最小方差估计)

【数据同化第二期】深入理解数据同化及经典案例(最小方差估计)

WW、forever的博客 1596

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java虚拟机 类文件结构

Java虚拟机知识点总结 3、类文件结构 3.1 概述 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程...

烟雨gps 264

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《Java 虚拟机》类文件结构与字节码技术

JVM 类加载与字节码技术1. 类文件结构1.1 魔数1.2 版本号1.3 常量池1.4 访问标识与继承信息1.5 字段表信息1.6 方法表信息1.7 属性表集合2. 字节码指令2.3 图解方法执行流程 1. 类文件结构 我们直到,编译 .java 文件可以得到 .class 类字节码文件。 下面是一个简单的名为 HelloWorld.java 文件 public class HelloWorld { public static void main(String[] args) {

华仔仔的博客 1544

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JVM(二)类文件结构

类文件结构介绍

qq_44818304的博客 1229

java 类文件结构_深入理解Java虚拟机(类文件结构)

深入理解Java虚拟机(类文件结构)欢迎关注微信公众号:BaronTalk,获取更多精彩好文!之前在阅读 ASM 文档时,对于已编译类的结构、方法描述符、访问标志、ACC_PUBLIC、ACC_PRIVATE、各种字节码指令等等许多概念听起来都是云山雾罩、一知半解,原因就在于对类文件结构和类加载机制不够了解。直到后来细读了《深入理解 Java 虚拟机》中虚拟机执行子系统的相关内容,才建立了清晰的认...

weixin_42323064的博客 197

类文件结构

本文要解决的问题: 深入理解Java虚拟机,本篇文章从类文件结构进行分析。 我们平时在DOS界面中往往需要运行先运行javac命令,这个命令的直接结果就是产生相应的class文件,然后基于这个class文件才可以真正运行程序得到结果。自然。这是Java虚拟机的功劳,那么是不是Java虚拟机只能编译.java的源文件呢?答案是否定的。时至今日,Java虚拟机已经实现了

Miracle_shen的博客 1067

java虚拟机class类文件的结构

java虚拟机类文件的结构,首先来看一下大概框架。此文章中的u1,u2,u4,u8分别表示一个字节,两个字节,四个字节和八个字节的无符号数。 一.魔数 1.类文件的头4个字节为魔数。 2.唯一作用是确定这个文件能否能被虚拟机接受,即身份识别。 3.不用扩展名的原因是这样更加的安全。 二.版本号 1.紧接着魔数后面的4个字节,56字节是次版本号,78字节是主版本号。 三.常量池 ...

逆水行舟,不进则退 482

类文件结构&虚拟机类加载机制·虚拟机学习笔记【三】

目录class类文件结构魔数与class文件的版本(魔数:确定这个文件是否为一个能被虚拟机接受的class文件)常量池:class文件之中的资源仓库访问标志:识别一些类或者接口层次的访问信息类索引,父类索引与接口索引集合:确定这个类的继承关系字段表集合:用于描述接口或者类中声明的变量方法表集合属性表集合 class类文件结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,反过来说,类或者说接口并不一定都得定义在文件里。(比如类和接口也可以通过类加载器直接生成) 魔数与class文件的版本(魔

CSL201816080304的博客 236

【虚拟机】深入理解java虚拟机【Java Class类文件结构】

java虚拟机【Java Class类文件结构】

xjavaxx的博客 923

【Java】三、Class 类文件结构

Class 类文件结构 平台无关性 Java 是与平台无关的语言,这得益于 Java 源代码编译后生成的存储字节码的文件,即 Class 文件,以及 Java 虚拟机的实现。不仅使用 Java 编译器可以把 Java 代码编译成存储字节码的 Class 文件,使用 JRuby 等其他语言的编译器也可以把程序代码编译成 Class 文件,虚拟机并不关心 Class 的来源是什么语言,只要它符...

qwertyuiopasdfghjklzxcvbnm 527

Java虚拟机-类文件结构

主要介绍Java虚拟机的类文件结构。

weixin_56446161的博客 170

类文件结构详解

魔数(Magic Number):用于标识该文件是一个 Java 类文件,固定值为 0xCAFEBABE。版本号:包括主版本号和次版本号,用于指示生成该类文件的 Java 编译器版本。常量池:存放着各种字面量和符号引用,是类文件结构中非常重要的一部分。访问标志:用于表示类或接口的访问权限和属性。类索引、父类索引和接口索引集合:分别指向常量池中的类名、父类名和接口名。字段表集合:描述类或接口中声明的变量。方法表集合:描述类或接口中声明的方法。属性表集合:用于存储额外的元数据信息。

SOS5418818845的博客 1101
上一篇: Java虚拟机学习(二)-内存管理
下一篇: Java虚拟机学习(四)-类的加载机制
Coding-ls
博客等级 码龄11年 41粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值