JavaOne: Garbage First

Sun的HotSpot垃圾收集器中的GarbageFirst(G1)旨在解决传统垃圾收集器的问题,如长时间停顿等。G1通过将堆划分为多个小区域,并在这些区域间进行垃圾收集来提高效率。此方法可以有效减少停顿时间并降低全堆收集的频率。

Sun的HotSpot垃圾收集器可分为两类:新生区(young generation)与老年区(tenured generation)。大部分的内存分配在新生区中进行,相对于垃圾收集的间隔时间来说,它经过了优化并且生命周期很短。经过几次垃圾收集后仍然存活于 新生区中的对象将被迁移到老年区中,这部分区域通常更大并且垃圾收集不那么频繁。新生区收集器分为连续式(Serial)、 同新式(ParNew)及并行扫描式(Parallel Scavenge)三种。所有这三种都是拷贝收集器。连续式使用了一个单独的GC线程,而同新式与并行扫描式都使用了多线程。老年区收集器都使用了标记扫 描压缩(mark-sweep-compact)算法。同样老年区收集器也分为三种:Serial Old(另一个单独的GC线程)、Parallel Old(使用多个GC线程)及CMS(一个多并发低暂停的收集器)。Garbage First的目标在于替换掉CMS并且采取了某些不同的方式——跨越了新生区和老年区的边界。    

\

在今年JavaOne的一个展示中,Tony Printezis对Garbage First进行了详尽的介绍,在JavaOne大会的网站上有一个随后的采访。Printezis概述了Garbage First (G1)的工作方式:

\
“堆被切分成固定大小的区域,同时两个区域之间的分隔基本上是合理的。因此我们可以认为一些区域是新的,另一些是老的。在G1中所有的空间回收都是通过拷 贝完成的。G1选择一组区域,从那些区域中摘出存活的对象,然后将其拷贝到另一组区域中。这就是G1中空间回收的方式,而不是CMS中所采取的那种方式 (拷贝与适当的重分配的组合方式)。” 
\

Printezis继续阐述了新的收集器的三个主要目标:

\
“首要目标是随始终一致的低停顿率。本质上,由于G1在处理同时做压缩,它将对象从堆的一个地方拷贝到另一个地方。这样,由于压缩的原因,它不会遇到CMS可能会遇到的碎片问题。总会有连续空闲的空间供分配,这就使得G1拥有始终一致的停顿率。
第二个目标是尽量避免完全的GC。在G1对全局进行标记并决定堆上对象的活跃度后,它立刻就知道堆上的哪些区域几乎是空闲的。它将首先处理那些区域,腾出 大量空间。通过这种方式,垃圾收集器将获得更多空间并减少完全GC的可能性。这也是为什么该垃圾收集器叫做Garbage-First的原因。
最后一个目标是良好的吞吐量。对于我们很多客户来说,吞吐量意味着一切。我们期望G1拥有良好的吞吐量以满足我们客户的需求。”
\

Sun研究小组发表了一篇论文(pdf 格式)更加详尽地论述了Garbage-First并深入分析了如何实现这些目标,尤其是实时目标。大多数实时收集器工作在单个对象层次上,而 Garbage First则在区域层次上进行收集。如果任何区域不再包含存活的对象时,它就会被立刻回收。用户可以为停顿率指定一个目标,G1会基于之前的收集对此时可 回收的区域数量作出估计。该收集器对区域回收的代价有一个合理且精确的模型,所以“该收集器可以在给定的停顿时间内(高概率)选择一组可被回收的区域。” 换句话说,Garbage-First并不是一个纯粹的实时收集器——它以高概率但不绝对地满足软实时目标。作为交换,Garbage-First应该具 备更高的吞吐量以作为软实时的补偿,但是其仍会适度遵循实时的限制。这对于经常产生大量存活堆数据和线程级别数据的大规模服务器端应用来说是非常棒的。 Garbage-First还提供了一些出色的控制,使得用户可以在垃圾收集的执行周期中指定一小部分时间——例如,在下一个120秒中最多花20秒的时 间在垃圾收集上。

\

Garbage First将会包含在Java SE 7中并且过几周就会被提交。它也将以升级包的方式加入到Java 6中。

\

查看英文原文:JavaOne: Garbage First

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值