前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Java实现JVM第十章《异常处理》

用Java实现JVM第十章《异常处理》

原创
作者头像
小傅哥
修改2020-01-20 09:43:38
3480
修改2020-01-20 09:43:38
举报

小傅哥 | https://bugstack.cn 沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获。目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析等。 你用剑🗡、我用刀🔪,好的代码都很烧,望你不吝出招!

一、案例介绍

异常处理是java语言非常重要的一个语法,本章主要实现如何处理抛出的异常。

在Java语言中,异常可以分为两类:Checked异常和Unchecked异常。Unchecked异常包括java.lang.RuntimeException、java.lang.Error以及它们的子类,提前异常都是Checked异常。所有异常都最终继承自java.lang.Throwable。如果一个方法有可能导致Checked异常抛出,则该方法要么需要捕获该异常并妥善处理,要么必须把该异常列在自己的throws子句中,否则无法通过编译。Unchanged异常没有这个限制。请注意,Java虚拟机规范并没有这个规定,这只是Java语言的语法规则。

异常可以由Java虚拟机抛出,也可以由Java代码抛出。当Java虚拟机在运行过程中遇到比较严重的问题时,会抛出java.lang.Error的某个子类,如StackOverflowError、OutOfMemoryError等。程序一般无法从这种异常里恢复,所以在代码中通常也不必关心这类异常。

一部分执行在执行过程中会导致Java虚拟机抛出java.lang.RuntimeException的某个子类,如NullPointerException、IndexOutOfBoundsException等。这类异常一般是代码中的bug导致的,需要格外注意。在代码中抛出和处理异常是由athrow指令和方法的异常处理表配合完成的。

二、环境准备

  1. jdk 1.8.0
  2. IntelliJ IDEA Community Edition 2018.3.1 x64

三、配置信息

  1. 调试配置
代码语言:txt
复制
1. 配置位置:Run/Debug Configurations -> program arguments
代码语言:txt
复制
2. 配置内容:-Xjre "C:\Program Files\Java\jdk1.8.0\_161\jre" E:\itstack\git\istack-demo\itstack-demo-jvm\itstack-demo-jvm-10\target\test-classes\org\itstack\demo\test\HelloWorld

四、代码示例

代码语言:txt
复制
itstack-demo-jvm-10

├── pom.xml

