精华内容
下载资源
问答
  • Java字节码转换一定要保持一致
    千次阅读
    2019-12-03 15:31:40
     public static void main(String[] args)throws Exception {
            String msg="汉字";
            byte[] bytes=msg.getBytes("utf-8");
    
            String ms=new String(bytes,0,bytes.length,"utf-8");
            System.out.print(ms);
        }
    

    源数据是utf-8那么你接收后,依然要按原格式utf-8进行转换才可以。

    更多相关内容
  • Retrotranslator的网站位于...通过该工具进行转换,可以完美的运行在java14环境下面。当 然,该工具也不是完全可以兼容jdk15的新功能,在其网站上面也谈及了不能够实现的部分,可以作为参考。
  • JVML的延续,它将JIT将Java字节码转换为Lua字节码,而不是进行解释。 由ds84182提供的原始代码库。 要求 需要Ant来构建JVML的运行时库(cc_rt.jar) 要编译Java源文件并确保针对CCLib运行时进行正确的检查,而不是...
  • 字节码,与 Java 100% 兼容,允许将任何 Java SE 应用程序、库或 Java 小程序编译成 WebAssembly/JavaScript 应用程序。 最新版本: 最新运行时链接: https://cjrtnc.leaningtech.com/2.2/loader.js : ...
  • 主要给大家介绍了关于java字节码框架ASM如何操作字节码的相关资料,文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
  • 一个将Python代码转换Java字节码的编译器。 这是实验代码。 如果破裂,您将保留所有闪亮的碎片。 它能做什么: 提供一个API,可让您以编程方式创建Java类文件。 将Python 3.4源文件编译为Java类文件,使您...
  • 不需要下载源码编译执行,可以直接运行jar文件 运行命令:java -jar jitwatch.jar
  • Java 字节码和 Dalvik 字节码概述源代码样例Java 字节码Dalvik 字节码总结 概述   本篇博客将讲述 Java 源代码到字节码字节码转汇编,以及 Android 中 Java 源代码转 Dalvik 字节码,Dalvik 字节码转 smali 汇编...

    概述

      本篇博客将讲述 Java 源代码到字节码,字节码转汇编,以及 Android 中 Java 源代码转 Dalvik 字节码,Dalvik 字节码转 smali 汇编的一些操作。主要是熟悉一些基本工具的使用,这里做个总结。

    源代码样例

      这里提供一份最简单的源代码示例,示例在于精而不在于复杂,当然肯定越简单越好,将下面的代码保存为HelloWorld.java文件,后面转 Java 字节码和 Dalvik 字节码都用该示例。

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

    Java 字节码

       Java 源代码转字节码,使用 jdk 自带命令行工具javac,如下命令所示。执行后会在当前目录下生成 HelloWorld.class文件,这里生成 .class 文件就是 Java 字节码,可以交由 Java 虚拟机(JVM)执行,操作命令如下java HelloWorld

    javac HelloWorld.java
    

      如果直接打开字节码文件,中间会有一些乱码,人无法直接阅读,所以这里借用 jdk 自带命令行工具javap执行反汇编,将字节码转为汇编代码。如下命令所示,这里操作的是HelloWorld.class,命令行中是否加上 .class 后缀都可以。

    javap -c HelloWorld
    

      如下代码所示,是上面执行后的输出结果,这里注意该命令并不会将汇编代码写入到本地文件中,如果需要写入到指定文件请借助重定向符号,操作命令如下javap -c HelloWorld > HelloWorld

    Compiled from "HelloWorld.java"
    public class HelloWorld {
      public HelloWorld();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: return
    
      public static void main(java.lang.String[]);
        Code:
           0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
           3: ldc           #3                  // String HelloWorld!
           5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
           8: return
    }
    

    Dalvik 字节码

      Dalvik 虚拟机(DVM)是 Google 专门用来运行 Android 程序的虚拟机,因此 Android 程序上的 Java 代码最终都会被编码为 Dalvik 字节码,并在经过一些处理后打包为 DEX 可执行文件,此时就可以由 DVM 解释运行。在 Android 4.4 版本后又引入了 ART(Android RunTime)虚拟机,ART 完全支持兼容 DEX ,因此学习 Dalvik 是一个基础 。
      Java 源代码转 DEX。首先我们需要得到 Java 源代码对应的字节码文件,使用上面的命令即可,然后再使用 sdk 提供的工具 dx ,该工具位于 sdk 的 /build-tools 目录中。

    dx --dex --output=HelloWorld.dex HelloWorld.class
    

      DEX 可执行文件转 smali 汇编。这里使用 baksmali.jar 工具,位于 sdk 的 /tools/lib 中。

    baksmali.jar HelloWorld.dex
    

      执行该命令后,会在当前目录下生成 out 文件夹,里面会有HelloWorld.smali文件。该文件内容如下。

    .class public LHelloWorld;
    .super Ljava/lang/Object;
    .source "HelloWorld.java"
    
    
    # direct methods
    .method public constructor <init>()V
        .registers 1
    
        .prologue
        .line 1
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        return-void
    .end method
    
    .method public static main([Ljava/lang/String;)V
        .registers 3
    
        .prologue
        .line 4
        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
    
        const-string v1, "HelloWorld!"
    
        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
    
        .line 5
        return-void
    .end method
    
    

    总结

    不忘初心,砥砺前行!

    展开全文
  • JWebAssembly是编译器的Java字节码。 它使用Java类文件作为输入。 它可以编译任何可编译为Java字节码的语言,例如Clojure,Groovy,JRuby,Jython,Kotlin和Scala。 作为输出,它生成二进制格式(.wasm文件)或文本...
  • 输入指令 javap -c -v 后面加上字节码路径 转换后的汇编语言

    输入指令 javap -c -v  后面加上字节码路径

    转换后的汇编语言

    展开全文
  • 执行引擎以指令为单位读取Java字节码。它就像一个CPU一样,一条一条地执行机器指令。每个字节码指令都由一个1字节的操作码和附加的操作数组成。执行引擎取得一个操作码,然后根据操作数来执行任务,完成后就继续执行...

    通过类装载器装载的,被分配到JVM的运行时数据区的字节码会被执行引擎执行。执行引擎以指令为单位读取Java字节码。它就像一个CPU一样,一条一条地执行机器指令。每个字节码指令都由一个1字节的操作码和附加的操作数组成。执行引擎取得一个操作码,然后根据操作数来执行任务,完成后就继续执行下一条操作码。

    不过Java字节码是用一种人类可以读懂的语言编写的,而不是用机器可以直接执行的语言。因此,执行引擎必须把字节码转换成可以直接被JVM执行的语言。字节码可以通过以下两种方式转换成合适的语言。

    解释器:一条一条地读取,解释并且执行字节码指令。因为它一条一条地解释和执行指令,所以它可以很快地解释字节码,但是执行起来会比较慢。这是解释执行的语言的一个缺点。字节码这种“语言”基本来说是解释执行的。

    即时(Just-In-Time)编译器:即时编译器被引入用来弥补解释器的缺点。执行引擎首先按照解释执行的方式来执行,然后在合适的时候,即时编译器把整段字节码编译成本地代码。然后,执行引擎就没有必要再去解释执行方法了,它可以直接通过本地代码去执行它。执行本地代码比一条一条进行解释执行的速度快很多。编译后的代码可以执行的很快,因为本地代码是保存在缓存里的。

    不过,用JIT编译器来编译代码所花的时间要比用解释器去一条条解释执行花的时间要多。因此,如果代码只被执行一次的话,那么最好还是解释执行而不是编译后再执行。因此,内置了JIT编译器的JVM都会检查方法的执行频率,如果一个方法的执行频率超过一个特定的值的话,那么这个方法就会被编译成本地代码。

    7031ae23e230ae8f5131b8b59d334107.png

    图 7:Java编译器和JIT编译器

    JVM规范没有定义执行引擎该如何去执行。因此,JVM的提供者通过使用不同的技术以及不同类型的JIT编译器来提高执行引擎的效率。

    大部分的JIT编译器都是按照下图的方式来执行的:

    4a219752d6ad5616062cc262daeec002.png

    图 8: JIT编译器

    JIT编译器把字节码转换成一个中间层表达式,一种中间层的表示方式,来进行优化,然后再把这种表示转换成本地代码。

    Oracle Hotspot VM使用一种叫做热点编译器的JIT编译器。它之所以被称作”热点“是因为热点编译器通过分析找到最需要编译的“热点”代码,然后把热点代码编译成本地代码。如果已经被编译成本地代码的字节码不再被频繁调用了,换句话说,这个方法不再是热点了,那么Hotspot VM会把编译过的本地代码从cache里移除,并且重新按照解释的方式来执行它。Hotspot VM分为Server VM和Client VM两种,这两种VM使用不同的JIT编译器。

    fd4125b58addc2ada3ea3911caf6254a.png

    Figure 9: Hotspot Client VM and Server VM.

    Client VM 和Server VM使用完全相同的运行时,不过如上图所示,它们所使用的JIT编译器是不同的。Server VM用的是更高级的动态优化编译器,这个编译器使用了更加复杂并且更多种类的性能优化技术。

    IBM 在IBM JDK 6里不仅引入了JIT编译器,它同时还引入了AOT(Ahead-Of-Time)编译器。它使得多个JVM可以通过共享缓存来共享编译过的本地代码。简而言之,通过AOT编译器编译过的代码可以直接被其他JVM使用。除此之外,IBM JVM通过使用AOT编译器来提前把代码编译器成JXE(Java EXecutable)文件格式来提供一种更加快速的执行方式。

    大部分Java程序的性能都是通过提升执行引擎的性能来达到的。正如JIT编译器一样,很多优化的技术都被引入进来使得JVM的性能一直能够得到提升。最原始的JVM和最新的JVM最大的差别之处就是在于执行引擎。

    Hotspot编译器在1.3版本的时候就被引入到Oracle Hotspot VM里了,JIT编译技术在Anroid 2.2版本的时候被引入到Dalvik VM里。

    引入一种中间语言,例如字节码,虚拟机执行字节码,并且通过JIT编译器来提升JVM的性能的这种技术以及广泛应用在使用中间语言的编程语言上。例如微软的.Net,CLR(Common Language Runtime 公共语言运行时),也是一种VM,它执行一种被称作CIL(Common Intermediate Language)的字节码。CLR提供了AOT编译器和JIT编译器。因此,用C#或者VB.NET编写的源代码被编译后,编译器会生成CIL并且CIL会执行在有JIT编译器的CLR上。CLR和JVM相似,它也有垃圾回收机制,并且也是基于堆栈运行。

    【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

    展开全文
  • netty通信时经常和底层数据交互,C语言和java的数据类型和范围不同,通信时需要转化或兼容,附件为字节码、进制常用的转换类。
  • Java字节码与Dalvik字节码

    千次阅读 2016-07-13 12:40:46
    JVM只与字节码关联,而不与Java语言直接关联。事实上,JRuby,Groovy等语言也可以由相应的编译器编译为字节码,然后由JVM解释执行。甚至可以自己写一个class字节码文件,然后由JVM来执行。 2. class类文件结构 任何...
  • Java字节码和Dalvik字节码

    千次阅读 2017-06-17 00:03:37
    Java字节码和Dalvik字节码的区别,生成JAVA字节码和Dalvik字节码
  • NULL 博文链接:https://andilyliao.iteye.com/blog/899925
  • 谢邀,题主的问题主要涉及到编译和反编译相关的知识,简单帮你回答...其实,class文件仍然不是机器能够识别的语言,因为机器只能识别机器语言,还需要JVM再将这种class文件类型字节码转换成机器可以识别的机器语言。
  • 插件或注入器可以基于Java注释或类或方法的名称添加额外的字节码,例如try ... catch ...块,对记录器的调用等。 它可以作为Gradle Plugin或通过CLI轻松集成到构建工作流程中。 执照 InjKit是。
  • 将C语言转换Java字节码或可以直接解释执行的编译器 作为一个学习项目 可以解释为执行大多数C或编译为Java字节码 玩具级,未添加许多功能,也没有优化 支持的 支持所有基本陈述 解释器:支持指针,数组,结构和...
  • 我们都知道,Java程序最终是转换成class文件执行在虚拟机上的,那么class文件是个怎样的结构,虚拟机又是如何处理去执行class文件里面的内容呢,这篇文章带你深入理解Java字节码中的结构。 1.Demo源码 首先,编写一...
  • Java字节码指令

    千次阅读 2021-03-15 04:19:00
    1. 简介Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成。...2. 字节码和数据类型在Java虚拟机的指令集...
  • Java字节码

    千次阅读 2019-01-14 13:23:40
    Java最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成 Java 字节码。使用字节码可以玩出很多高级的玩法,最高级的还是在 Java 程序运行时进行字节码修改和代码注入。听起来是不是一些很黑客,也很黑科技的...
  • Java字节转字符串

    2021-04-29 21:00:43
    **2、**由于字节转字符串时会有一些转义,导致字节转换成字符串后和之前的不一样,这是因为编码方式的问题。需将编码方式设置为StandardCharsets.ISO_8859_1。 **3、**还要注意,如果使用io流时,用这种方法得到的...
  • Python原型脚本将JVM字节码转换为控制流程图。 Utlize networkx框架来构建图形,并使用matplotlib显示可视化表示。 支持方法之间的函数调用边。 要运行,请在jvm2cfg.py的第267行上更改名为“ text_file”的变量,以...
  • Java字节码文件

    千次阅读 2019-07-02 20:27:34
    字节码文件信息 常量池 方法表集合 二、分析try-catch-finally的demo 计算机只认识0和1。这意味着任何语言编写的程序最终都需要经过编译器编译成机器码才能被计算机执行。所以,我们所编写的程序在不同的平台上...
  • 字节码生成库是生成和转换java字节码的高级api。
  • 什么是Java字节码

    万次阅读 多人点赞 2018-11-18 22:10:14
    什么是Java字节码? 它是程序的一种低级表示,可以运行于Java虚拟机上。将程序抽象成字节码可以保证Java程序在各种设备上的运行 Java号称是一门“一次编译到处运行”的语言,从我们写的java文件到通过编译器编译成...
  • Java字节码增强探秘

    千次阅读 2019-09-10 08:48:00
    本文转载自公众号美团技术团队大家好,美美今天给大家推荐一篇Java字节码增强技术的文章,在实际工作中有很多应用场景。美团点评技术团队平日积累了很多这类技术原理解析和实...
  • java byte转换工具类

    2017-12-12 16:18:32
    用于java,byte与各种对象的转换,Integer、short、hex、string

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 208,412
精华内容 83,364
关键字:

java字节码转换

java 订阅
友情链接: Xemsao.rar