




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、星期八职场经验网()【现成经验助你快速完成工作】本文将对Java字节码进行解析,以及一些效率问题。AD: 一:Java字节代码的组织形式类文件OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组二:查看方法 - javap命令例子:有一个Java类Demo.java1. public class Demo 2. private String
2、60;str1; 3. private String str2; 4. private int num1; 5. private int num2; 6. public static final String STATIC_DATA = "
3、;hello world" 7. 8. private void sayHello1() 9. System.out.println("this is method1."); 10. 11.
4、; private void sayHello2() 12. System.out.println("this is method2."); 13. 14. public void sayHello3() 15. &
5、#160; System.out.println("this is method3."); 16. 17. 通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息D:>javap -verbose Demo >> Demo.txtDemo.txt:1. Compiled from "Demo.java" 2. public class Dem
6、o extends java.lang.Object 3. SourceFile: "Demo.java" 4. minor version: 0 5. major version: 49 6. 7. Constant pool: 8. const #1 = class
7、60; #2; / Demo 9. const #2 = Asciz Demo; 10. const #3 = class #4; / java/lang/Object 11. const #4
8、0;= Asciz java/lang/Object; 12. const #5 = Asciz str1; 13. const #6 = Asciz Ljava/lang/String; 14. const #7 = Asciz str
9、2; 15. const #8 = Asciz num1; 16. const #9 = Asciz I; 17. const #10 = Asciz num2; 18. const #11 = Asciz STATIC_DATA; 19. co
10、nst #12 = Asciz ConstantValue; 20. const #13 = String #14; / hello world 21. const #14 = Asciz hello world; 22. const #15 = Asciz <ini
11、t> 23. const #16 = Asciz ()V; 24. const #17 = Asciz Code; 25. const #18 = Method #3.#19; / java/lang/Object."<init>":(
12、)V 26. const #19 = NameAndType #15:#16;/ "<init>":()V 27. const #20 = Asciz LineNumberTable; 28. const #21 = Asciz LocalVariableTable; 29. const #
13、22 = Asciz this; 30. const #23 = Asciz LDemo; 31. const #24 = Asciz sayHello1; 32. const #25 = Field #26.#28; / java/lang/System.out:Ljava/i
14、o/PrintStream; 33. const #26 = class #27; / java/lang/System 34. const #27 = Asciz java/lang/System; 35. const #28 = NameAndType #29:#30;/ out:Ljava/i
15、o/PrintStream; 36. const #29 = Asciz out; 37. const #30 = Asciz Ljava/io/PrintStream; 38. const #31 = String #32; / this is method1. 39. const #32 =
16、Asciz this is method1.; 40. const #33 = Method #34.#36; / java/io/PrintStream.println:(Ljava/lang/String;)V 41. const #34 = class #35; /
17、 java/io/PrintStream 42. const #35 = Asciz java/io/PrintStream; 43. const #36 = NameAndType #37:#38;/ println:(Ljava/lang/String;)V 44. const #37 = Asciz println;
18、;45. const #38 = Asciz (Ljava/lang/String;)V; 46. const #39 = Asciz sayHello2; 47. const #40 = String #41; / this is method2. 48. const #41 = Asciz &
19、#160; this is method2.; 49. const #42 = Asciz sayHello3; 50. const #43 = String #44; / this is method3. 51. const #44 = Asciz this is method3.;&
20、#160;52. const #45 = Asciz SourceFile; 53. const #46 = Asciz Demo.java; 54. 55. 56. public static final java.lang.String STATIC_DATA; 57. Constant value: String&
21、#160;hello world 58. public Demo(); 59. Code: 60. Stack=1, Locals=1, Args_size=1 61. 0: aload_0 62. 1: invokespecial
22、60; #18; /Method java/lang/Object."<init>":()V 63. 4: return 64. LineNumberTable: 65. line 2: 0 66. LocalVariableTable: 67.
23、60;Start Length Slot Name Signature 68. 0 5 0 this LDemo; 69. 70. public
24、0;void sayHello3(); 71. Code: 72. Stack=2, Locals=1, Args_size=1 73. 0: getstatic #25; /Field java/lang/System.out:Ljava/io/PrintStream; 74.
25、160;3: ldc #43; /String this is method3. 75. 5: invokevirtual #33; /Method java/io/PrintStream.println:(Ljava/lang/String;)V 76.
26、60;8: return 77. LineNumberTable: 78. line 17: 0 79. line 18: 8 80. LocalVariableTable: 81. Start Length Slot
27、;Name Signature 82. 0 9 0 this LDemo; 83. 解析:1.版本号 major version: 49 /java版本 jdk1.6显示的是50, jdk1.5显示的是49,jdk1.4显示的是5
28、8 , 高版本能执行低版本的class文件2.常量池Constant poolMethod:方法Field:字段String:字符串Asciz:签名如<init>由jvm调用,其他是不能够去调用它的NameAndType:变量名的类型Class:类通过字节码,我们可以看到Demo类 继承于java.lang.Object,如果类中没有显式声明构造函数的话,编译器会插入一个缺省无参的构造函数(构造函数在JVM级别是显示成<init>的普通函数)。三:检测代码的效率问题学习Java的过程中,都会了解到字符串合并时要用到StringBuffer 来代替String,那下面就来
29、通过Java字节码来验证两种方式的效率性。例子:一个Java类 TestString.java1. <strong>public class TestString 2. public String testString(String str1, String str2) 3. return str1 + str2;
30、0;4. 5. public String testStringBuffer(StringBuffer sb, String str) 6. return sb.append(str).toString(); 7. 8. 9. </str
31、ong> javap c TestString 后字节码信息:1. Compiled from "TestString.java" 2. public class TestString extends java.lang.Object 3. public TestString(); 4. Code: 5. 0: aload
32、_0 6. 1: invokespecial #8; /Method java/lang/Object."<init>":()V 7. 4: return 8. 9. public java.lang.String testString(j
33、ava.lang.String, java.lang.String); 10. Code: 11. 0: new #16; /class java/lang/StringBuilder 12. 3: dup 13. 4:
34、160; aload_1 14. 5: invokestatic #18; /Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String; 15. 8: invokespecial
35、0; #24; /Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V 16. 11: aload_2 17. 12: invokevirtual #27; /Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 18. 15: invokevirtual #31; /Method java/lang/StringBuilder.toString:()Ljava/lang/St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《休闲农业》课件 项目六 休闲农业经营管理
- 人教陕西 九年级 下册 语文 第一单元《 单元写作 学习扩写》习题课 课
- 八年级数学苏科版下册第十单元《10.5分式方程》教学设计教案
- 新人教版高中语文必修3宇宙的边疆 同步练习
- 全国新人教高中必修4期末测试卷()
- 高中语文必修5长亭送别 同步练习2
- 杜甫七律教材简介
- 写出租合同范例范例
- 云南公路合同范例
- 乡镇厨师合同范例
- 工程勘察重点难点分析及解决措施
- 电力机车禁停标及调谐区标
- DB44∕T 1315-2014 物业服务 档案管理规范
- 春运旅客心理状况的调查分析与对策研究
- T∕CAWA 002-2021 中国疼痛科专业团体标准
- 双重预防体系建设分析记录表格
- 手机保护膜钢化璃玻膜检验标准(版)
- 混凝土面板堆石坝施工技术第五讲
- 论中小学管弦乐队的组织与训练
- 炼钢工艺操作说明
- 模拟电子技术基础课后答案(完整版)
评论
0/150
提交评论