本文主要是介绍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
大大的减少了字节码的数量
这个在内存资源极其紧张的移动设备上,还是可以节省很多内存空间的。
专利的详细信息见 http://worldwide.espacenet.com/publicationDetails/biblio?FT=D&date=20000509&DB=worldwide.espacenet.com&locale=en_EP&CC=US&NR=6061520A&KC=A&ND=4
这篇关于Google Android系统中侵犯Oracle的专利说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!