




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、星期八職場經(jīng)驗網(wǎng)()【現(xiàn)成經(jīng)驗助你快速完成工作】本文將對Java字節(jié)碼進行解析,以及一些效率問題。AD: 一:Java字節(jié)代碼的組織形式類文件OxCAFEBABE,小版本號,大版本號,常量池大小,常量池數(shù)組,訪問控制標記,當前類信息,父類信息,實現(xiàn)的接口個數(shù),實現(xiàn)的接口信息數(shù)組,域個數(shù),域信息數(shù)組,方法個數(shù),方法信息數(shù)組,屬性個數(shù),屬性信息數(shù)組二:查看方法 - 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文件的字節(jié)碼信息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 , 高版本能執(zhí)行低版本的class文件2.常量池Constant poolMethod:方法Field:字段String:字符串Asciz:簽名如<init>由jvm調(diào)用,其他是不能夠去調(diào)用它的NameAndType:變量名的類型Class:類通過字節(jié)碼,我們可以看到Demo類 繼承于java.lang.Object,如果類中沒有顯式聲明構(gòu)造函數(shù)的話,編譯器會插入一個缺省無參的構(gòu)造函數(shù)(構(gòu)造函數(shù)在JVM級別是顯示成<init>的普通函數(shù))。三:檢測代碼的效率問題學(xué)習(xí)Java的過程中,都會了解到字符串合并時要用到StringBuffer 來代替String,那下面就來
29、通過Java字節(jié)碼來驗證兩種方式的效率性。例子:一個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 后字節(jié)碼信息: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西師范大學(xué)《籃球》2023-2024學(xué)年第二學(xué)期期末試卷
- 池州學(xué)院《智能采油裝備》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱信息工程學(xué)院《人力資源開發(fā)與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京醫(yī)科大學(xué)《鐵路與軌道交通車站工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)江職業(yè)技術(shù)學(xué)院《Photoshop海報設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 金肯職業(yè)技術(shù)學(xué)院《學(xué)前教育統(tǒng)計學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東女子職業(yè)技術(shù)學(xué)院《安裝工程預(yù)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南農(nóng)業(yè)大學(xué)《材料的腐蝕與防護》2023-2024學(xué)年第二學(xué)期期末試卷
- 新鄉(xiāng)學(xué)院《人權(quán)法》2023-2024學(xué)年第二學(xué)期期末試卷
- 杭州萬向職業(yè)技術(shù)學(xué)院《高級管理研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 建筑力學(xué)(緒論)課件
- excel表格水池側(cè)壁及底板配筋計算程序(自動版)
- DB1301∕T 369-2021 設(shè)施蔬菜有機肥替代化肥技術(shù)規(guī)程
- 商業(yè)寫字樓運營費用
- 完整版:美制螺紋尺寸對照表(牙數(shù)、牙高、螺距、小徑、中徑外徑、鉆孔)
- FEMA:潛在的失效模式及影響分析解析課件
- 三腔二囊管的應(yīng)用和護理--PPT課件 (3)
- 流體力學(xué)第二版蔡增基課件
- 英語書寫模板
- 湖北省機關(guān)事業(yè)單位勞動合同制工人
- 云南省普通初中學(xué)生成長記錄.doc
評論
0/150
提交評論