└── src

    └── main

    │    └── java

    │        └── org.itstack.demo.jvm

    │             ├── \_native

    │             │   ├── java

    │             │   │   ├── \_Class.java

    │             │   │   ├── \_Double.java

    │             │   │   ├── \_Float.java

    │             │   │   ├── \_Object.java

    │             │   │   ├── \_String.java

    │             │   │   ├── \_System.java

    │             │   │   └── \_Throwable.java    

    │             │   └── sun    

    │             ├── NativeMethod.java

    │             └── Registry.java    

    │             ├── classfile

    │             │   ├── attributes   

    │             │   ├── constantpool 

    │             │   ├── ClassFile.java

    │             │   ├── ClassReader.java

    │             │   └── MemberInfo.java   

    │             ├── classpath

    │             │   ├── impl

    │             │   │   ├── CompositeEntry.java

    │             │   │   ├── DirEntry.java 

    │             │   │   ├── WildcardEntry.java 

    │             │   │   └── ZipEntry.java    

    │             │   ├── Classpath.java

    │             │   └── Entry.java   

    │             ├── classpath

    │             │   ├── base

    │             │   │   ├── BytecodeReader.java

    │             │   │   ├── ClassInitLogic.java

    │             │   │   ├── Instruction.java

    │             │   │   ├── InstructionBranch.java

    │             │   │   ├── InstructionIndex8.java

    │             │   │   ├── InstructionIndex16.java

    │             │   │   ├── InstructionNoOperands.java    

    │             │   │   └── MethodInvokeLogic.java

    │             │   ├── comparisons

    │             │   ├── constants

    │             │   ├── control

    │             │   ├── conversions

    │             │   ├── extended

    │             │   ├── loads

    │             │   ├── math

    │             │   ├── references

    │             │   │   ├── ANEW\_ARRAY.java

    │             │   │   ├── ARRAY\_LENGTH.java

    │             │   │   ├── ATHROW.java

    │             │   │   ├── CHECK\_CAST.java

    │             │   │   ├── GET\_FIELD.java

    │             │   │   ├── GET\_STATIC.java

    │             │   │   ├── INSTANCE\_OF.java

    │             │   │   ├── INVOKE\_INTERFACE.java

    │             │   │   ├── INVOKE\_SPECIAL.java

    │             │   │   ├── INVOKE\_STATIC.java

    │             │   │   ├── INVOKE\_VIRTUAL.java

    │             │   │   ├── MULTI\_ANEW\_ARRAY.java

    │             │   │   ├── NEW.java

    │             │   │   ├── NEW\_ARRAY.java

    │             │   │   ├── PUT\_FIELD.java

    │             │   │   └── PUT\_STATIC.java

    │             │   ├── reserved

    │             │   │   └── INVOKE\_NATIVE.java    

    │             │   ├── stack

    │             │   ├── store

    │             │   │   └── xastore

    │             │   │       ├── AASTORE.java    

    │             │   │       ├── BASTORE.java    

    │             │   │       ├── CASTORE.java    

    │             │   │       ├── DASTORE.java

    │             │   │       ├── FASTORE.java

    │             │   │       ├── IASTORE.java

    │             │   │       ├── LASTORE.java    

    │             │   │       └── SASTORE.java        

    │             │   └── Factory   

    │             ├── rtda

    │             │   ├── heap

    │             │   │   ├── constantpool

    │             │   │   ├── methodarea

    │             │   │   │   ├── Class.java    

    │             │   │   │   ├── ClassMember.java  

    │             │   │   │   ├── ExceptionTable.java      

    │             │   │   │   ├── Field.java    

    │             │   │   │   ├── Method.java 

    │             │   │   │   ├── MethodDescriptor.java 

    │             │   │   │   ├── MethodDescriptorParser.java 

    │             │   │   │   ├── MethodLookup.java     

    │             │   │   │   ├── Object.java   

    │             │   │   │   ├── Slots.java   

    │             │   │   │   └── StringPool.java    

    │             │   │   └── ClassLoader.java  

    │             │   ├── Frame.java

    │             │   ├── JvmStack.java

    │             │   ├── LocalVars.java

    │             │   ├── OperandStack.java

    │             │   ├── Slot.java 

    │             │   └── Thread.java

    │             ├── Cmd.java

    │             ├── Interpret.java    

    │             └── Main.java

    └── test

         └── java

             └── org.itstack.demo.test

                 └── HelloWorld.java

*如下为新增代码:*

ClassReader.java (优化)

代码语言:txt
复制
/\*\*

 \* https://bugstack.cn/

 \* create by fuzhengwei on 2019/5/12

 \* <p>

 \* java虚拟机定义了u1、u2、u4三种数据类型来表示;1字节、2字节、4字节,无符号整数。

 \* 在如下实现中,用增位方式表示无符号类型:

 \* u1、u2可以用int类型存储,因为int类型是4字节

 \* u4 需要用long类型存储,因为long类型是8字节

 \*/

public class ClassReader {



    private byte[] data;



    public ClassReader(byte[] data) {

        this.data = data;

    }



    //u1

    public int readUint8() {

        byte[] val = readByte(1);

        return byte2int(val);

    }



    //u2

    public int readUint16() {

        byte[] val = readByte(2);

        return byte2int(val);

    }



    //u4

    public long readUint32() {

        byte[] val = readByte(4);

        String str\_hex = new BigInteger(1, val).toString(16);

        return Long.parseLong(str\_hex, 16);

    }



    public int readUint32TInteger(){

        byte[] val = readByte(4);

        return new BigInteger(1, val).intValue();

    }



