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
大大的减少了字节码的数量
这个在内存资源极其紧张的移动设备上,还是可以节省很多内存空间的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架