字节,字节码,字节码文件,字节码指令

Java字节码(.class文件)结构与指令详解 本文还有配套的精品资源,点击获取 简介:Java字节码是Java虚拟机运行时执行的中间语言,每个 .class 文件包含了编译后的指令和类信息。本文档详细解析了 .class 文件的结构、常量池、类信息、字段表、方法表和属性表等关键组成部分,并对字节码指令集进行了分类说明,包括数据操作、操作数栈管理、控制流、方法调用和返回以及异常处理指令。文档可... 阅读详情

字节

由于电路实现上的原因,计算机的计数方式为二进制,即由0和1组成。二进制与十进制的对应关系如下。

二进制十进制
00
11
102
113
1004
1015

二进制的计算规则是2进1。二进制转十进制计算公式为

dec = 2^(n-1)+x*2^(n-2)+...+x*2^0

比如二进制1001的十进制为2^3+1=9

对于计算机而言,一个0或者1表示1位。比如:101就是3位,英文为3-bit

8-bit组成一个字节,英文为1-byte

那么1-byte能表达多少数呢?

即0000 0000 ~ 1111 1111,转化为10进制即0-255共256个数。

在计算机领域,这256个数可以有多种不同的表示。在ASCII编码上,每个数代表一个符号;在整数领域。代表0-255共256个整数。

为了方便的表示字节,一般采用16进制的形式。16进制与二进制和十进制的对应关系如下。

二进制十进制16进制
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199
101010a
101111b
110012c
110113d
111014e
111115f

使用16进制表达一个字节是为了方便的转换2进制,比如:

0xff可以很快算出二进制为1111 1111

0xab等于1010 1011

总而言之,1个字节就是8个位,一般用16进制表示。计算范围为0~256

字节码

字节码是采用字节为单位的编码。以Java虚拟机读取的字节码为例。假设有一个Java程序为输出Hello world

public class HelloWorld
{
    /**
     * The old standby!
     * @param args The parameters are ignored.
     */
    public static void main(String... args) {
        System.out.println("Hello World!");
    }
}

经过javac生成的.class文件为01组成的文件,使用vs code的hexeditor插件打开后可看到

在这里插入图片描述

上图中紧挨着的2个数字或者字母就是用16进制表达的1个字节。这些字节根据Java虚拟机规范的要求在不同的位置表达不同的意思。针对这些字节的编码被称为字节码。

字节码文件

由javac生成的.class文件被称为字节码文件。

字节码文件中表达含义的编码和内容必须按照虚拟机规范。

在这里插入图片描述

比如,文件的头4个字节代表magic,至于什么是magic后续解释。

字节码指令

前面已经讲过JVM是纯软件实现的栈式虚拟机,而栈式虚拟机为了执行相关的运算或者访问内存的操作则会提供一些指令。由于虚拟机时纯软件模拟的仿真计算机,那么这些指令可以脱离平台指令实现。这就是为什么Java总说是平台无关的。

而这些由虚拟机提供的指令被称为字节码指令。其含义是指令由字节组成。上面已经说过了,1个字节可以表达0-255共256个数。Java虚拟机规范利用这256个数的其中一部分表示栈式虚拟机的操作 。

比如,0x1A表示将第一个int型本地变量推送至栈顶。

在字节码文件中有一部分就是表示这些指令。

在这里插入图片描述

这3个字节分别表示下面3条指令。

iload_0
iconst_2
if_icmpge

上述指令可由javap工具分析Helloworld.class文件查看

使用字节码的好处

计算机一般是一个字节一个字节的读取数据,使用字节进行编码符合计算机的读取数据的流程。不管是本机还是网络都很方便。除此之外,使用16进制解码工具查看也很方便。第三,使用通用的字节码指令针对的是纯软件的虚拟机,其内容与平台无关。因此使用字节码的程序很方便移植,甚至可以说不需要任何操作,直接放在有Java虚拟机的机器上运行即可,实现了一次编译,处处运行。

从零搭建ROS机械臂仿真环境:Ubuntu 20.04+Noetic下配置睿尔曼RM65的完整流程 本文详细介绍了在Ubuntu 20.04系统中,基于ROS Noetic搭建睿尔曼RM65机械臂的完整仿真环境。从环境准备、工作空间创建到MoveIt!配置与Gazebo仿真环境集成,提供了完整的流程和优化建议,帮助开发者高效实现机械臂仿真与调试。 阅读详情

相关推荐

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 334

字节码详解

字节码详解 前言 万事开头难 字节码相关内容往深了挖其实东西很多,我就按照自己学习的一个心理历程去分享一下这块儿的内容,起个抛砖引玉的作用,很多地方没有特别深入的研究,有待大家补充。 什么是字节码 Java作为一款“一次编译,到处运行”的编程语言,跨平台靠的是JVM实现对不同操作系统API的支持,而一次编译指的就是class字节码;即我们编写好的.java文件,通过编译器编译成.class文件,JVM负责加载解释字节码文件,并生成系统可识别的代码执行(具体解析本次不做深入研究). Class文件 The c

