欢迎进入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]
怀着淡定从容的心态去面对,也就没有了真正意义上的寂寞了。