    public float readUint64TFloat() {

        byte[] val = readByte(8);

        return new BigInteger(1, val).floatValue();

    }



    public long readUint64TLong() {

        byte[] val = readByte(8);

        return new BigInteger(1, val).longValue();

    }



    public double readUint64TDouble() {

        byte[] val = readByte(8);

        return new BigInteger(1, val).doubleValue();

    }



    public int[] readUint16s() {

        int n = this.readUint16();

        int[] s = new int[n];

        for (int i = 0; i < n; i++) {

            s[i] = this.readUint16();

        }

        return s;

    }



    public byte[] readBytes(int n) {

        return readByte(n);

    }



    private byte[] readByte(int length) {

        byte[] copy = new byte[length];

        System.arraycopy(data, 0, copy, 0, length);

        System.arraycopy(data, length, data, 0, data.length - length);

        return copy;

    }



    private int byte2int(byte[] val) {

        String str\_hex = new BigInteger(1, val).toString(16);

        return Integer.parseInt(str\_hex, 16);

    }



}

_Throwable.java

代码语言:txt
复制
public class \_Throwable {



    private StackTraceElement stackTraceElement;



    private final String jlThrowable = "java/lang/Throwable";



    public \_Throwable() {

        Registry.register(jlThrowable, "fillInStackTrace", "(I)Ljava/lang/Throwable;", new NativeMethod(this, "fillInStackTrace"));

        Registry.register(jlThrowable, "registerNatives", "()V", new NativeMethod(this, "registerNatives"));

    }



    public void registerNatives(Frame frame) {

        // do nothing

    }



    public String string() {

        return String.format("%s.%s(%s:%d)", this.stackTraceElement.className, this.stackTraceElement.methodName, this.stackTraceElement.fileName, this.stackTraceElement.lineNumber);

    }



    public void fillInStackTrace(Frame frame) {

        Object thiz = frame.localVars().getThis();

        frame.operandStack().pushRef(thiz);



        \_Throwable[] stes = createStackTraceElements(thiz, frame.thread());

        thiz.setExtra(stes);

    }



    private \_Throwable[] createStackTraceElements(Object tObj, Thread thread) {

        int skip = distanceToObject(tObj.clazz()) + 2;

        Frame[] frames = thread.getFrames();

        \_Throwable[] stes = new \_Throwable[frames.length - skip];

        int idx = 0;

        for (int i = skip; i < frames.length; i++) {

            stes[idx] = createStackTraceElement(frames[i]);

        }

        return stes;

    }



    private int distanceToObject(Class clazz) {

        int distance = 0;

        for (Class c = clazz.superClass(); c != null; c = c.superClass()) {

            distance++;

        }

        return distance;

    }



    private \_Throwable createStackTraceElement(Frame frame) {

        Method method = frame.method();

        Class clazz = method.clazz();

        StackTraceElement stackTraceElement = new StackTraceElement();

        stackTraceElement.fileName = clazz.sourceFile();

        stackTraceElement.className = clazz.javaName();

        stackTraceElement.methodName = method.name();

        stackTraceElement.lineNumber = method.getLineNumber(frame.nextPC() - 1);

        \_Throwable throwable = new \_Throwable();

        throwable.stackTraceElement = stackTraceElement;

        return throwable;

    }



    private class StackTraceElement {

        private String fileName;

        private String className;

        private String methodName;

        private int lineNumber;

    }



}

ATHROW.java

代码语言:txt
复制
public class ATHROW extends InstructionNoOperands {



    @Override

    public void execute(Frame frame) {

        Object ex = frame.operandStack().popRef();

        if (ex == null) {

            throw new NullPointerException();

        }



        Thread thread = frame.thread();

        if (!findAndGotoExceptionHandler(thread, ex)) {

            handleUncaughtException(thread, ex);

        }

    }