laokerr的博客 1万+

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 246

java字节码

Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。

zhangjunli的博客 2555

Vue2项目实战:vue2-org-tree实现动态组织架构图

本文详细介绍了如何在Vue2项目中使用vue2-org-tree组件实现动态、可交互的组织架构图。内容涵盖从快速安装、基础渲染到核心功能实战,包括水平布局、节点展开折叠、响应式数据绑定、深度自定义节点内容以及事件处理。同时提供了性能优化、样式覆盖等避坑指南,并通过一个完整的企业级Demo展示了如何打造功能丰富的架构图,助力高效开发后台管理系统。

weixin_28040125的博客 522

BACnet/IP BBMD跨网段通信深度解析与最佳实践

本文介绍了在BACnet/IP网络中通过BBMD实现跨子网设备通信的关键配置方法。重点阐述了广播分发表(BDT)中掩码设置的重要性:使用子网掩码(255.255.255.0)会导致路由器拦截广播消息,而必须采用主机掩码(255.255.255.255)才能启用单播隧道机制,使BACnet广播消息封装为可路由的单播UDP包。文章详细说明了BDT条目的正确配置格式、BIP广播地址的作用,并提供了验证步骤,强调在跨网段场景中,正确设置掩码是确保设备发现和通信成功的关键因素。

零一架构师的专栏 1536

【Java】一篇文章让你了解字节码是什么

1. 先来说一下什么是机械码 机械码就是cpu能够直接读取并运行的代码,它是用**二进制编码**表示的,也叫做机械指令码。在编写这种代码时,需要**主动地去控制cpu**的一切资源,而且需要记住全部指令所做的动作,十分的麻烦,当然这也是计算机的底层代码,处理开发计算机的专业人员之外,已经很少人去研究了。 2.字节码 字节码是一种**中间状态**的**二进制文件**,是由源码编译过来的,可读性没有源码的高。cpu并不能直接读取字节码,在java中,字节码**需要经过JVM转译**成机械码之后,cpu

程序员徐小白的博客 3820

从‘能看’到‘好看’:用Seaborn调色板让你的热力图在PPT和论文中脱颖而出

本文探讨如何利用Seaborn调色板提升热力图在PPT和论文中的视觉效果,从视觉心理学和场景适配角度出发,提供学术与商业场景下的配色方案和实战代码。通过优化色彩选择,使数据可视化更具专业性和吸引力,帮助读者快速理解关键信息。

weixin_30755393的博客 245

字节码详解 先码着以后看

一文让你明白Java字节码 也许你写了无数行的代码,也许你能非常溜的使用高级语言,但是你未必了解那些高级语言的执行过程。例如大行其道的Java。Java号称是一门“一次编译到处运行”的语言,但是我们对这句话的理解深...

大乐哥的博客 4153

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4728

拼团系统设计-人群标签的设计与思考

最近在学习一个拼团项目中涉及到的人群模块的设计,写下一些实现与思考。

wywcool的博客 971

字节码

字节码 文章目录字节码一、字节码组成部分(一)反编译(二)字节码整体结构1.概述(三)字节码文件具体分析1. 魔数(magic)2.版本号(version)3.常量池(constant pool):4.访问标志信息(Access Flags)5.类名称(class Name)6.父类名称(super Class)7.接口(interface)8.字段表(Fields)9.方法表(Methods)补...

GJXAIOU 的 优快云 博客 1654

【GPFS专题5】---IBM Spectrum Scale (GPFS) 日常运维命令大全

掌握这些命令是有效管理 GPFS 集群的基础。实际生产环境中,建议结合自动化脚本和监控系统(如 IBM Storage Insights)实现高效运维。定期备份配置、监控性能指标,并进行灾备演练,是保障数据安全和系统稳定的关键。

jundao1997的专栏 841

字节码文件及字节码指令

我记得开始学习Java的第一堂课时,我的大学老师是这样说的,Java号称是“一次编写,到处运行”,为什么有底气这样说,是因为Java程序并不是直接运行在操作系统上的,它通过不同操作系统上的Java虚拟机实现了“到处运行”的美好愿景。而且我的老师当时还说过,不止Java程序可以在Java虚拟机上运行,其他的程序也同样可以在Java虚拟机上运行。Java虚拟机并不认识具体的某种编程语言,而是编程语言要...

Earl_yuan的专栏 5013

深度学习工具包 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")

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

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

类文件结构和字节码指令

1、类型转换指令可以将两种不同的数值类型相互转换。这些转换操作一般用于实现用户代码中的显式类型转换操作,或者用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题。1、Java是面向对象的程序设计语言。虚拟机平台从字节码层面就对面向对象做了深层次的支持。有一系列指令专门用于对象操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。1、操作数栈管理指令:如同操作一个普通数据结构中的堆栈那样,JVM提供的操作数栈管理指令,可以用于直接操作操作数栈的指令。pop、pop2。

xq514863的博客 862

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深入理解Dalvik字节码指令及Smali文件

