首页
学习
活动
专区
圈层
工具
发布

Java字节码 顶

Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。每一个Java字节码指令是一个byte数字,并且有一个对应的助记符。...Java虚拟机常用指令 常量入栈指令 常量入栈指令的功能是将常数压入操作数栈,根据数据类型和入栈内容的不同,又可以分为const系列、push系列和ldc指令。...我们来看这样一段java代码 public void print(char[] cs,int[] s) { int i,j,k,x; x = 99; s[0] = 77; } 编译后字节码如下...这种处理方式有两个特点 一方面可以减少实际的数据类型,如果为short和byte都准备一套指令,那么指令的数量就会大增,而虚拟机目前的设计上,只愿意使用一个字节表示指令,因此指令总数不能超过256个,为了节省指令资源...对象/数组操作指令 Java是面向对象的程序设计语言,虚拟机平台从字节码层面就对面向对象做了深层次的支持。

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java字节码简介

    中,而jvm要运行java代码首先要做的就是加载字节码,也就是.java文件经过编译变成的.class文件。...jvm运行的指令就是.class字节码。所以通过学习字节码的规范和规则能提升我们对代码执行过程的理解。 这里恶补一下字节码相关的基础知识。 我们打开.class文件,发现字节码都是十六进制的编码。...2.版本号:因为java有不同的版本,所以在java字节码中也有标记。0000 0034两个字节就表示java1.8版本。...linueNumberTable表示源代码与字节码命令的对应关系,和debug模式有关系。LocalVariableTable表示本地变量表,用来申明方法中的变量。..." 总结:java通过编译将源文件编译为字节码文件,其字节码中方法的执行和常量池和代码区有很大的联系。

    1.5K10

    Java字节码-Java快速进阶教程

    Java字节码的特征 Java 字节码有两个最重要的特征,如下所示: 字节码独立于处理器,即Java程序可以在任何处理器架构上执行。 它不依赖于Windows,Linux和Mac OS等操作系统。...字节码使 java 程序在不同的硬件(处理器)和操作系统平台上可移植。 唯一要求就是必须在其上安装 Java 虚拟机。 2. 第二个优点是,由于JVM对字节码文件的执行的控制,它增加了代码的安全性。...字节码与机器码的区别 字节码和机器码之间的主要区别在于字节码只能在JVM上运行,而机器码是一组机器语言的指令,可以直接由CPU运行。....java和.class的区别 Java 源代码文件(扩展名为.java)被编译为字节码(具有.class扩展名),然后由名为 JVM 的 Java 处理器解释和执行。 关键点: 1....字节码在不同的平台上保持不变,例如 Windows、Linux 和 Mac OS。

    40810

    Java字节码增强探秘

    大家好,美美今天给大家推荐一篇Java字节码增强技术的文章,在实际工作中有很多应用场景。 美团点评技术团队平日积累了很多这类技术原理解析和实战类的文章,未来将会选取精华,陆续发布。 1....图1 Java运行示意图 对于开发人员,了解字节码可以更准确、直观地理解Java语言中更深层次的东西,比如通过字节码,可以很直观地看到Volatile关键字如何在字节码上生效。...本文重点着眼于字节码增强技术,从字节码开始逐层向上,由JVM字节码操作集合到Java中操作字节码的框架,再到我们熟悉的各类框架原理及应用,也都会一一进行介绍。...MyMethodVisitor继续读取字节码指令,每当ASM访问到无参数指令时,都会调用MyMethodVisitor中的visitInsn方法。...我们需要做的就是从Pool中获取到相应的CtClass对象和其中的方法,然后执行method.insertBefore和insertAfter方法,参数为要插入的Java代码,再以字符串的形式传入即可,

    1.2K20

    Java 字节码操作示例

    Java 动态性的两种常见实现方式 (1)字节码操作 (2)反射 运行时操作字节码可以让我们实现如下功能: (1)动态生成新的类 (2)动态改变某个类的结构(添加/删除/修改 新的属性/方法...) 优势 (1)比反射开销小,性能高 (2)Javassist 性能高于反射,低于ASM 常见的字节码操作类库 BCEL Byte Code Engineering Library(BCEL...ASM 是一个轻量级 Java 字节码操作框架,直接涉及到 JVM 底层的操作和指令 前两个效率最高,学起来也较难 CGLIB(Code Generation Library) 是一个强大的...Javassist 是一个开源的分析、编辑和创建 Java 字节码的类库。性能较 ASM 差,跟 cglib 差不多,但是使用简单。很多开源框架都在使用它。...这就是我们生成的字节码文件内容。

    1.1K10

    Java字节码与反射机制

    字节码(Byte Code)是Java语言跨平台特性的重要保障,也是反射机制的重要基础。...通过反射机制,我们不仅能看到一个类的属性和方法,还能在一个类里调用另外一个类的方法,但前提是我们得有相关类的字节码文件(也就是.class文件)。...1 字节码和.class文件 当我们编写好以.java为扩展名的文件后,如果它能被运行(比如其中包含main函数),那么我们能通过点击MyEclipse里的运行按钮运行这个.java文件。...但此时,MyEclipse向我们隐藏了一个关键步骤:它首先是把.java文件编译成扩展名是.class的字节码文件,随后,Java的虚拟机(JVM)是在当前的操作系统上(比如window 10)上运行这个...有些偏题了,回到反射这个话题上,只要我们能得到.class这个字节码文件,那么通过反射机制我们不仅能看到这个.class所对应java文件里的属性方法等信息,而且还能调用它所对应java文件里的方法。

    91610

    Java 字节码操作框架——ASM

    大家好我是小悦,之前的文章我们介绍了字节码的基础知识,今天我们将介绍字节码相关的应用场景,首先要介绍的是如何对字节码做解析和修改,本文将会详细给大家介绍一个工业级字节码操作框架 ASM。...ASM 当我们需要对一个 class 文件做修改时,我们可以选择自己解析这个class 文件,在符合 Java 字节码规范的前提下进行字节码改造。...,例如 cglib,、mybatis、fastjson 其它字节码操作框架在操作字节码的过程中生成大量的中间类和对象,耗费大量的内存且运行缓慢,ASM 使用了访问者(Visitor)设计模式,避免了创建和消耗大量的中间变量...DOM 解析方式的如下图所示: ASM 核心类介绍 ClassReader 它是字节码读取和分析引擎,帮我们做了最苦最累的解析二进制的 class 文件字节码的活。.../MyMain2.class"), bytesModified); 同样使用 javap 查看 MyMain2 的字节码,可以看到 abc 字段和 xyz 方法已经被移除,只剩下 def 字段和 foo

    80520

    Java字节码深度知多少?

    Java真的是长盛不衰,拥有顽强的生命力。其中,字节码机制功不可没。字节码,就像是 Linux 的 ELF。有了它,JVM直接摇身一变,变成了类似操作系统的东西。...这部分内容枯燥乏味,关于它的细节在Java的官方都能非常容易的找到。 如下图,展示了一个简单方法的字节码描述,我们可以看到真正的执行指令在整个文件结构中的具体位置。...使用实例对象直接调用,和强制转化成接口调用,所调用的字节码指令分别是 invokevirtual 和invokeinterface,它们是不同的。...但是我们可以使用一些外部的字节码修改工具,比如ASM,来生成一些带有这个指令的字节码,这通常能够完成一些非常酷的功能,比如完成一门弱类型检查的JVM-Base语言。...END 本文从Java字节码的顶层结构介绍开始,通过一个实际代码,了解了类加载以后,在JVM内存里的表现形式,并了解了jhsdb对Java进程的观测方式。

    28910

    java字节码byte code简介

    简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译成为字节码,而字节码又被加载进JVM中运行。...字节码怎么生成,怎么查看字节码,隐藏在Byte Code背后的秘密是什么呢?快跟小师妹一起来看看吧。 Byte Code的作用 小师妹:F师兄,为什么Java需要字节码呢?...小师妹你这个想法很好,这种实现有个专业的说法叫做:Java processor。 Java processor就是用硬件来实现的JVM。因此字节码可以直接在Java processor中运行。...为了提升java在手机端的执行速度。 但是这样做其实也是有缺点的,后面我们会讲到,java字节码中的指令非常非常多。所以如果用硬件来实现的话,就会非常非常复杂。...一般来说Java processor不会实现全部的字节码中的功能,只会提供部分的实现。 查看Byte Code字节码 小师妹:F师兄,那使用javac编译过后的class文件跟字节码有什么关系呢?

    1.7K31

    从java文件到字节码

    本文来说一下,我们开发好的.java文件是源码文件,并不能交给机器直接执行,需要将其变成字节码甚至是机器码文件。那么静态编译器是如何把源码转化成字节码的呢? 下图为.java源码转化为字节码的过程。...当语义分析完成之后,即可以生成字节码。 字节码必须通过类加载过程加载到JVM环境中后,才可以执行。...字节码执行的三种模式 解释执行 JIT编译执行 JIT编译与解释混合执行(主流JVM默认模式) 何为JIT编译?...JIT的作用就是将Java字节码动态低编译成可以直接发送给处理器指令执行的机器码。大致流程如下: ? 注意:解释执行与编译执行在线上环境微妙的辩证关系。...如果是热机状态,在正常情况下一半的机器可以勉强承载流量,但是由于刚刚启动的JVM均是解释执行,还没有进行热点代码统计和JIT动态编译,导致机器启动之后,当前1/2发布成功的服务器马上全军覆没,此次故障说明了

    1.3K20

    Java 进阶之字节码剖析

    内功有不少帮助,记得得文末点赞支持一下哦 ^_^ Java 系列大纲如下: 本篇我们先来学习下字节码 ,毕竟这是 Java 能跨平台的根本原因,而且通过了解字节码也可以彻底揭开 JVM 运行程序的秘密...来说,则首先由编译器将源文件编译成字节码,再在运行时由虚拟机(JVM)解释成机器指令来执行,我们可以看下下图 也就是说 Java 的跨平台其实是通过先生成字节码,再由针对各个平台实现的 JVM 来解释执行实现的...,也就是说在程序执行前方法就已经被绑定,java 当中的方法只有final、static、private和构造方法是前期绑定的。...Java 字节码技术简介 注意线程中还有一个「PC 程序计数器」,是每个线程独有的,记录着当前线程所执行的字节码的行号指示器,也就是指向下一条指令的地址,也就是将执行的指令代码。...后可以看到其字节码如下 字节码是给 JVM 看的,所以我们需要将其翻译成人能看懂的代码,好在 JDK 提供了反解析工具 javap ,可以根据字节码反解析出 code 区(汇编指令)、本地变量表、异常表和代码行偏移量映射表

    1.2K10

    Java 类机制(4)---- 字节码和方法执行

    前言 ​ 大家好,不知不觉已经到 9 月份了,本篇文章是 Java 类机制的最后一篇,我们来一起探讨一下关于 Java 的字节码和方法调用。...,上面我们已经了解过了关于字节码的概念,我们可以把它看成 Java 语言的 “汇编指令”,每一个字节码都有一个一个字节的数据值与其对应,相当于一个字节数据到字节码的映射表。...局部变量表 局部变量表是一组变量值储存空间,方法参数和方法内定义的变量的值都储存在局部变量表中,在 Java 编译器编译 Java 文件成 Class 文件时,就在该方法的 Code 额外属性表中确定了该方法所需要分配的局部变量表的最大容量...字节码 我们再之前已经多次接触过了字节码了,也知道了字节码的概念和意义,这里给出 Java 虚拟机字节码指令对照表以供使用时参考:字节码指令对照。...首先执行偏移地址为 0 的字节码,bipush 指令的作用是将单个字节的整型常量(-128~127)推入操作数栈顶,这个指令后跟随一个参数,指名推送的常量值,这里是 100。

    69520

    从JAVA字节码到方法运行

    是利用Java运算符顺序将式子拆解,然后一步步运算,还是其他什么办法?在思索一会儿之后,决定还是通过字节码指令来看看这两行代码是怎么运行的。...将两行代码拷贝到Test.java中,执行以下指令输出字节码: javac Test.java javap -c Test.class 字节码输出结果如下: 如果是之前对字节码没有了解的话,可以去搜一下字节码指令的资料...,或者去《深入理解Java虚拟机》这本书去找附录b 字节码指令表。...局部变量表 局部变量表是用于存放方法参数和方法局部变量的空间,里面由一个个Slot组成。代码在编译成字节码文件的时候,就可以确定局部变量表的大小。...除了64位的long和double类型占用2个slot外,其他的数据类型占用1个slot。 操作数栈 在方法执行过程中,通过各种字节码指令往操作数栈中写入和读取数据,即入栈和出栈。

    79510

    第16次文章:Java字节码

    在上一期讲解java的动态性的时候,我们主要提到了java中的反射机制,可以在java代码运行的时候,改变类的结构,属性等信息,而这一节我们通过另一种实现方式来讲解java的动态性,主要就是java的字节码操作...所以说,我们的java虚拟机执行的是字节码文件。并且,不论该字节码文件来自于哪里,也不论字节码文件使用的是哪一种编辑器,只要其符合java虚拟机的要求,都可以被执行。...2、简介 (1)编译器将java源码编译成符合java虚拟机规范的字节码文件 (2)字节码内部不包含任何分隔符区分段落 (3)一组8位字节单位的字节流组成了一个完整的字节码文件 3、操作字节码的几个功能...(2)ASM:是一个轻量级java字节码操作框架,直接涉及到JVM底层的操作和指令。...(4)javassist:是一个开源的分析、编辑和创建java字节码的类库。性能较ASM差,跟CGLIB差不多,但是使用简单。很多开源框架都在使用它。主要在源代码级别上进行工作。

    75560

    了解一下Java字节码

    Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。...执行引擎运行的所有字节码指令都只针对当前栈帧进行操作,在概念模型上,典型的栈帧结构 ? 1.1 局部变量表 是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。...我们知道Class文件的常量池中存有大量的符号引用,字节码中的方法调用指令就以常量池中指向方法的符号引用作为参数。...而在Java虚拟机中,处理异常(catch语句)不是由字节码指令来实现的,而是采用异常表来完成的。...3 分析PageClass的字节码命令 以 PageClass.calculateOffset()为例来分析,足够简单 3.1 字节码和变量表 Code { 0 aload_0 1 getfield

    1.7K30

    基于字节码的Java代码审计

    基于字节码的Java代码审计 之前看了基于字节码的Java代码审计工具的实现,最近终于有空可以好好看一下其是如何实现的了。本文并不会从代码出发,而是试图从字节码角度分析其可行性。...JVM简介 要了解字节码首先需要对JVM有所了解,Java虚拟机并不关心Java语言,它只和字节码相关联,这一方面使得Java程序可以Run AnyWhere,另一方面也为其运行其他语言提供了支持 --...只要编译成为符合字节码规范的内容,均可以在Java虚拟机中运行。...实现 上文已经找到了字节码代码审计的关键,那接下来如何通过代码去实现呢?首先第一个问题,如何将Class文件解析成字节码指令的形式。...这里就不得不提一下ASM了,作为字节码增强技术,它可以动态修改字节码或者是遍历类的结构,ASM此处就不进行深入展开了,我们单单看一下遍历类结构这一点,它会按照一定顺序逐语句对字节码进行解析,当解析到函数时我们就可以自定义一个局部变量表以及操作数栈来进行模拟操作

    98520
    领券