Google Android系統中侵犯Oracle的專利說明
今天看了info Q上關于Google公司和Oracle公司的專利訴訟
其中Oracle公司的一項專利(其實是Sun公司申請的)6061520比較有意思,下面簡要的介紹一下這一項專利。
這項專利主要涉及到java語言中靜態數組的初始化。這一項專利是關于在jvm虛擬機執行static方法中,對數組初始化復制的優化措施。專利中定義一個預加載器,這個預加載器通過模擬執行一個class文件的<clinit>方法(也就是static語句),把<clinit>方法中的指令進行優化,并發優化后的指令保存到.mclass文件中。jvm虛擬機在執行class文件的時候,如果發現有<clinit>方法,則執行.mclass文件中指令,jvm虛擬器需要識別這些優化后的指令。由于class文件中字節碼指令都是jvm可識別的,預加載器就是加強了class文件的字節碼指令,需要jvm對這些指令實現進行支持。
下面這幅圖描述了預加載器模擬執行class文件中的<clinit>方法,生成.mclass文件的過程

對于移動設備,內存相對于pc機還是比較小的,通過對靜態數組初始化指令進行優化,可以大大地減少字節碼指令,從而減少加載到內存中的class文件大小。
下面可以看一個演示,下面代碼是靜態初始化5個int類型數組的字節碼:
public static final int a[] = { 1, 2, 3, 4, 5 };
0: iconst_5 1: newarray int 3: dup 4: iconst_0 5: iconst_1 6: iastore 7: dup 8: iconst_1 9: iconst_2 10: iastore 11: dup 12: iconst_2 13: iconst_3 14: iastore 15: dup 16: iconst_3 17: iconst_4 18: iastore 19: dup 20: iconst_4 21: iconst_5 22: iastore 23: putstatic #10; //Field a:[I
對于一個簡單的初始化指令,需要用很多字節碼來完成,這個專利就對此進行了優化,優化后的指令格式如下
CONSTANT_Array T_INT 4 1,2,3,4
大大的減少了字節碼的數量
這個在內存資源極其緊張的移動設備上,還是可以節省很多內存空間的。
浙公網安備 33010602011771號