
发表日期: 2021-04-25 14:19:33 浏览次数:168
鄢陵网站优化【鄢陵开通400电话】鄢陵网站搭建、鄢陵微信公众号推文外包、鄢陵开通京东拼多多设计、鄢陵淘宝装修
鄢陵县隶属河南省许昌市,位于河南省中部,千里伏牛山脉东方,万里母亲河黄河南侧;西靠长葛市、建安区,北与开封市,东与周口市,南与漯河市接壤,现辖12个镇,386个行政村(社区),总人口66.7万人,总面积866平方公里(耕地99.6万亩)。
近年来,鄢陵县坚持“五位一体”总体布局和“四个全面”战略布局,坚持创新、协调、绿色、开放、共享发展理念,着力建设生态鄢陵、富强鄢陵、文明鄢陵、幸福鄢陵,在全面建成小康社会的征程中迈出了坚实步伐。 [1]
鄢陵县处在中原高速公路网核心区,毗邻郑州航空港经济综合实验区,北距新郑机场50公里,西距京广铁路(京广高铁)、京港澳高速20公里,兰南高速、永登高速、机西高速和郑合高铁、三洋铁路贯穿全境,形成了四通八达、方便快捷的交通体系。 [1]
鄢陵是全国商品粮基地和优质棉生产基地县。鄢陵县花卉苗木种植种植面积达60万亩。2011年被农业部、国家旅游局认定为“全国休闲农业与乡村旅游示范县”。 [2]
2020年6月,入选国家森林康养基地(第一批)名单。
2020年10月9日,被生态环境部授予第四批国家生态文明建设示范市县称号。
2020年11月27日,鄢陵县被河南省林业局“省级森林城市”荣誉称号 [3] 。
G1GC 最大的特征是非常重视实时性。本节首先会介绍一般意义上的实时性,然后再探讨 G1GC 中的实时性是什么样的。
处理实时性的要求是,它必须能在最后期限(deadline)之前完成。
最后期限可以自由指定。如果指定的期限较短,那么程序就要保证在短时间内完成处理;相反,如果指定的期限较长,那么程序只要能保证在这个较长的时间内完成处理就可以了。
另外,即使同为实时程序,如果处理内容不同,最后期限的重要性也会很不一样。有些处理只要超出最后期限一次,就会带来致命的问题,而有些处理稍微打破几次最后期限也不会有太大的问题。这两种处理分别称为“硬实时性(hard real-time)处理”和“软实时性(soft real-time)处理”。
硬实时性的处理,多存在于保护人类免于受伤、远离危险,以安全为第一位的场景中。例如,医疗机器人控制系统、航空管制系统等都会要求硬实时性。如果这类系统中的处理超出了最后期限,很可能出现致命的问题。而且,硬实时性的处理必须在处理开始后的很短时间内完成。
软实时性处理多用于稍微超出几次最后期限也没什么问题的系统中,例如网络银行系统。用户总会期待所有的交易都能完美地处理好,但是稍微超出几次最后期限,比如交易完成界面的展示慢了一些,应该也不会构成致命的问题。
软实时性的处理可以超出最后期限,但超出期限的频率很重要。只有超出频率在用户能够容忍范围之内的处理,我们才能说它具备软实时性。
《Java 并发编程实战》[2] 的作者之一布赖恩·戈茨(Brian Goetz)曾在一篇文章 [7] 中像下面这样写道:
实时处理很多时候会与“高速性”相关。但是,高速性其实只是实时处理的特征之一。
对于实时处理来说,真正重要的特征是“可预测性”。
实时处理必须尽力保证不超出最后期限。因此相比高速性,可预测性更重要一些。
这里所说的可预测性,指的是“可以预测处理大约会耗费多长时间”。即使处理速度再快,如果无法在执行前预测出需要的时间,处理也是没有使用价值的——因为该处理存在随时超出最后期限的可能。如果能够预测出大致的处理时间,就可以据此来评估是否会超出最后期限。如果有超出期限的可能,就可以事先采取应对措施,例如对处理内容进行分解。
因此,在保证实时性方面,可预测性是一个重要的因素。
G1GC 具有软实时性。为了实现软实时性,它具备以下两个功能。
① 设置期望暂停时间(最后期限)
② 可预测性
①是支持用户自定义 mutator 暂停时间的功能。G1GC 具有软实时性,因此会尽力保证处理不超过该暂停时间。
②是用来预测下次 GC 会导致 mutator 暂停多长时间的功能。根据预测出来的结果,G1GC 会通过延迟执行 GC、拆分 GC 目标对象等手段来遵守①中设置的期望暂停时间。通过这种方式,能够尽量减少超出用户期望暂停时间的频率,从而实现软实时性。
Java(OpenJDK)中已经存在并行 GC、并发 GC 和增量 GC1 等多种 GC 算法。除了 Java 之外,没有哪种语言提供这么多的 GC 算法供用户选择。那么,Java 为什么还要增加新的算法 G1GC 呢?
1增量 GC :通过慢慢地进行 GC 来缩短 mutator 最大暂停时间的一种手段。
现在,Java 语言广泛用于服务端应用程序的开发,而其中有些应用程序需要具备软实时性。例如,管理电话呼叫的服务端应用程序等(实际上已经存在一些用 Java 语言实现的应用程序了 2)。
2出自参考文献 [3] 中的“1.INTRODUCTION”。
这类应用程序当前主要是采用增量 GC 或者并发 GC 来缩短最大暂停时间的。但是,缩短最大暂停时间很容易导致吞吐量 3 下降。还有,因为无法预测暂停时间,GC 可能会有 mutator 长时间停止的风险。
3吞吐量:单位时间内回收垃圾的量。如果 GC 的吞吐量下降,总的暂停时间就会变长。
于是 G1GC 诞生了,其目的就是高效地实现软实时性。Java 先前的 GC 算法都在一味地尝试缩短最大暂停时间,而 G1GC 则是让用户去设置期望暂停时间。用户按照自己的需求设置合适的 GC 暂停时间,在确保吞吐量比以往的 GC 更好的前提下,实现了软实时性。
另外,追求软实时性的服务端应用程序,大都运行在拥有巨大的堆 4 和多处理器的服务器设备之上。因此,内部的 GC 算法必须能够在短时间内以高吞吐量来处理巨大的堆,而且还要高效地发挥多处理器的优势。G1GC 的设计就很符合这些要求,它能够最大程度地利用服务器上多处理器的优势,而且在处理巨大的堆时,也不会降低 GC 的性能。
4堆:程序运行时用于创建对象的内存区域。
G1GC 中的堆结构和列车 GC5 中的堆结构非常相似。
5详情可参考“GC 书”算法篇中的 7.7 节。
堆的内部被划分为大小相等的区域,所有区域排列成一排。G1GC 以区域为单位进行 GC。用户可以随意设置区域大小,但是内部会将用户设置的值向上调整为 2 的指数幂(),并以该正数作为区域的大小(图 1.1)。

