首页 / JAVA / 使用javap反编译class文件
使用javap反编译class文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用javap反编译class文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2494字,纯文字阅读大概需要4分钟。
内容图文
一个普通的Java类:
package org.ccnt.concurrence; public class VolatileTest { public static volatile int race = 0; publicstaticvoid increate() { race ++; } privatestaticfinalint THREAD_COUNT = 20; publicstaticvoid main(String[] args) { Thread[] threads = new Thread[THREAD_COUNT]; for (int i=0; i<THREAD_COUNT; i++) { threads[i] = new Thread(new Runnable() { @Override publicvoid run() { for (int i=0; i<10000; i++){ increate(); } } }); threads[i].start(); } while (Thread.activeCount() > 1) { Thread.yield(); } System.out.println(race); } }
现在我们使用JDK带的反编译工具javap来反编译VilatileTest.class,先执行下面的命令:
javap org.ccnt.concurrence.VolatileTest > VolatileTest.jad
VolatieTest.jad
Compiled from "VolatileTest.java" publicclass org.ccnt.concurrence.VolatileTest { publicstaticvolatileint race; static {}; public org.ccnt.concurrence.VolatileTest(); publicstaticvoid increate(); publicstaticvoid main(java.lang.String[]); }
查看字节码:
javap -c org.ccnt.concurrence.VolatileTest > VolatileTest.txt
VolatileTest.txt
Compiled from "VolatileTest.java" publicclass org.ccnt.concurrence.VolatileTest { publicstaticvolatileint race; static {}; Code: 0: iconst_0 1: putstatic #13 // Field race:I 4: returnpublic org.ccnt.concurrence.VolatileTest(); Code: 0: aload_0 1: invokespecial #18 // Method java/lang/Object."<init>":()V 4: returnpublicstaticvoid increate(); Code: 0: getstatic #13 // Field race:I 3: iconst_1 4: iadd 5: putstatic #13 // Field race:I 8: returnpublicstaticvoid main(java.lang.String[]); Code: 0: bipush 20 2: anewarray #25 // class java/lang/Thread 5: astore_1 6: iconst_0 7: istore_2 8: goto 37 11: aload_1 12: iload_2 13: new #25 // class java/lang/Thread 16: dup 17: new #27 // class org/ccnt/concurrence/VolatileTest$1 20: dup 21: invokespecial #29 // Method org/ccnt/concurrence/VolatileTest$1."<init>":()V 24: invokespecial #30 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V 27: aastore 28: aload_1 29: iload_2 30: aaload 31: invokevirtual #33 // Method java/lang/Thread.start:()V 34: iinc 2, 1 37: iload_2 38: bipush 20 40: if_icmplt 11 43: goto 49 46: invokestatic #36 // Method java/lang/Thread.yield:()V 49: invokestatic #39 // Method java/lang/Thread.activeCount:()I 52: iconst_1 53: if_icmpgt 46 56: getstatic #43 // Field java/lang/System.out:Ljava/io/PrintStream; 59: getstatic #13 // Field race:I 62: invokevirtual #49 // Method java/io/PrintStream.println:(I)V 65: return }
原文:http://www.cnblogs.com/549294286/p/3517736.html
内容总结
以上是互联网集市为您收集整理的使用javap反编译class文件全部内容,希望文章能够帮你解决使用javap反编译class文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。