    private boolean findAndGotoExceptionHandler(Thread thread, Object ex) {

        do {

            Frame frame = thread.currentFrame();

            int pc = frame.nextPC() - 1;



            int handlerPc = frame.method().findExceptionHandler(ex.clazz(), pc);

            if (handlerPc > 0) {

                OperandStack stack = frame.operandStack();

                stack.clear();

                stack.pushRef(ex);

                frame.setNextPC(handlerPc);

                return true;

            }



            thread.popFrame();

        } while (!thread.isStackEmpty());

        return false;

    }



    private void handleUncaughtException(Thread thread, Object ex) {

        thread.clearStack();



        Object jMsg = ex.getRefVar("detailMessage", "Ljava/lang/String;");



        String msg = StringPool.goString(jMsg);



        System.out.println(ex.clazz().javaName() + ":" + msg);



        java.lang.Object extra = ex.extra();



        \_Throwable[] throwables = (\_Throwable[]) extra;

        for (\_Throwable t : throwables) {

            System.out.println(t.string());

        }



    }



}

ExceptionTable.java

代码语言:txt
复制
public class ExceptionTable {



    private ExceptionHandler[] exceptionTable;



    public ExceptionTable(CodeAttribute.ExceptionTableEntry[] entries, RunTimeConstantPool runTimeConstantPool) {

        this.exceptionTable = new ExceptionHandler[entries.length];

        int i = 0;

        for (CodeAttribute.ExceptionTableEntry entry : entries) {

            ExceptionHandler handler = new ExceptionHandler(

                    entry.startPC(),

                    entry.endPC(),

                    entry.handlerPC(),

                    getCatchType(entry.catchType(), runTimeConstantPool)

            );

            this.exceptionTable[i++] = handler;

        }

    }



    public ClassRef getCatchType(int idx, RunTimeConstantPool runTimeConstantPool) {

        if (idx == 0) return null;

        return (ClassRef) runTimeConstantPool.getConstants(idx);

    }



    public ExceptionHandler findExceptionHandler(Class exClass, int pc) {

        for (ExceptionHandler handler : exceptionTable) {

            if (pc >= handler.startPC && pc < handler.endPC) {

                if (null == handler.catchType) {

                    return handler;

                }

                Class catchClass = handler.catchType.resolvedClass();

                if (catchClass == exClass || catchClass.isSubClassOf(exClass)) {

                    return handler;

                }

            }

        }

        return null;

    }





    class ExceptionHandler {



        int startPC;

        int endPC;

        int handlerPC;

        ClassRef catchType;



        ExceptionHandler(int startPC, int endPC, int handlerPC, ClassRef catchType) {

            this.startPC = startPC;

            this.endPC = endPC;

            this.handlerPC = handlerPC;

            this.catchType = catchType;

        }

    }



}

Method.java

代码语言:txt
复制
public class Method extends ClassMember {



    public int maxStack;

    public int maxLocals;

    public byte[] code;

    private ExceptionTable exceptionTable;

    private LineNumberTableAttribute lineNumberTable;

    private int argSlotCount;



    Method[] newMethods(Class clazz, MemberInfo[] cfMethods) {

        Method[] methods = new Method[cfMethods.length];

        for (int i = 0; i < cfMethods.length; i++) {

            methods[i] = newMethod(clazz, cfMethods[i]);

        }

        return methods;

    }



    private Method newMethod(Class clazz, MemberInfo cfMethod) {

        Method method = new Method();

        method.clazz = clazz;

        method.copyMemberInfo(cfMethod);

        method.copyAttributes(cfMethod);

        MethodDescriptor md = MethodDescriptorParser.parseMethodDescriptorParser(method.descriptor);

        method.calcArgSlotCount(md.parameterTypes);

        if (method.isNative()) {

            method.injectCodeAttribute(md.returnType);

        }

        return method;

    }