图 1.1 堆结构
如果正在分配对象的某个区域已经满了,GC 线程会寻找下一个空闲的区域来继续分配。空闲区域是通过链表进行管理的,因此查找的时间复杂度是固定的 。
下面我们简要地介绍一下 G1GC 的执行过程。G1GC 主要有下面两个功能。
① 并发标记(concurrent marking)
② 转移(evacuation)
①并发标记基本能和 mutator 并发执行,会针对区域内所有的存活对象 6 进行标记。
6存活对象:活着的对象,即有可能被程序使用的对象。
②转移负责释放堆中死亡对象所占的内存空间。
首先,从众多区域中选择一个进行 GC 操作。如果该区域中有存活对象,则将其复制到其他空闲区域中(图 1.2)。

图 1.2 堆的状态
白色区域是空闲区域,灰色区域是使用中的区域。左图表示的是在选中区域后开始将存活对象复制到空闲区域的操作;右图表示的是转移后堆的状态。为了方便展示,图中的区域以二维的方式排列,但是在内存中其实是如图 1.1 所示排列成一排的。
当选择的空闲区域也满了的时候,GC 线程会再次选择其他空闲区域来存放存活对象。对象复制完成之后,只剩下死亡对象 7 的区域会被重置为空闲区域以便复用。
7死亡对象:已死亡的对象,即不可能再被程序使用的对象。
转移其实也起到了压缩 8 的作用,因此 G1GC 中的区域不会发生碎片化 9。
8压缩:将存活对象挤到内存中同一侧的操作。因为压缩之后对象之间没有空隙,所以区域不会有碎片化的问题。
9碎片化:对象零散地存在于堆中的现象。
正如上一节中提到的那样,G1GC 的主要功能是并发标记和转移。其中并发标记由并发标记线程来执行。
并发标记的作用是在尽量不暂停 mutator 的情况下标记出存活对象。而且,还需要在并发标记结束之后记录下每个区域内存活对象的数量。这个信息在转移时会用到。
转移的作用是将待回收区域内的存活对象复制到其他的空闲区域,然后将待回收区域重置为空闲状态。这很像复制 GC 算法,只不过是以区域为单位进行的。
需要注意的是,并发标记和转移在处理上是相互独立的。并发标记的结果信息对于转移来说并不是必须的。因此,转移处理可能发生在并发标记开始之前,也可能发生在并发标记的过程中。

服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878