今天来介绍有关Davilk虚拟机相关的知识,首先便是介绍我们最关心的Davilk字节码相关知识,进而深入到Android逆向领域.之所以写这篇文章,是因为有姑娘要学习这,再加上网上的许多资料太过零散和片面,

Floating Cat 3万+

[6-01-01].第05节:初识字节码文件 - 解读字节码文件指令

【代码】[6-01-01].第05节:初识字节码文件 - 解读字节码文件指令。

F-T-er 1008

Class文件结构及字节码指令

JVM 的无关性 与平台无关性是建立在操作系统上,虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机,它们都可以载入和执行字节码,从而实现程序的“一次编写,到处运行” 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础。Java 虚拟机不和包括 Java 在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机指令集和符号表以及若干其他辅助信息。 Class 类文件

bug_come的博客 939

JVM的字节码指令(一步步读懂.class字节码文件的操作指令)

刚上大一那会儿就是随便一个编译器写.java后缀文件,然后通过命令行JavaC编译那个.java后缀的文件生成.class文件,然后直接java XXXX.class文件就可以运行自己的Java程序。 所以知道,Java 程序执行分两个阶段,编译阶段和运行阶段: JavaC :这个命令就会启动Java的编译器去对Java后缀文件进行编译,生成字节码,也就是.class文件,这个文件是十六进制格式的...

whiteBearClimb的博客 1249

类文件结构及字节码指令

文章目录一、Class类文件的结构1.1、魔数与Class文件的版本1.2、常量池1.3、访问标志1.4、类索引、父类索引与接口索引集合1.5、字段表集合1.6、方法表集合1.7、属性表集合二、字节码指令2.1、加载和存储指令2.2、运算指令2.3、类型转换指令2.4、对象创建及访问指令2.5、操作数栈管理指令2.6、控制转移指令2.7、方法调用指令2.8、方法返回指令2.9、异常处理指令2.10、同步指令 一、Class类文件的结构 Class文件时一组以8位字节为基础的二进制流,各个数据项目严格按照顺序

rockvine的博客 386

剖析 Java 的类文件结构:字节码指令详解

Java 类文件是一种二进制文件,它遵循严格的格式规范。了解字节码指令有助于开发自定义编译器,将其他编程语言编译成 Java 字节码,实现跨语言的互操作性。Java 类文件结构和字节码指令是 Java 虚拟机的核心组成部分,深入理解它们对于掌握 Java 语言的运行机制和进行代码优化、安全审计等工作具有重要意义。通过本文的介绍,我们了解了 Java 类文件的基本结构、字节码指令的分类和执行过程,以及常见字节码指令的详细解释和应用场景。在实际开发中,我们可以使用javap。

潜意识Java的博客 1250

Java类文件中的字节码指令

目录字节码指令使用javap工具 注意:本章内容紧接上篇文章 通过HelloWorld读懂Java类(.class)文件结构 字节码指令 通过读取HelloWorld.class文件的内容,我们得知方法信息部分包含字节码指令。 如:<init>方法部分的字节码指令为2A B7 00 01 B1 其中: 2A代表aload_0,即加载slot 0的局部变量,即this,作为下面invokespecial的参数 B7代表invokespecial,即预备调用构造方法 00 01代表常量池中的第一项

zhangyuanshuai的博客 474

java bytecode.class_Java class文件,字节码,字节码指令

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明无关性Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:“无符号数”和“表”。·无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可...

weixin_33330157的博客 499

JVM-类文件结构与字节码指令

类文件结构 字节码指令 1、类文件结构 一个简单的 HelloWorld.java // 二进制字节码(类基本信息,常量池,类方法定义,包含了虚拟机指令) public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } } 执行 javac -parameters -d . HellowWorld.java 编译为 HelloWo

Eistert 243

class 类文件结构与字节码指令

任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,Class文件实际上它并不一定以磁盘文件的形式存在。

weixin_43519048的博客 1861

JVM(类文件结构和字节码指令)

一.类文件结构 1.概述 各种不同的平台的虚拟机与所有平台都统一使用的程序存储格式 — 字节码是实现平台无关性的基石 所以我们有必要要了解class文件的文件结构是怎样的。 2.Class文件结构 class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件之中,中间没有添加任何间隔符,这使得整个class文件中存储的内容几乎全部是程序运行的必要数据,没...

kevin的博客 354

Class文件结构和字节码指令集

JVM规范所有的 JVM 全部遵守 Java 虚拟机规范,也就是说所有的 JVM 环境都是一样的, 这样一来字节码文件可以在各种 JVM 上进行。想要让一个 Java 程序正确地运行在 JVM 中,Java 源码就是必须要被编译为符合 JVM 规范的字节码。前端编译器的主要任务就是负责将符合 Java 语法规范的 Java 代码转换为符合 JVM 规范的字节码文件。javac 是一种能够将 Java 源码编译为字节码的前端编译器。javac 编译器在将 Java 源码编译为一个有效的字节码文件过程中经历了4

main_Scanner01的博客 880
上一篇: 配置openjdk调试环境
下一篇: 栈是如此重要——C函数栈
阿达King哥
博客等级 码龄23年 387粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值