    private void injectCodeAttribute(String returnType) {

        this.maxStack = 4; //todo

        this.maxLocals = this.argSlotCount;



        switch (returnType.getBytes()[0]) {

            case 'V':

                this.code = new byte[]{(byte) 0xfe, (byte) 0xb1};

                break;

            case 'L':

            case '[':

                this.code = new byte[]{(byte) 0xfe, (byte) 0xb0};

                break;

            case 'D':

                this.code = new byte[]{(byte) 0xfe, (byte) 0xaf};

                break;

            case 'F':

                this.code = new byte[]{(byte) 0xfe, (byte) 0xae};

                break;

            case 'J':

                this.code = new byte[]{(byte) 0xfe, (byte) 0xad};

                break;

            default:

                this.code = new byte[]{(byte) 0xfe, (byte) 0xac};

                break;

        }

    }



    private void copyAttributes(MemberInfo cfMethod) {

        CodeAttribute codeAttr = cfMethod.codeAttribute();

        if (null != codeAttr) {

            this.maxStack = codeAttr.maxStack();

            this.maxLocals = codeAttr.maxLocals();

            this.code = codeAttr.data();

            this.lineNumberTable = codeAttr.lineNumberTableAttribute();

            this.exceptionTable = new ExceptionTable(codeAttr.exceptionTable(), this.clazz.constantPool());

        }

    }



    private void calcArgSlotCount(List<String> parameterTypes) {

        for (String paramType : parameterTypes) {

            this.argSlotCount++;

            if ("J".equals(paramType) || "D".equals(paramType)) {

                this.argSlotCount++;

            }

        }

        if (!this.isStatic()) {

            this.argSlotCount++;

        }

    }



    public boolean isSynchronized() {

        return 0 != (this.accessFlags & AccessFlags.ACC\_SYNCHRONIZED);

    }



    public boolean isBridge() {

        return 0 != (this.accessFlags & AccessFlags.ACC\_BRIDGE);

    }



    public boolean isVarargs() {

        return 0 != (this.accessFlags & AccessFlags.ACC\_VARARGS);

    }



    public boolean isNative() {

        return 0 != (this.accessFlags & AccessFlags.ACC\_NATIVE);

    }



    public boolean isAbstract() {

        return 0 != (this.accessFlags & AccessFlags.ACC\_ABSTRACT);

    }



    public boolean isStrict() {

        return 0 != (this.accessFlags & AccessFlags.ACC\_STRICT);

    }



    public int maxStack() {

        return this.maxStack;

    }



    public int maxLocals() {

        return this.maxLocals;

    }



    public byte[] code() {

        return this.code;

    }



    public int argSlotCount() {

        return this.argSlotCount;

    }



    public int findExceptionHandler(Class exClass, int pc) {

        ExceptionTable.ExceptionHandler handler = this.exceptionTable.findExceptionHandler(exClass, pc);

        if (handler != null) {

            return handler.handlerPC;

        }

        return -1;

    }



    public int getLineNumber(int pc) {

        if (this.isNative()) return -2;

        if (this.lineNumberTable == null) return -1;

        return this.lineNumberTable.getLineNumber(pc);

    }



}

HelloWorld.java

代码语言:txt
复制
public class HelloWorld {



    public static void main(String[] args) {

        throw new RuntimeException("自定义异常");

    }



}

五、测试结果

-Xjre "C:\Program Files\Java\jdk1.8.0_161\jre" E:\itstack\git\istack-demo\itstack-demo-jvm\itstack-demo-jvm-10\target\test-classes\org\itstack\demo\test\HelloWorld -verbose

代码语言:txt
复制
public class org.itstack.demo.test.HelloWorld {

  public org.itstack.demo.test.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: new           #2                  // class java/lang/RuntimeException

       3: dup

       4: ldc           #3                  // String 自定义异常

       6: invokespecial #4                  // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V

       9: athrow

}
代码语言:txt
复制
org/itstack/demo/test/HelloWorld.main()     寄存器(指令):0xbb -> NEW

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0x12 -> LDC

java/lang/Throwable.<clinit>()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.getClassLoader()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.getClassLoader()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.getClassLoader0()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.getClassLoader0()     寄存器(指令):0xb4 -> GET\_FIELD

java/lang/Class.getClassLoader0()     寄存器(指令):0xb0 -> ARETURN

