Java字节码深入解析

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

本文将对Java字节码进行解析,以及一些效率问题。

一:Java字节代码的组织形式

类文件{

OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组

}

二:查看方法 — javap命令

例子:有一个Java类Demo.java

public class Demo {

private String str1;

private String str2;

private int num1;

private int num2;

public static final String STATIC_DATA = “hello world”;

private void sayHello1(){

System.out.println(”this is method1…”);

}

private void sayHello2(){

System.out.println(”this is method2…”);

}

public void sayHello3(){

System.out.println(”this is method3…”);

}

}

通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息

D:\&;javap -verbose Demo 》 Demo.txt

Demo.txt:

Compiled from “Demo.java”

public class Demo extends java.lang.Object

SourceFile: “Demo.java”

minor version: 0

major version: 49

Constant pool:

const #1 = class #2; // Demo

const #2 = Asciz Demo;

const #3 = class #4; // java/lang/Object

const #4 = Asciz java/lang/Object;

const #5 = Asciz str1;

const #6 = Asciz Ljava/lang/String;;

const #7 = Asciz str2;

const #8 = Asciz num1;

const #9 = Asciz I;

const #10 = Asciz num2;

const #11 = Asciz STATIC_DATA;

const #12 = Asciz ConstantValue;

const #13 = String #14; // hello world

const #14 = Asciz hello world;

const #15 = Asciz <init>;

const #16 = Asciz ()V;

const #17 = Asciz Code;

const #18 = Method #3.#19; // java/lang/Object.”<init>”:()V

const #19 = NameAndType #15:#16;// “<init>”:()V

const #20 = Asciz LineNumberTable;

const #21 = Asciz LocalVariableTable;

const #22 = Asciz this;

const #23 = Asciz LDemo;;

const #24 = Asciz sayHello1;

const #25 = Field #26.#28; // java/lang/System.out:Ljava/io/PrintStream;

const #26 = class #27; // java/lang/System

const #27 = Asciz java/lang/System;

const #28 = NameAndType #29:#30;// out:Ljava/io/PrintStream;

const #29 = Asciz out;

const #30 = Asciz Ljava/io/PrintStream;;

const #31 = String #32; // this is method1…

const #32 = Asciz this is method1…;

const #33 = Method #34.#36; // java/io/PrintStream.println:(Ljava/lang/String;)V

const #34 = class #35; // java/io/PrintStream

const #35 = Asciz java/io/PrintStream;

const #36 = NameAndType #37:#38;// println:(Ljava/lang/String;)V

const #37 = Asciz println;

const #38 = Asciz (Ljava/lang/String;)V;

const #39 = Asciz sayHello2;

const #40 = String #41; // this is method2…

const #41 = Asciz this is method2…;

const #42 = Asciz sayHello3;

const #43 = String #44; // this is method3…

const #44 = Asciz this is method3…;

const #45 = Asciz SourceFile;

const #46 = Asciz Demo.java;

{

public static final java.lang.String STATIC_DATA;

Constant value: String hello world

public Demo();

Code:

Stack=1, Locals=1, Args_size=1

[1][2]

怀着淡定从容的心态去面对,也就没有了真正意义上的寂寞了。

Java字节码深入解析

相关文章:

你感兴趣的文章:

标签云: