资源描述:
《Java HotSpot虚拟机中无用存储单元收集》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JavaHotSpot™虚拟机中无用存储单元的收集(GC)JohnCoomesTonyPrintezisSunMicrosystems公司演示目的帮助你理解无用存储单元的收集,以及它如何与JavaTM程序进行互操作,这样当你在设计、开发和配置应用程序时可以在充分了解信息的基础上作出选择1
2、JavaOne2003
3、Session3153演讲人情况•JohnCoomes是SunMicrosystems公司的资深工程师•目前研究HotSpot™虚拟机中的无用存储单元收集•已在Java™2平台的不同部分,以及它的标准版本方面工作了5年;在HotSpot方面工作三年•喜欢骑山地车1
4、JavaOne200
5、3
6、Session3153演讲人情况•TonyPrintezis是SunMicrosystems实验室Java™技术研究小组的成员•原来在苏格兰格拉斯哥大学计算机科学系教书•已从事GC方面的工作5年;编写了近乎并发的收集器的第一个版本•不喜欢骑山地车1
7、JavaOne2003
8、Session3153我们正在努力出售的东西…GC是你的朋友终结不是1
9、JavaOne2003
10、Session3153议程•什么是自动内存管理以及为什么进行自动内存管理•GC的特点•HotSpot中的GC•有利于GC程序设计•问与答1
11、JavaOne2003
12、Session3153什么是自动内存管理?•对象分配─新操作•
13、无用存储单元的收集(GC)─回收未用的内存─类的卸载─弱引用处理及终结─对象堆的布局应用程序对象堆GC1
14、JavaOne2003
15、Session3153为什么进行自动内存管理?•简化程序─消除对重新分配的需求─防止内存泄漏─简化数据类型接口─启用正确的封装•保证编程语言的安全─防止虚悬指针1
16、JavaOne2003
17、Session3153议程•什么是自动内存管理以及为什么进行自动内存管理•GC的特点•HotSpot中的GC•有利于GC的程序设计•问与答1
18、JavaOne2003
19、Session3153GC的设计目的•快速、快速、快速的分派•未用存储单元的及时回收•正在运行的应用程序的最短中断─
20、微小的、可预见的停顿•少量的系统开销(空间、时间)•可升级到大型对象堆1
21、JavaOne2003
22、Session3153GC的‘真相’•算法与策略的平衡─堆的大小vs.收集时间开销─停顿时间和应用程序的吞吐量•既然一种方法无法适合所有的……─提供选择─利用可调整的、可以自行调整的算法1
23、JavaOne2003
24、Session3153GC的特点•部分收集vs.完全收集•全部停止vs.并发•串行的vs.并行的1
25、JavaOne2003
26、Session3153部分收集vs.完全收集•部分收集单独收集堆的子区域+利用对象生存期和无用存储单元密度•每单位的GC工作回收更多的存储单元–必须追踪进入收集区的
27、引用•写屏蔽●对执行时间的微弱影响•JIT编译器必须予以配合堆已收集的未收集的1
28、JavaOne2003
29、Session3153部分收集vs.完全收集•完全收集每次收集整个堆–停顿时间变长•与堆大小成正比+无写屏障,执行更容易堆已收集的1
30、JavaOne2003
31、Session3153全部停止vs.并发•全部停止条件下的GC应用程序停止时完成全部GC工作+GC时对象图冻结–较长的停顿时间•并发式GC大多数GC在应用程序运行的情况下完成–GC时对象图变化•要求同步,更加复杂–占用空间更大(“浮动的无用单元”)+停顿较短1
32、JavaOne2003
33、Session3153串行的vs.并行的•串行的+
34、算法更简单–多余的CPU(>1)在GC期间空闲–GC占用固定时钟时间较长•并行的–要求同步,更为复杂+GC使用多个CPU+GC占用固定时钟时间较短1
35、JavaOne2003
36、Session3153议程•什么是自动内存管理以及为什么进行自动内存管理•GC的特点•HotSpot中的GC•有利于GC的程序设计•问与答1
37、JavaOne2003
38、Session3153HotSpot中的GC•快速的存储单元分配•部分收集─分代•全部停止,或者近乎并发1•串行的或者并行的11可用,但默认情况下不启用1
39、JavaOne2003
40、Session3153快速分配•新对象被分派到“托管单元中”─托管单元通常是本地
41、线程─大的对象可能被分配到别的地方•存储单元分配:修改单个指针─通常通过编译器内嵌存在•newjava.lang.Object()大约是10个本地指令•GC激活的存储单元快速分配1
42、JavaOne2003
43、Session3153HotSpot中全部停止式的GC•VM跟踪线程状态─运行编译过的字节代码─解释程序字节代码─运行本地代码─锁定等待•只有执行字节代码的线程停止─本地代码形式的线程继续运行•