java/lang/Class.getClassLoader()     寄存器(指令):0x4c -> ASTORE\_1

java/lang/Class.getClassLoader()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Class.getClassLoader()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Class.getClassLoader()     寄存器(指令):0x01 -> ACONST\_NULL

java/lang/Class.getClassLoader()     寄存器(指令):0xb0 -> ARETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x4c -> ASTORE\_1

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Class.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Class.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Class.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Class.<clinit>()     寄存器(指令):0x04 -> ICONST\_1

java/lang/Class.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Class.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Class.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Class.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Class.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Class.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Class.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Class.desiredAssertionStatus0()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Class.desiredAssertionStatus0()     寄存器(指令):0xac -> IRETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xac -> IRETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0x9a -> IFNE

java/lang/Throwable.<clinit>()     寄存器(指令):0x04 -> ICONST\_1

java/lang/Throwable.<clinit>()     寄存器(指令):0xa7 -> GOTO

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/util/ArrayList.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/util/ArrayList.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/util/ArrayList.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/util/ArrayList.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/util/ArrayList.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/util/ArrayList.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/util/ArrayList.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Throwable.<clinit>()     寄存器(指令):0x59 -> DUP

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/ArrayList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/ArrayList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0x03 -> ICONST\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/AbstractList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/ArrayList.<init>()     寄存器(指令):0x1b -> ILOAD\_1

java/util/ArrayList.<init>()     寄存器(指令):0x9e -> IFLE

java/util/ArrayList.<init>()     寄存器(指令):0x1b -> ILOAD\_1

java/util/ArrayList.<init>()     寄存器(指令):0x9a -> IFNE

java/util/ArrayList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/ArrayList.<init>()     寄存器(指令):0xb2 -> GET\_STATIC

java/util/ArrayList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/ArrayList.<init>()     寄存器(指令):0xa7 -> GOTO

java/util/ArrayList.<init>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/util/Collections.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.<clinit>()     寄存器(指令):0xbb -> NEW

java/util/Collections.<clinit>()     寄存器(指令):0x59 -> DUP

java/util/Collections.<clinit>()     寄存器(指令):0x01 -> ACONST\_NULL

java/util/Collections.<clinit>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$EmptySet.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$EmptySet.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$EmptySet.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$EmptySet.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractSet.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractSet.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractSet.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$EmptySet.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$EmptySet.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/util/Collections.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.<clinit>()     寄存器(指令):0xbb -> NEW

java/util/Collections.<clinit>()     寄存器(指令):0x59 -> DUP

java/util/Collections.<clinit>()     寄存器(指令):0x01 -> ACONST\_NULL

java/util/Collections.<clinit>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$EmptyList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$EmptyList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$EmptyList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$EmptyList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0x03 -> ICONST\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/AbstractList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$EmptyList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$EmptyList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/util/Collections.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.<clinit>()     寄存器(指令):0xbb -> NEW

java/util/Collections.<clinit>()     寄存器(指令):0x59 -> DUP

java/util/Collections.<clinit>()     寄存器(指令):0x01 -> ACONST\_NULL

java/util/Collections.<clinit>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$EmptyMap.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$EmptyMap.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$EmptyMap.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$EmptyMap.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractMap.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractMap.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractMap.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$EmptyMap.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$EmptyMap.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/util/Collections.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/util/Collections.unmodifiableList()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections.unmodifiableList()     寄存器(指令):0xc1 -> INSTANCE\_OF

java/util/Collections.unmodifiableList()     寄存器(指令):0x99 -> IFEQ

java/util/Collections.unmodifiableList()     寄存器(指令):0xbb -> NEW

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Object.registerNatives()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Object.registerNatives()     寄存器(指令):0xb1 -> RETURN

java/lang/Object.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.unmodifiableList()     寄存器(指令):0xbb -> NEW

java/util/Collections.unmodifiableList()     寄存器(指令):0x59 -> DUP

java/util/Collections.unmodifiableList()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections.unmodifiableList()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xc7 -> IFNONNULL

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.unmodifiableList()     寄存器(指令):0xb0 -> ARETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0x12 -> LDC

java/lang/Throwable.<clinit>()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.getClassLoader()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.getClassLoader()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.getClassLoader0()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.getClassLoader0()     寄存器(指令):0xb4 -> GET\_FIELD

java/lang/Class.getClassLoader0()     寄存器(指令):0xb0 -> ARETURN

java/lang/Class.getClassLoader()     寄存器(指令):0x4c -> ASTORE\_1

java/lang/Class.getClassLoader()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Class.getClassLoader()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Class.getClassLoader()     寄存器(指令):0x01 -> ACONST\_NULL

java/lang/Class.getClassLoader()     寄存器(指令):0xb0 -> ARETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x4c -> ASTORE\_1

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Class.desiredAssertionStatus0()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Class.desiredAssertionStatus0()     寄存器(指令):0xac -> IRETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xac -> IRETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0x9a -> IFNE

java/lang/Throwable.<clinit>()     寄存器(指令):0x04 -> ICONST\_1

java/lang/Throwable.<clinit>()     寄存器(指令):0xa7 -> GOTO

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Throwable.<clinit>()     寄存器(指令):0x59 -> DUP

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/ArrayList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/ArrayList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0x03 -> ICONST\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/AbstractList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/ArrayList.<init>()     寄存器(指令):0x1b -> ILOAD\_1

java/util/ArrayList.<init>()     寄存器(指令):0x9e -> IFLE

java/util/ArrayList.<init>()     寄存器(指令):0x1b -> ILOAD\_1

java/util/ArrayList.<init>()     寄存器(指令):0x9a -> IFNE

java/util/ArrayList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/ArrayList.<init>()     寄存器(指令):0xb2 -> GET\_STATIC

java/util/ArrayList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/ArrayList.<init>()     寄存器(指令):0xa7 -> GOTO

java/util/ArrayList.<init>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/util/Collections.unmodifiableList()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections.unmodifiableList()     寄存器(指令):0xc1 -> INSTANCE\_OF

java/util/Collections.unmodifiableList()     寄存器(指令):0x99 -> IFEQ

java/util/Collections.unmodifiableList()     寄存器(指令):0xbb -> NEW

java/util/Collections.unmodifiableList()     寄存器(指令):0x59 -> DUP

java/util/Collections.unmodifiableList()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections.unmodifiableList()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xc7 -> IFNONNULL

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.unmodifiableList()     寄存器(指令):0xb0 -> ARETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0x12 -> LDC

java/lang/Throwable.<clinit>()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.getClassLoader()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.getClassLoader()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Class.getClassLoader0()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.getClassLoader0()     寄存器(指令):0xb4 -> GET\_FIELD

java/lang/Class.getClassLoader0()     寄存器(指令):0xb0 -> ARETURN

java/lang/Class.getClassLoader()     寄存器(指令):0x4c -> ASTORE\_1

java/lang/Class.getClassLoader()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Class.getClassLoader()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Class.getClassLoader()     寄存器(指令):0x01 -> ACONST\_NULL

java/lang/Class.getClassLoader()     寄存器(指令):0xb0 -> ARETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x4c -> ASTORE\_1

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/lang/Class.desiredAssertionStatus0()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Class.desiredAssertionStatus0()     寄存器(指令):0xac -> IRETURN

java/lang/Class.desiredAssertionStatus()     寄存器(指令):0xac -> IRETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0x9a -> IFNE

java/lang/Throwable.<clinit>()     寄存器(指令):0x04 -> ICONST\_1

java/lang/Throwable.<clinit>()     寄存器(指令):0xa7 -> GOTO

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0xbb -> NEW

java/lang/Throwable.<clinit>()     寄存器(指令):0x59 -> DUP

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/ArrayList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/ArrayList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/AbstractCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/AbstractList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/AbstractList.<init>()     寄存器(指令):0x03 -> ICONST\_0

java/util/AbstractList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/AbstractList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/ArrayList.<init>()     寄存器(指令):0x1b -> ILOAD\_1

java/util/ArrayList.<init>()     寄存器(指令):0x9e -> IFLE

java/util/ArrayList.<init>()     寄存器(指令):0x1b -> ILOAD\_1

java/util/ArrayList.<init>()     寄存器(指令):0x9a -> IFNE

java/util/ArrayList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/ArrayList.<init>()     寄存器(指令):0xb2 -> GET\_STATIC

java/util/ArrayList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/ArrayList.<init>()     寄存器(指令):0xa7 -> GOTO

java/util/ArrayList.<init>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb8 -> INVOKE\_STATIC

java/util/Collections.unmodifiableList()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections.unmodifiableList()     寄存器(指令):0xc1 -> INSTANCE\_OF

java/util/Collections.unmodifiableList()     寄存器(指令):0x99 -> IFEQ

java/util/Collections.unmodifiableList()     寄存器(指令):0xbb -> NEW

java/util/Collections.unmodifiableList()     寄存器(指令):0x59 -> DUP

java/util/Collections.unmodifiableList()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections.unmodifiableList()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xc7 -> IFNONNULL

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/Collections$UnmodifiableCollection.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/util/Collections$UnmodifiableList.<init>()     寄存器(指令):0xb1 -> RETURN

java/util/Collections.unmodifiableList()     寄存器(指令):0xb0 -> ARETURN

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.<clinit>()     寄存器(指令):0xbd -> ANEW\_ARRAY

java/lang/Throwable.<clinit>()     寄存器(指令):0xb3 -> PUT\_STATIC

java/lang/Throwable.<clinit>()     寄存器(指令):0xb1 -> RETURN

org/itstack/demo/test/HelloWorld.main()     寄存器(指令):0xbb -> NEW

org/itstack/demo/test/HelloWorld.main()     寄存器(指令):0x59 -> DUP

org/itstack/demo/test/HelloWorld.main()     寄存器(指令):0x12 -> LDC

org/itstack/demo/test/HelloWorld.main()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/RuntimeException.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/RuntimeException.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/RuntimeException.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Exception.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Exception.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Exception.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Object.<init>()     寄存器(指令):0xb1 -> RETURN

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0xb2 -> GET\_STATIC

java/lang/Throwable.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0xb2 -> GET\_STATIC

java/lang/Throwable.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0xb6 -> INVOKE\_VIRTUAL

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xb4 -> GET\_FIELD

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xc7 -> IFNONNULL

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0x03 -> ICONST\_0

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xb7 -> INVOKE\_SPECIAL

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xfe -> INVOKE\_NATIVE

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xb0 -> ARETURN

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0x57 -> POP

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xb2 -> GET\_STATIC

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xb5 -> PUT\_FIELD

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.fillInStackTrace()     寄存器(指令):0xb0 -> ARETURN

java/lang/Throwable.<init>()     寄存器(指令):0x57 -> POP

java/lang/Throwable.<init>()     寄存器(指令):0x2a -> ALOAD\_0

java/lang/Throwable.<init>()     寄存器(指令):0x2b -> ALOAD\_1

java/lang/Throwable.<init>()     寄存器(指令):0xb5 -> PUT\_FIELD

java/lang/Throwable.<init>()     寄存器(指令):0xb1 -> RETURN

java/lang/Exception.<init>()     寄存器(指令):0xb1 -> RETURN

java/lang/RuntimeException.<init>()     寄存器(指令):0xb1 -> RETURN

org/itstack/demo/test/HelloWorld.main()     寄存器(指令):0xbf -> ATHROW

java.lang.RuntimeException:自定义异常

org.itstack.demo.test.HelloWorld.main(HelloWorld.java:9)



Process finished with exit code 0

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、案例介绍
  • 二、环境准备
  • 三、配置信息
  • 四、代码示例
  • 五、测试结果
相关产品与服务
应用性能监控
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档