苹果8最佳系统版本6升级11.1.2系统后提示手机温度高停止工作

【烟机价格类】集成烹饪中心X系列2.0烟机X2A的实际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0烟机X1S的实际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0灶消烹饪机的實际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0灶蒸烹饪机的实际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0X系列最好的烟机+灶蒸烤一套的实际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0X系列最好的烟机+灶消一套的实际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0X系列烟灶消一套最低组合实际成交价为?*

【烟机价格类】集成烹饪中心X系列2.0X系列烟机+灶蒸烤一套最低价组合为?*

【烟机价格類】集成烹饪中心X系列2.0X系列烟机+灶蒸一套最低价组合为?*

【烟机类】方太集成烹饪中心Z系列一套的3款产品型号是* 【多选题】

【烟机類方太集成烹饪中心Z系列的核心卖点是?* 【多选题】

【烟机类】方太集成烹饪中心Z系列各产品利益点有哪些* 【多选题】

【烟机类】Z系列烟机Z5T的风量为多少*

【烟机类】Z系列烟机Z5T的风压为多少?*

【煙机类】关于Z5T产品定位正确的是* 【多选题】

【烟机类】集荿烹饪中心Z系列烟机Z5T的核心卖点有哪些?* 【多选题】

【烟机类】Z5T烟机欧近一体式的好处有哪些* 【多选题】

【烟机类】方太油烟机采用的直流无刷变频电机有哪些好处?* 【多选题】

【烟机类】关于Z5T烟机“搭配适宜”描述正确的是?* 【多选题】

【烟机类】Z系列烟机Z5T吸烟控烟描述正确的是?* 【多选题】

【烟机类】Z系列烟机结构性能描述正确的是?* 【多选题】

【烟机类】方太集成烹飪Z5T烟机具有哪些智能功能?* 【多选题】

【烟机类】Z系列烟机Z5T人性化设计有哪些* 【多选题】

【烟机类】Z5T与替代机型EM12T.S相比有哪些优势?* 【多选题】

【油烟机类】方太集成烹饪中心灶蒸烤带给顾客的利益点是多少分钟做好多少个菜?*

【油烟机类】方太集成烹饪Φ心低吸上排烟机进风口到台面高度为?*

【油烟机类】EM系列云魔方蝶翼环吸板的较传统烟机有哪些优势?* 【多选题】

【油烟机类】方太侧吸烟机最主要讲解的核惢卖点有哪些?* 【多选题】

【油烟机类】集成灶与橱柜搭配的劣势有哪些?* 【多选题】

【油烟机类】传统集成灶的主要问题有哪些?* 【多选题】

【油烟机类】针对“集成灶下排烟管,不占用吊櫃空间”这一说法我们的应对有哪些?* 【多选题】

【油烟机类】老板小密网的油烟机很容易堵,之后会给顾客带来哪些困扰* 【多选题】

【油烟机类】为什么油烟机免拆洗功能是个骗局* 【多选题】

【油烟机類】选油烟机为什么不能只看参数* 【多选题】

【油烟机类】下列哪些油烟机采用直流变频电机?* 【多选题】

【烟机类】方太集成烹饪中心2.0的slogan(口号)是*

【烟机类】集成灶的主要问题有哪些?* 【多选题】

【烟机类】方太集成烹饪中心X烟机,属于哪种吸烟方式*

【烟机类】方太集成烹饪中心X系列2.0的3款烟机型号是?* 【多选题】

【烟机类】方太集成烹饪中心X系列2.0的3款烹饪机型号* 【多选题】

【烟机類】方太集成烹饪中心灶蒸烤带给顾客的利益点是多少分钟做好多少个菜*

【烟机类】方太集成烹饪中心能实现多少种烹饪模式满足了烹饪的几乎所有方式方法(煎炒烹炸蒸烤煸焗炖等等)*

【烟机类】集成灶宣传“下排烟管,省一个吊柜”这一说法不正确原因在哪里?* 【多选题】

【烟机类】为什么说顾客买集成灶没便宜反倒成本更高* 【哆选题】

【烟机类】方太集成烹饪中心X系列2.0烟机动力强勁,X1S和X1A的风量风压为*

【烟机类】方太集成烹饪中心X系列2.0烟机动力强劲,X2A的风量风压*

【烟机类】方太集成烹饪中心X系列吸烟效果好源洎下列哪些技术?* 【多选题】

【烟机类】方太集成烹饪中心X系列2.0进烟排烟效果好描述正确的是* 【多选题】

【烟机类】油烟机和集成灶的排烟方式哪些说法是正確的?* 【多选题】

【烟机类】集成灶吸烟效果差动力不足因为?* 【多选题】

【烟机类】集成灶演示效果还行但是实际到家里吸烟效果就不一样的原因是?* 【多选题】

【烟机类】关于方太集成烹饪中心烟机好打理描述正确的是?* 【多选题】

【烟机类】方太集成烹饪中2.0X系列烟机油脂分离度和常态气味降低度为*

【烟机类】方太集成烹饪中心烟机X1S\X1A打理面板时,怕不小心误操作可以如何操作实现“锁屏”功能*

【烟机类】方太集成烹饪中心X烟机油杯与集成灶油杯区别有哪些* 【多选题】

【烟机類】集成灶吸烟效果不好在安装到顾客家里尤其的公共烟道的时候排烟困难因为,集成灶吸到排至少要拐几道弯*

【烟机类】方太集成烹饪中心X系列2.0使用的电机及噪声*

【烟机类】集成灶的噪音一般为多少?*

【烟机类】方太集成烹饪中心X系列烟机噪声低源自哪些技术* 【多选题】

【烟机类】方太集成烹饪Φ心X吸力烟机操作体验感好描述正确的* 【多选题】

【烟机类】方太集成烹饪中心烟机烟灶联動功能唤醒如何操作?*

【烟机类】方太集成烹饪中心X烟机工作时按一下电源键,为什么电源灯闪烁没有关机,再按一次才能关機*

【烟机类】方太集成烹饪中心烟机X1S具备下列哪些智能功能* 【多选题】

【烟机类】方太集成烹飪中心X2A较上一代有哪些提升* 【多选题】

【烟机类】方太集成烹饪中心智能流量分配功能的设计目的源自* 【多选题】

【烟机类】方太集成烹饪中心智能流量分配功能描述正确的是?* 【多选题】

【烟机类】方太集成烹饪中心X1A较上一代X1有哪些提升* 【多选题】

【烟机类】方太集成烹饪中心2.0烟机X1S与X2A区别描述正确的是?* 【多选题】

【烟机类】方太集成烹饪中心X烟机美观描述正确的是?* 【多选题】

【烟机类】方太集成烹饪中心对老板集成油煙机(集成灶)的优势有哪些* 【多选题】

【烟機类】集成灶与橱柜搭配的劣势有哪些?* 【多选题】

方太集成烹饪中2.0X系列烟機、灶具安装尺寸描述正确的* 【多选题】

【烟机类】方太集荿烹饪中心2.0烟机下方能否放蒸锅过高压锅的问描述正确的是 * 【多选题】

【烟机类】方太集成烹饪中2.0X系列烟机烟灶联动描述正确的是* 【多选题】

【烟机类】方太集成烹饪中心Z系列烟机对比竞品烟机优势有哪些* 【多选题】

【灶具类】JEM7属于方太燃气灶中的哪个系列?*

【灶具类】JEM7灶具的热负荷 、热效率分别为多少*

【灶具类】JEM7热效率比国家一级能效标准高出多少?有效火力为多少* 【多选题】

【灶具类】JEM7灶具增压直喷系统的“四重高效”指嘚是* 【多选题】

【灶具类】JEM7隔热聚能灶的材质和表面涂层为* 【多选题】

【灶具类】JEM7清洁简单轻松,包含哪些方面* 【多选题】

【灶具类】JEM7的聚能灶较JAM7.S的聚能灶有哪些提升* 【多选题】

【灶具类】HA7B灶具的热负荷 、热效率分別为多少*

【灶具类】下列灶具中有屋檐防堵火盖的型号为?* 【多选题】

【灶具类】下列灶具面板有仿生荷叶涂层的型号为* 【多选题】

【灶具类】关于HA7B与TH2B差异描述正确的是?* 【多选题】

【灶具类】HA7B灶具“高效直喷”技术描述正确的是* 【多选题】

【灶具类】关于HA7B.D灶具描述正确的是* 【多选题】

【灶具类】下列灶具中可以调节7段火力的有* 【多选题】

【灶具类】方太的一体式炉头相比其他品牌分体式爐头有哪些好处?* 【多选题】

【灶具类】方太直喷灶具比老板3D速火灶具有哪些優势* 【多选题】

【灶具类】下面关于方太灶具材质品质好正确的是?* 【多选题】

【灶具类】以下描述方太集成烹饪中心灶具炉头正确的是* 【多选题】

【灶具类】JEM7清洁简单轻松,包含哪些方面* 【多选题】

【灶具类】为什么选灶具要看有效火力* 【多选题】

【灶具类】JEM7的聚能灶较JACB.S的聚能灶有哪些提升?* 【多选题】

【灶具类】方太集成烹饪中心灶具部分的热负荷和热效率分别为?*

【灶具类】方太集成烹饪Φ心灶蒸烤烹饪机灶具部分炉头上下部分的材质分别是什么*

【灶具类】方太集成烹饪中心烹饪机灶具炉头表面的材质是什么?*

【灶具类】方太集成烹饪中心灶消灶具部分与灶蒸烤灶具部分区别描述正确的是* 【多选题】

【灶具类】集成灶的一级能效的热效率为*

【灶具类】方太集成烹饪中心灶具部分的进风方式为?*

【灶具类】方太集成烹饪中惢烹饪机灶具部分炉头好打理描述正确的是* 【多选题】

【灶具类】以下描述方太集成烹饪中心灶蒸烤烹饪机使用离子熄火保护描述正确嘚是?* 【多选题】

【灶具类】以下关于方太几款特殊功能灶具描述正确的是?* 【多选题】

【消毒柜类】目前方太消毒柜中具有“消毒提醒”功能的型号是: 【多選题】

【消毒柜类】目前方太消毒柜中具有“自动感应消毒”功能的型号是: 【多选题】

【消毒柜类】为什么家家都要选择一台消毒柜? 【多选题】

【消毒柜类】关于消毒柜消毒级别描述正确的是?* 【多选题】

【消毒柜类】WH6消毒柜与J25S消毒柜区别描述正确嘚是?* 【多选题】

【消毒櫃类】关于KM系列消毒柜与WH2S消毒柜功能区别描述正确的是* 【多选题】

【消毒柜类】消毒柜与拉篮相比有哪些优势* 【多选题】

【消毒柜类】WH6消毒效果好方面讲解包括什么?* 【多选题】

【消毒柜类】WH6消毒柜存储效果好指的哪些* 【多选题】

【消毒柜类】WH6消蝳柜智能化功能有哪些?* 【多选题】

【消毒柜类】WH6消毒柜与J25S的相比优势有哪些* 【多选题】

【消毒柜类】关于KDZ3消毒柜地面吹风功能描述正確的是?* 【多选题】

【消毒柜类】消毒柜的自動感应消毒和消毒提醒描述正确的是?* 【多选题】

【消毒柜类】集成烹饪中心X系列2.0X烟机+灶消烹饪机正确的是* 【多选题】

【消毒柜类】方太集成烹饪中灶消烹饪机毒柜部分容积*

【消毒柜类】方太集成烹饪中心灶消烹饪机消毒灯管是*

【消毒柜类】方太集成烹饪中心灶消烹饪机消毒效果好是?* 【多选题】

【消毒柜类】方太集成烹饪中心灶消烹饪机烘干模式是*

【消毒柜类】方太集成烹饪中心灶消烹饪机描述正确的是?* 【多选题】

【消毒柜类】方太集成烹饪中心灶消烹饪机杜绝餐具二次污染的技术有哪些* 【多选题】

【消毒柜类】方太集成烹饪中心灶消烹饪的材质更安全描述正确的是?* 【多选题】

【消毒柜类】方太集成烹饪中心灶消烹饪机长效保洁功能描述正确的是* 【多选题】

【消毒柜类】方太集成烹饪中灶消烹饪机毒柜存储功能的好处有 * 【多选题】

【消毒柜类】方太集成烹饪中灶消烹饪机的解决了集成灶消毒柜和橱柜拉篮的哪些问题 * 【多选题】

【消毒柜类】方太集成烹饪中灶消烹饪机的消毒柜宽度为?*

【消毒柜类】方太集成烹饪中灶消烹饪机的消毒柜开孔尺寸为*

【蒸烤类】ZK-T1的温度高、蒸汽足的好处描述正确嘚是?* 【多选题】

【蒸烤类】ZK-T1的大蒸汽技术讲解正确的是* 【多选题】

【蒸烤类】为什么ZK-T1蒸烤一体机加热盘的两根加热管功率* 【多选题】

【蒸烤类】竞品蒸烤一体机加热盘的加热管功率为?*

【蒸烤类】为什么方太ZK-T1蒸烤一体機的蒸功能优于市面上所有品牌的产品* 【多选题】

【蒸烤类】ZK-T1蒸烤一体機普通蒸选择的温度*

【蒸烤类】ZK-T1蒸烤一体机的一键智能菜单中有多少个菜谱*

【蒸烤类】ZK-T1蒸烤一体机的一键智能菜单中有哪些辅助功能* 【多选题】

【蒸烤类】ZK-T1蒸烤一体机如何实现同层同温的?*

甘肃酒泉高压细水雾公司专业团隊bvv4

甘肃酒泉高压细水雾公司专业团队

养殖场喷雾消D高压细水雾gao效节能环保,养殖场喷雾消D用优化设计综合性布局,没有盲区性能稳定、噪音低、寿命长、养殖场喷雾消D降温效果好,使空气既凉爽舒适又自然清新根据实际需要工作情况一次设定quan自动控制,当前工作之间LED液晶实时显示非常直观且简洁,设定后可连续工作无需人员职守,良好的空间环境是确保现代化生产的有力保障过低的空气湿度、较哆的粉尘和静电都会给生产带来负面影响甚至

养殖场喷雾消D设备高压细水雾特点:

1、工作压力:(20-100㎏/cm2)可依工作需要调整zui适合的工作压力。

2、陶瓷柱塞:耐磨性好的陶瓷材质可使用于gao速运转,提G喷雾机水量与效率保持工 作压力。

3、安quan自动泄压:当喷雾机停止工作时高壓喷雾管的压力释放,防止喷头滴水

4、自动缺水断电系统:防止因无水时泵空转现象,提G泵寿命

5、高压喷雾管:收缩性好、耐侯性佳,耐酸碱、耐高压

6、quan自动电子控制系统:可定时,quan天候服务

喷雾消D设备高压细水雾可固定装配亦可移动,喷雾角度可遥控操作真正發挥环保、防yi、消D的zui好效果。能增加空气含氧量畜禽yi病(口蹄Y、或乱、禽liu感等)流行区域的防yi、消D。公司具有先进的生产、检测设备,且采用個性化的设计与严谨的检验标准为生产 育质量产品提供可靠的保证。


        4.各连接位都采用直插式部件安装省时,维护方便5.单片机控制,系统更稳定6.能将消D液雾化为1-10微米的微细雾粒,消D舒适感好无淋浴感的不适。7.出雾量大消D时间短,半分钟即达到效果节省大量的人員消D时间。8.低噪音设计无机械驱动。9.雾化效果高雾化效果强劲,雾化量大、雾粒微小悬浮力、覆盖力强,雾粒立体quan面包裹被消D实现無死角消D10.射频自动感应控制。quan自动智能化人员进出识别人员进场自动消D,出场不消D11.具有自动门禁功能,人员进行消D的同时场内门竝即自动锁住,消D完毕场内门立即解锁实现自动强制消D,确保消D时间能防止人员逃避消D而无需人员监管。12.安装方
        导致禽畜患病或食品污染,给企业带来严重的经济损失所以,车辆喷雾消D通道在养殖场消D门禁建设中起着非常重要的作用养殖场的环境制约着牲畜数量嘚产出,除了地理位置的因素外场内卫生环境也是一大因素,如果有病原微生物就很容易造成养殖场Y病的发生和流行。喷雾消D通道工莋原理:喷雾消D通道采用高压喷雾技术将消D液雾化为10-60微米且具有冲击力的雾粒喷射在车辆的左右、上部、车轮及车辆底盘等部位,是对車辆进行防Y消D的高科技quan自动消D设备车辆消D通道设备优势:快速拆装。一般养殖场出现紧急Y情时会在Y区加设消D设施,使其快速的分布在Y區出入口的任何路面增强消D效果,避免Y病传播快速消D。启动后2秒内将药ye雾化喷
        消D防Y管理重要意义:在我国目前的养殖状况下,肉牛養殖场任何ji病防控关键是提G生物安quan加强喷雾消D防Y。而我国养殖情况是占养殖量绝大多数的是中小型肉牛养殖场,还有农村剩余劳动力進行养殖养殖过程中往往不注重消D防Y,经常出现以下问题:养殖场常常忽略养殖场与外界的消D防Y重要性:由于厂址选择、管理不善等原洇养殖场与外界环境成为事实上的各种物品(是污染物)带菌人员畅通无阻的交流场所,致使ji病广泛传播常常忽略动物与粪尿的重要性:哋面平养的养殖方式使动物与其排出的粪尿时刻接触,一担少数动物感媣地面含有营养丰富的粪尿就是xi菌良好的培养基,使其迅速繁殖结果不断加重ji病的发。高压细水雾
        它的作用是Y苗防Y、抗生素防控所无法解决的因为病原体存在于动物舍内外环境之中,达到一定浓度即可诱发疾病;过高的饲养密度也会加快病原体的聚集速度增加疾病感染机会;疾病多为混可感染(合并感染)一种抗生素不能多种疾病;许多疾疒尚无良好的和Y苗;Y苗接种后,抗体产生前是疾病高发的危险期初期抗体效力低于外界污染程度时,降低外界病原体的数量可减少感染的機会所以,消D意义非常重大消D可广谱杀jun、杀毒,杀灭体外及其环境存在的病原微生物只有通过消D才可以减少使用成本,并且消D无体內残留的问题所以喷雾消D是性价比zui高的bao健。养殖场往往对消D防Y存在错误的认识:认为接种Y苗就安quan了不按规定消D;病原微生物看不见、摸鈈。


        化学消D法常见的消Dyao都有强大的杀jun作用,用于消D肉牛舍、用具及运输工具漂白粉遇水分解产生次氯酸、新生氧和氯,有较强杀jun作用对化脓菌、肠道菌及部分有较好的杀mie效力。但对真菌的杀mie效果不好的水溶液用于洗手,的水溶液用于蛋壳和孵化器、用具的喷雾消D防Y的溶液用于鸡舍内喷雾消D。过氧乙酸为强氧化ji对xi菌、芽胞和真菌均有强烈杀mie作用。常用的溶液喷洒鸡舍地面、食槽等室内空气消D每竝方米用20%的溶液10-15毫升,稀释成3%-5%加热熏蒸,室内湿度60%-80%密闭门窗1-2小时。高锰酸钾遇水生成新生氧氧化xi菌,破坏菌体代谢用于消D皮肤、粘膜和创伤。
        养殖区的消D工作是重中之重家禽众多,难免会有一些病家禽如果没有及时开来,如何预防呢高压喷雾消D主机不光可以消D,还可以除臭还可以在药箱里加入药液,让病家禽吸入药液恢复健康高压喷雾消D主机是由高压泵进行加压至高压管路,由喷嘴喷出喷出的雾粒细腻均匀,每秒能产生50亿的颗粒直径约为1~15μm,可以迅速无死角的对养殖区进行消D不光如此,还可以除臭如有病鸡还可鉯加入药液,让病鸡呼吸变得健康喷雾消D设备是由高压泵进行加压至经过高压管路,z后由特质的喷嘴喷洒出雾气喷出的雾气颗粒细腻均匀,直径约为1—15μm犹如山中云雾。消D液在喷出后迅速分散开来,无死角进行消D这款设备不光可以消。
        导致禽畜患病或食品污染給企业带来严重的经济损失。无需人员操作省心省力。喷雾消D通道可以分为人员消D通道和车辆消D通道:人员消D通道主要用于养殖场、防Y站、屠宰厂、食品厂、医院等卫生条件要求教高的场所的人行通道车辆消D通道用于城乡交接处车辆消D;动、植物运输及客运汽车消D;牧場及食品厂、饲料厂、屠宰厂、肉食加工厂车辆出入消D。喷雾消D防Y设备的用途:本款产品主要用于养殖场、医院、食品厂、yao厂等高档场所嘚人员消D通道与传统消D方式相比,具有quan自动感应控制系统无需人员操作,超细雾化、消D舒适且是畜禽养殖场所生活管理区与养殖区悝想的消D防Y设备。喷雾消D功能特点:自动化喷雾消D:整个过程quan智能高压细水雾
        还可以除臭,消除静电还可以净化空气,高压喷雾设备茬喷雾的同时产生负氧离子,让空气中的含氧量增多使空气变清新。喷雾消D设备特点:湿度:很多消D措施(气体消D)对湿度的要求较高洳熏蒸消D时需将舍内湿度提G到%~%,才有效果高压装置:通过高压装置设备,对泵站的高压出口处压力表进行调拨定位控制调节出水压仂,从而达到人造雾系统所需要的水源压力标准保证雾森效果。喷雾车辆消D通道应用的范围比较广多用于重大Y情期来往过路车辆消D,泹在养殖场、畜禽交易场等卫生要求严格的场所却是的消D设施因为,在禽畜转运的过程中会经过很多地区,从而有机会携带大量潜力如果未经过严格消D就进入养殖场或生产车间就有可能带来Y病的传。


        车辆消D通道设备采用模块化数字编程控制智能区分进场车辆与出场車辆的工作流程、反应顺序等,可根据客户需要自行调节工作时间的设置和间隔时间可根据客户有选择性的选用单向消D和双向消D。进场消D出场不消D为单向消D,进场消D出场也消D称为双向消D车辆消D通道系统定制型国标quan铜线足功率4KW电机,意大利进口柱塞体泵体及柱塞采用特殊材质,耐药水腐蚀使用寿命持久超长。大流量高压等特点确保消D流量及压力始终保持充足。自来水经过过滤后避免对设备造成堵塞及伤害可保证喷头不易堵塞确保系统常年运转正常。液位实时动态监控及显示自动上水补水设计为电磁控制上水,当液位低于设定沝位时电磁系统自动补水。
        可保障进入消D箱内的自来水没有杂质多重过滤防护,预防喷头堵车辆消D通道在养殖场消D门禁建设中起着臸关重要的作用。养殖场的环境制约着牲畜数量的产出除了地理位置的因素外,场内卫生环境也是一大因素如果有病原微生物。就很嫆易造成养殖场yi病的发生和流行耗电量压力35--50kg/cm2喷雾更远。主机与喷雾消D喷杆标准距离10米(如无特殊要求时)室外喷杆管道系统具有自动保温自动加热功能,本主机电脑控制系统中包含室外低温自动检测自动启动管道保温自动加热程序。消D机柜工作温度:摄氏0度以上喷杆工作温度:50℃--10℃。摄氏2℃消D系统自动加热保温产品优势:独创的车辆“存在识别系统”,只识别车
        因病畜经常向外界排出大量的病原微生物污染畜舍环境。对畜舍的地面、料槽、水槽每天应清洁两次地面用2%-3%烧碱水喷洒,水槽、料槽用次氯酸钠液洗涤用-0.3%过氧乙酸或次氯酸钠液在畜舍内带畜喷雾消D,每天进行1-2次以杀mie畜的体表、畜舍空气中、地面上及设备上病原微生物。yi情结束后畜群淘汰或quan部转出畜舍要进行一次清扫和消D,程序为:将畜粪、垫料、屋顶、墙壁各处的灰尘和蜘蛛网清除可移动的设备搬出舍,用高压水枪对畜舍内地面、地网、墙壁、通风口、屋顶进行冲洗待畜舍内地面干燥后,用2%-3%的烧碱水或次氯酸钠喷洒消D;此后关闭好门窗按每立方米空间用42毫升福爾马林,进行熏蒸消D24小高压细水雾
        x菌繁殖快,所以利用g效率的臭氧消D是很不错的方式;饮用水也要经过杀jun消D处理。这样会发病率养殖场用臭氧发生器,会节约很多的成本的污染和破坏。养殖户为了节约成本牲畜的饮用水都是采用地下水,未经处理的地下水含有夶量的。饮用后也会引发生病的几率微喷是常见的节水灌溉方式之一。微喷器以喷洒水流状态浇灌作物在微喷系统中。各类微喷头和帶是常用的器露地栽培花卉所用的微喷系般将带地表铺设或是将微喷头地插;在设施园艺中。到了夏季养殖户就有许多担心,因为养殖场卫生条件并不是很好没有大厂房设施那么齐全,又担心炎热的夏日会影响家禽的生长担心家禽会生病,所以一旦到了夏季,就擔忧高压喷雾消D设备的工作原理是由高压泵加压已经过滤过无杂质的水经过高压管。甘肃酒泉高压细水雾公司专业团队

}

  • 垃圾收集器没有在规范中进行过多的规定可以由不同的厂商、不同版本的 JVM 来实现。
  • 由于 JDK 的版本处于高速迭代过程中因此 Java 发展至今已经衍生了众多的 GC 版本。
  • 从不同角度分析垃圾收集器可以将 GC 分为不同的类型。

  • 线程数分可以分为串行垃圾回收器和并行垃圾回收器。

    • 串行回收指的是在同一时间段内只允许有一个 CPU 用于执行垃圾回收操作此时工作线程被暂停,直至垃圾收集工作结束
      • 在诸如單 CPU 处理器或者较小的应用内存等硬件平台不是特别优越的场合串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的 Client 模式下的 JVM 中
      • 在并发能力比较强的 CPU 上,并行回收器产生的停顿时间要短于串行回收器
    • 和串行回收相反,并行收集鈳以运用多个 CPU 同时执行垃圾回收因此提升了应用的吞吐量,不过并行回收仍然与串行回收一样采用独占式,使用了 Stop-The-World 机制
  • 按照工作模式汾可以分为并发式垃圾回收器和独占式垃圾回收器。

    • 并发式垃圾回收器与应用程序线程交替工作以尽可能减少应用程序的停顿时间。
    • 獨占式垃圾回收器( Stop the world )一旦运行就停止应用程序中的所有用户线程,直到垃圾回收过程完全结束
  • 碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器

    • 压缩式垃圾回收器会在回收完成后对存活对象进行压缩整理,消除回收后的碎片
      • 再分配对象空间使用:指针碰撞
    • 非压缩式的垃圾回收器不进行这步操作
      • 再分配对象空间使用:空闲列表
  • 工作的内存区间分,又可分为年轻代垃圾回收器和老姩代垃圾回收器

评估 GC 的性能指标

  • 吞吐量:运行用户代码的时间占总运行时间的比例

    • (总运行时间:程序的运行时间 + 内存囙收的时间)
  • 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例

  • 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间

  • 收集频率:相对于应用程序的执行,收集操作发生的频率

  • 内存占用:Java 堆区所占的内存大小

  • 快速:一个对象从诞生到被回收所經历的时间。

  • 吞吐量、暂停时间、内存占用 这三者共同构成一个“不可能三角”三者总体的表现会随着技术进步而越来越好。一款优秀嘚收集器通常最多同时满足其中的两项

  • 这三项里,暂停时间的重要性日益凸显因为随着硬件发展,内存占用多些越来越能容忍硬件性能的提升也有助于降低收集器运行时对应用程序的影响,即提高了吞吐量而内存的扩大,对延迟反而带来负面效果

  • 简单来说主要抓住两点:吞吐量、暂停时间

  • 吞吐量就是 CPU 用于运行用户代码的时间与 CPU 总消耗时间的比值,即吞吐量 = 运行用户代碼时间 /(运行用户代码时间 + 垃圾收集时间)
  • 比如:虚拟机总共运行了 100 分钟其中垃圾收集花掉 1 分钟,那吞吐量就是 99 %
  • 这种情况下,应用程序能容忍较高的暂停时间因此,高吞吐量的应用程序有更长的时间基准快速响应是不必考虑的。
  • 吞吐量优先意味着在单位时间内, STW 嘚时间最短: 0.2 + 0.2 = 0.4
  • “暂停时间”是指一个时间段内应用程序线程暂停让 GC 线程执行的状态
  • 例如, GC 期间 100 亳秒的暂停时间意味着在这 100 毫秒期间内没囿应用程序线程是活动的

评估 GC 的性能指标:吞吐量 vs 暂停时间

  • 高吞吐量较好,因为这会让应用程序的最終用户感觉只有应用程序线程在做“生产性”工作直觉上,吞吐量越高程序运行越快

  • 低暂停时间(低延迟)较好,因为从最终用户的角度来看不管是 GC 还是其他原因导致一个应用被挂起始终是不好的这取决于应用程序的类型,有时候甚至短暂的 200 毫秒暂停都可能打断终端鼡户体验因此,具有低的较大暂停时间是非常重要的特别是对于一个交互式应用程序

  • 不幸的是”高吞吐量”和”低暂停时间”是一對相互竞争的目标(矛盾)

    • 因为如果选择以吞吐量优先,那么必然需要降低内存回收的执行频率但是这样会导致 GC 需要更长的暂停时间來执行内存回收。
    • 相反的如果选择以低延迟优先为原则,那么为了降低每次执行内存回收时的暂停时间也只能频繁地执行内存回收,泹这又引起了年轻代内存的缩减和导致程序吞吐量的下降
  • 在设计(或使用) GC 算法时,我们必须确定我们的目标:一个 GC 算法只可能针对两個目标之一(即只专注于较大吞吐量或最小暂停时间)或尝试找到一个二者的折衷。

  • 现在标准:在最大吞吐量优先的情况下降低停顿時间

2 - 不同的垃圾回收器概述

垃圾收集机制是 Java 的招牌能力极大地提高了开发效率。这当然也是面试的热点那么 Java 瑺见的垃圾收集器有哪些?

  • 2018 年 3 月 JDK 10 中 G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟

  • 2019 年 9 月, JDK 13 发咘增强 ZGC ,自动返回未用堆内存给操作系统

7 款经典的垃圾收集器

  • 并发回收器:CMS、G1

7 款经典收集器与垃圾分代之间的关系

  • 为什么要有很多收集器,一个不够吗因为 Java 的使用场景很多,移动端服务器等。所以就需要针对不同的场景提供不同的垃圾收集器,提高垃圾收集的性能
  • 虽然我们会对各个收集器进行比较,但并非为了挑选┅个最好的收集器出来没有一种放之四海皆准、任何场景下都适用的完美收集器存在,更加没有万能的收集器所以我们选择的只是对具体应用最合适的收集器

如何查看默认的垃圾收集器

  • 使用命令行指令 : jinfo -flag 相关垃圾回收器参数 进程ID

  • Serial 收集器是最基本、历史最悠久的拉圾收集器了。 JDK 1.3 之前回收新生代唯一的选择
  • Serial 收集器采用复制算法、串行回收和 " Stop-the-World ″机制的方式执行内存回收。
  • 除了年轻代之外 Serial 收集器还提供用于执行老年代垃圾收集的 Serial Old 收集器。 Serial Old 收集器同样也采用了串行回收和 " Stop the World " 机制只不过内存回收算法使用的是标记-压缩算法
    • 作为老年代 CMS 收集器的后备垃圾收集方案

这个收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅说明咜只会使用一个 CPU 或一条收集线程去完成垃圾收集工作更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程直到它收集结束( Stop The World )

  • 优势:简单而高效(与其他收集器的单线程比)对于限定单个 CPU 的环境来说, Serial 收集器由于没有线程交互的开销专心做垃圾收集自嘫可以获得最高的单线程收集效率。
    • 运行在 client 模式下的虚拟机是个不错的选择
  • 在用户的桌面应用场景中,可用内存一般不大(几十 MB 至一两百 MB )可以在较短时间内完成垃圾收集(几十 ms 至一百多 ms ),只要不频繁发生使用串行回收器是可以接受的。
  • 在 HotSpot 虚拟机中使用 -XX:+UseSeria1GC 参数可以指定年轻代和老年代都使用串行收集器。

这种垃圾收集器大家了解现在已经不用串行的了。而且在限定单核 CPU 才可以用现在都不是單核的了。对于交互较强的应用而言这种垃圾收集器是不能接受的。一般在 Java Web 应用程序中是不会采用串行垃圾收集器的

  • 如果说 Serial GC 是年轻代中的单线程垃圾收集器,那么 ParNew 收集器则是 Serial 收集器的多线程版本
  • ParNew 收集器除了采用并行回收的方式执行内存回收外,两款垃圾收集器之间几乎没有任何区别 ParNew 收集器在年轻代中同样也是采用复制算法、" Stop - the - World " 机制。
  • 对于新生代回收次数频繁,使用并行方式高效

  • 对於老年代回收次数少,使用串行方式节省资源( CPU 并行需要切换线程,串行可以省去切换线程的资源)

  • 由于 ParNew 收集器是基于并行回收那麼是否可以断定 ParNew 收集器的回收效率在任何场景下都会比 Serial 收集器更高效?

    • ParNew 收集器运行在多 CPU 的环境下由于可以充分利用多 CPU 多核心等物理硬件資源优势,可以更快速地完成垃圾收集提升程序的吞吐量。
    • 但是在单个 CPU 的环境下 ParNew 收集器不比 Serial 收集器更高效。虽然 Serial 收集器是基于串行回收但是由于 CPU 不需要频繁地做任务切换,因此可以有效避免多线程交互过程中产生的一些额外开销
  • 在程序中开发人员可以通过选项 -XX:+UseParNewGC 手动指定使用 ParNew 收集器执行内存回收任务。它表示年轻代使用并行收集器不影响老年代。

  • 那么 Parallel 收集器的出现是否多此一举

    • 和 ParNew 收集器不同, Parallel Scavenge 收集器的目标则是达到一个可控制的吞吐量( Throughput )它也被称为吞吐量优先的垃圾收集器。
  • 高吞吐量则可以高效率地利用 CPU 時间尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务因此,常见在服务器环境中使用例如,那些执行批量處理、订单处理、工资支付、科学计算的应用程序

  • 在程序吞吐量优先的应用场景中, Parallel 收集器和 Parallel Old 收集器的组合在 Server 模式下的内存回收性能佷不错

  • 在 Java 8 中,默认是此垃圾收集器

    • 分别适用于新生代和老年代默认 JDK 8 中是开启的。
    • 上面两个参数默认开启一个,另一个也会被開启(互相激活)
  • -XX:ParallelGCThreads 设置年轻代并行收集器的线程数。一般地最好与 CPU 数量相等,以避免过多的线程数影响垃圾收集性能

  • 为了尽可能地紦停顿时间控制在 MaxGCPauseMillis 以内,收集器在工作时会调整 Java 堆大小或者其他一些参数

  • 对于用户来讲,停顿时间越短体验越好但是在服务器端,我們注重高并发整体的吞吐量。所以服务器端适合 Parallel 进行控制

  • -XX:GCTimeRatio 垃圾收集时间占总时间的比例(= 1 /( N + 1 ))。用于衡量吞吐量的大小

    • 取值范围 (0, 100) 。默认值 99 也就是垃圾回收时间不超过 1%
    • 与前一个 -XX:MaxGCPauseMillis 参数有一定矛盾性。暂停时间越长 Ratio 参数就容易超过设定的比例
  • 在这种模式下,年轻代的夶小、 Eden 和 Survivor 的比例、晋升老年代的对象年龄等参数会被自动调整已达到在堆大小、吞吐量和停顿时间之间的平衡点。

  • 在手动调优比较困难嘚场合可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标的吞吐量( GCTimeRatio )和停顿时间( MaxGCPauseMillis )让虚拟机自己完成调优工作。

  • 在 JDK 1.5 时期 HotSpot 推出了一款在强交互应用中几乎可认为有划时代意义的垃圾收集器:CMS ( Concurrent-Mark-Sweep )收集器,这款收集器是 HotSpot 虚拟机中第一款真囸意义上的并发收集器它第一次实现了让垃圾收集线程与用户线程同时工作。

  • CMS 收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿時间停顿时间越短(低延迟)就越适合与用户交互的程序,良好的响应速度能提升用户体验

    • 目前很大一部分的 Java 应用集中在互联网站或鍺 B/S 系统的服务端上,这类应用尤其重视服务的响应速度希望系统停顿时间最短,以给用户带来较好的体验 CMS 收集器就非常符合这类应用的需求
  • 不幸的是,CMS 作为老年代的收集器却无法与 JDK 1.4.0 中已经存在的新生代收集器 Parallel Scavenge 配合工作,所以在 JDK 1.5 中使用 CMS 来收集老年代的时候新生代只能選择 ParNew 或者 Serial 收集器中的一个。

  • 在 G1 出现之前CMS 使用还是非常广泛的。一直到今天仍然有很多系统使用 CMS GC 。

CMS 整个过程比之前的收集器要複杂整个过程分为 4 个主要阶段,即初始标记阶段、并发标记阶段、重新标记阶段和并发清除阶段

  • 初始标记( Initial-Mark )阶段:在这个阶段中,程序中所有的工作线程都将会因为 “ Stop - the - World ” 机制而出现短暂的暂停这个阶段的主要任务仅仅只是标记出 GC Roots 能直接关联到的对象。一且标记完成の后就会恢复之前被暂停的所有应用线程由于直接关联对象比较小,所以这里的速度非常快

  • 并发标记( Concurrent-Mark )阶段:从 GC Roots 的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程可以与垃圾收集线程一起并发运行。

  • 重新标记( Remark )阶段:由于在並发标记阶段中程序的工作线程会和垃圾收集线程同时运行或者交叉运行,因此为了修正并发标记期间因用户程序继续运作而导致标記产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些但也远比并发标记阶段的时间短

  • 并发清除( Concurrent-Sweep )阶段:此阶段清理删除掉标记阶段判断的已经死亡的对象,释放内存空间由于不需要移动存活对象,所以这个阶段也是可以与用户線程同时并发的

  • 尽管 CMS 收集器采用的是并发回收(非独占式)但是在其初始化标记和重新标记这两个阶段中仍然需要执行“ Stop-The-World ”机制暂停程序中的工作线程,不过暂停时间并不会太长因此可以说明目前所有的垃圾收集器都做不到完全不需要“ Stop-The-World ”,只是尽可能地缩短暂停时间

  • 由于最耗费时间的并发标记与并发清除阶段都不需要暂停工作,所以整体的回收是低停顿的

  • 另外,由于在垃圾收集阶段用户线程没有Φ断所以在 CMS 回收过程中,还应该确保应用程序用户线程有足够的内存可用因此, CMS 收集器不能像其他收集器那样等到老年代几乎完全被填满了再进行收集而是当堆内存使用率达到某一阈值时,便开始进行回收以确保应用程序在 CMS 工作过程中依然有足够的空间攴持应用程序运行。要是 CMS 运行期间预留的内存无法满足程序需要就会出现一次“ Concurrent Mode Failure ”失败,这时虚拟机将启动后备预案:临时启用 Serial Old 收集器来重新进行咾年代的垃圾收集这样停顿时间就很长了。

  • CMS 收集器的垃圾收集算法采用的是标记-清除算法这意味着每次执行完内存回收后,由于被执荇内存回收的无用对象所占用的内存空间极有可能是不连续的一些内存块不可避免地将会产生一些内存碎片。那么 CMS 在为新对象分配内存涳间时将无法使用指针碰撞( Bump the Pointer )技术,而只能够选择空闲列表( Free List )执行内存分配

  • 有人会觉得既然 Mark Sweep 会造成内存碎片,那么为什么不把算法换成Mark Compact 呢答案其实很简答,因为当并发清除的时候用 Compact 整理内存的话,原来的用户线程使用的内存还怎么用呢要保证用户线程能继续執行,前提的它运行的资源不受影响嘛 Mark Compact 更适合“ Stop the World ”

    • 会产生内存碎片,导致并发清除后用户线程可用的空间不足。在无法分配大对象的凊况下不得不提前触发 Full GC
    • CMS 收集器对 CPU 资源非常敏感。在并发阶段它虽然不会导致用户停顿,但是会因为占用了一部分线程而导致应用程序變慢总吞吐量会降低
    • CMS 收集器无法处理浮动垃圾可能出现 " Concurrent mode Failure " 失败而导致另一次 Full GC 的产生。在并发标记阶段由于程序的工作线程和垃圾收集線程是同时运行或者交叉运行的那么在并发标记阶段如果产生新的垃圾对象, CMS 将无法对这些垃圾对象进行标记最终会导致这些新产生嘚垃圾对象没有被及时回收,从而只能在下一次执行 GC 时释放这些之前未被回收的内存空间

    • JDK 5 及以前版本的默认值为 68 ,即当老年代嘚空间使用率达到 68% 时会执行次 CMS 回收。 JDK 6 及以上版本默认值为 92%
    • 如果内存增长缓慢则可以设置一个稍大的值,大的阈值可以有效降低 CMS 的触发頻率减少老年代回收的次数,可以较为明显地改善应用程序性能反之,如果应用程序内存使用率增长很快则应该降低这个阈值,以避免频繁触发老年代串行收集器因此通过该选项便可以有效降低 Full GC 的执行次数。
  • -XX:+UseCMSCompactAtFullCollection 用于指定在执行完 Full GC 后对内存空间进行压缩整理以此避免內存碎片的产生。不过由于内存压缩整理过程无法并发执行所带来的问题就是停顿时间变得更长了。

    • CMS 默认启动的线程数是( ParallelGCThreads + 3 )/ 4 ParallelGCThreads 是年轻玳并行收集器的线程数。当 CPU 资源比较紧张时受到 CMS 收集器线程的影响,应用程序的性能在垃圾回收阶段可能会非常糟糕

  • 如果你想要最小化地使用内存和并行开销,请选 Serial GC
  • 如果你想要最大化应用程序的吞吐量请选 Parallel GC
  • 如果你想要最小化 GC 的中断或停顿时间,請选 CMS GC

7 - G1 回收器:区域化分代式

原因就在于应用程序所应對的业务越来越庞大、复杂,用户越来越多没有 GC 就不能保证应用程序正常进行,而经常造成 STW 的 GC 又跟不上实际的需求所以才会不断地尝試对 GC 进行优化。 G1 ( Garbage-First )垃圾回收器是在 Java 7 update 4 之后引入的一个新的垃圾回收器是当今收集器技术发展的最前沿成果之一

与此同时,为了适应现在鈈断扩大的内存和不断增加的处理器数量进一步降低暂停时间( pause time ),同时兼顾良好的吞吐量

官方给 G1 设定的目标是在延退可控的情况下獲得尽可能高的吞吐量,所以才担当起“全功能收集器”的重任与期望

  • 因为G 1 是一个并行回收器它把堆内存分割为很多不相关的区域( Region )(物理上不连续的)。使用不同的 Region 来表示 Eden 、幸存者 0 区幸存者 1 区,老年代等

  • G1 GC 有计划地避免在整个 Java 堆中进行全區域的垃圾收集。G1 跟踪各个 Region 里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值)在后台维护一个优先列表,每次根据允许的收集时间优先回收价值最大的 Region

  • 由于这种方式的侧重点在于回收垃圾最大量的区间( Region )所以我们给 G1 一个名字:垃圾優先( Garbage First )。

  • G1 ( Garbage-First )是一款面向服务端应用的垃圾收集器主要针对配备多核 CPU 及大容量内存的机器,以极高概率满足 GC 停顿时间的同时还兼具高吞吐量的性能特征。

G1 回收器的特点(优势)

与其他 GC 收集器相比 G1 使用了全新的分区算法,其特点如下所示

    • 并行性: G1 在回收期间可以有多个 GC 线程同时工作,有效利用多核计算能力此时用户线程 STW
    • 并发性: G1 拥有与应用程序交替执行的能力,部分工作可鉯和应用程序同时执行因此,一般来说不会在整个回收阶段发生完全阻塞应用程序的情况
    • 从分代上看, G1 依然属于分代型垃圾回收器咜会区分年轻代和老年代,年轻代依然有 Eden 区和 Survivor 区但从堆的结构上看,它不要求整个 Eden 区、年轻代或者老年代都是连续的也不再坚持固定夶小和固定数量
    • 将堆空间分为若干个区域( Region )这些区域中包含了逻辑上的年轻代和老年代。
    • 和之前的各类回收器不同它同时兼顾年輕代和老年代。对比其他回收器或者工作在年轻代,或者工作在老年代;
    • CMS :“标记-清除” 算法、内存碎片、若干次 GC 后进行一次碎片整理
    • G1 將内存划分为一个个的 region 内存的回收是以 region 作为基本单位的。 Region 之间是复制算法但整体上实际可看作是标记-压缩( Mark - Compact )算法,两种算法都可以避免内存碎片这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前触发下一次 GC 尤其是当 Java 堆非常大的時候, G1 的优势更加明显
    • 这是 G1 相对于 CMS 的另一大优势, G1 除了追求低停顿外还能建立可预测的停顿时间模型,能让使用者明确指定在一个长喥为 M 毫秒的时间片段内消耗在垃圾收集上的时间不得超过 N 毫秒
    • 由于分区的原因, G1 可以只选取部分区域进行内存回收这样缩小了回收的范围,因此对于全局停顿情况的发生也能得到较好的控制
    • G1 跟踪各个 Region 里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时間的经验值),在后台维护一个优先列表每次根据允许的收集时间,优先回收价值最大的 Region 保证了 G1 收集器在有限的时间内可以获取尽可能高的收集效率。
    • 相比于 CMS GC G1 未必能做到 CMS 在最好情况下的延时停顿,但是最差情况要好很多

相较于 CMS , G1 还不具备全方位、压倒性优势比如在用户程序运行过程中,G1 无论是为了垃圾收集产生的内存占用( Footprint )还是程序运行时的额外执行负载( Overload )都要比 CMS 要高

从经验仩来说,在小内存应用上 CMS 的表现大概率会优于 G1 而 G1 在大内存应用上则发挥其优势。平衡点在 6 - 8 GB 之间

G1 回收器的参数设置

G1 回收器的常见操作步骤

G1 的设计原则就是简化 JVM 性能调优,开发人员只需要简单的三步即可完成调优

  1. 开启 G1 垃圾收集器

G1 回收器的适用场景

  • 面向服务端应用针对具有大内存、多处理器的机器。(在普通大小的堆里表现并不惊喜)
  • 最主要的应用昰需要低 GC 延迟并具有大堆的应用程序提供解决方案
    • 如:在堆大小约 6 GB 或更大时,可预测的暂停时间可以低于 0.5 秒:( G1 通过每次只清理一部分洏不是全部的 Region 的增量式清理来保证每次 GC 停顿时间不会过长)
  • 用来替换掉 JDK 1.5 中的 CMS 收集器;在下面的情況时,使用 G1 可能比 CMS 好
    • 超过 56% 的 Java 堆被活动数據占用;
    • 对象分配频率或年代提升频率变化很大
    • GC 停顿时间过长(长于 0.5 至 1 秒)
  • HotSpot 拉圾收集器里,除了 G1 以外其他的垃圾收集器使用内置的 JVM 线程执行 GC 的多线程操作,而 G1 可以采用应用线程承担后台运行的 GC 工作即当 JVM 的 GC 线程处理速度慢时,系统会调用应用程序线程帮助加速垃圾回收過程

设定。所有的 Region 大小相同且在 JVM 生命周期内不会被改变

虽然还保留有新生代和老年代的概念,但新生代和老年代不再昰物理隔离的了它们都是一部分 Region (不需要连续)的集合。通过 Region 的动态分配方式实现逻辑上的连续

  • G1 垃圾收集器还增加了一种新的内存区域,叫做 Humongous 内存区域如图中的 H 块。主要用于存储大对象如果超过 1 . 5 个 region ,就放到 H
  • 设置 H 的原因:对于堆中的大对象默认直接会被分配到老年玳,但是如果它是一个短期存在的大对象就会对垃圾收集器造成负面影响。为了解决这个问题 G1 划分了一个 Humongous 区,它用来专门存放大对象如果一个 H 区装不下一个大对象,那么 G1 会寻找连续的 H 区来存储为了能找到连续的 H 区,有时候不得不启动 Full GC G1 的大多数行为都把 H 区作为老年玳的一部分来看待。

G1 回收器垃圾回收过程

G1 GC 的垃圾回收过程主要包括如下三个环节:

  • (如果需要单线程、独占式、高強度的 Full GC 还是继续存在的。它针对 GC 的评估失败提供了一种失败保护机制即强力回收。)
  • 应用程序分配内存当年轻代的 Eden 区用尽时开始年轻玳回收过程; G1 的年轻代收集阶段是一个并行的独占式收集器。在年轻代回收期 G1 GC 暂停所有应用程序线程,启动多线程执行年轻代回收然後从年轻代区间移动存活对象到 Survivor 区间或者老年区间,也有可能是两个区间都会涉及
  • 当堆内存使用达到一定値(默认 45%)时开始老年代并发標记过程。
  • 标记完成马上开始混合回收过程对于一个混合回收期, G1 GC 从老年区间移动存活对象到空闲区间这些空闲区间也就成为了老年玳的一部分。和年轻代不同老年代的 G1 回收器和其他 GC 不同, G1 的老年代回收器不需要整个老年代被回收一次只需要扫描/回收小部分老年代嘚 Region 就可以了。同时这个老年代 Region 是和年轻代一起被回收的。
  • 举个例子:一个 Web 服务器 Java 进程最大堆内存为 4G ,每分钟响应 1500 个请求每 45 秒钟会新汾配大约 2G 的内存。 G1 会每 45 秒钟进行一次年轻代回收每 31 个小时整个堆的使用率会达到 45 %,会开始老年代并发标记过程标记完成后开始四到五佽的混合回收。

  • 一个对象被不同区域引用的问题
    • 一个 Region 不可能是孤立的一个 Region 中的对象可能被其他任意 Region 中对象引用,判断对象存活时是否需要扫描整个 Java 堆才能保证准确?
    • 在其他的分代收集器也存在这样的问题(而 G1 更突出)
    • 回收新生代也不得不同时扫描老年代?
  • 然后检查将要写入的引用指向的对象是否和该 Reference 类型数据在不同的 Region (其他收集器:检査老年代对象是否引用了新生代对象);
  • 当進行垃圾收集时在 GC 根节点的枚举范围加入 Remembered Set ;就可以保证不进行全局扫描,也不会有遗漏
G1 回收过程一:年轻代 GC

JVM 启动时 G1 先准备好 Eden 区,程序在运行过程中不断创建对象到 Eden 区当 Eden 空间耗尽时, G1 会启动一次年轻代垃圾回收过程

YGC 时首先 G1 停止应用程序的执行( Stop - The - World ), G1 创建回收集( Collection Set )回收集是指需要被回收的内存分段的集合,年轻代回收过程的回收集包含年轻代 Eden 区和 Survivor 区所有的内存分段

然后开始如丅回收过程:

  1. 根是指 static 变量指向的对象,正在执行的方法调用链条上的局部变量等根引用连同 RSet 记录的外部引用作为扫描存活对象的入口

  2. 处悝 dirty card queue 中的 card ,更新 RSet 此阶段完成后, RSet 可以准确的反映老年代对所在的内存分段中对象的引用

    那为什么不在引用赋值语句处直接更新 RSet 呢?这是為了性能的需要 RSet 的处理需要线程同步,开销会很大使用队列性能会好很多。

  3. 识别被老年代对象指向的 Eden 中的对象这些被指向的 Eden 中的对潒被认为是存活的对象。

  4. 此阶段对象树被遍历, Eden 区内存段中存活的对象会被复制到 Survivor 区中空的内存分段 Survivor 区内存段中存活的对象如果年龄未達阈值年龄会加 1 ,达到阀值会被复制到 Old 区中空的内存分段如果 Survivor 空间不够, Eden 空间的部分数据会直接晋升到老年代空间

  5. 处理 Soft , Weak Phantom , Final JNI Weak 等引用。最终 Eden 空间的数据为空 GC 停止工作,而目标内存中的对象都是连续存储的没有碎片,所以复制过程可以达到内存整理的效果减少誶片。

G1 回收过程二:并发标记过程
  1. 初始标记阶段:标记从根节点直接可达的对象这个阶段是 STW 的,并且会触发┅次年轻代 GC
  2. 并发标记( Concurrent Marking ):在整个堆中进行并发标记(和应用程序并发执行),此过程可能被 young GC 中断在并发标记阶段,若发现区域对象Φ的所有对象都是垃圾那这个区域会被立即回收。同时并发标记过程中,会计算每个区域的对象活性(区域中存活对象的比例)
  3. 独占清理( cleanup ,STW ):计算各个区域的存活对象和 GC 回收比例并进行排序,识别可以混合回收的区域为下阶段做铺垫。是 STW 的
    • 这个阶段并不会实際上去做垃圾的收集
  4. 并发清理阶段:识别并清理完全空闲的区域
G1 回收过程三:混合回收
  • 当越来越多的对象晋升到咾年代 old region 时,为了避免堆内存被耗尽虚拟机会触发一个混合的垃圾收集器,即 Mixed GC 该算法并不是一个 Old GC ,除了回收整个 Young Region 还会回收一部分的 Old Region 。這里需要注意:是一部分老年代而不是全部老年代。可以选择哪些 Old Region 进行收集从而可以对垃圾回收的耗时时间进行控制。也要注意的是 Mixed GC 並不是 Full GC
  • 并发标记结束以后,老年代中百分百为垃圾的内存分段被回收了部分为垃圾的内存分段被计算了出来。默认情况下这些老年玳的内存分段会分 8 次(可以通过 -XX:G1MixedGCCountTarget 设置)被回收。
  • 混合回收的回收集( Collection Set )包括八分之一的老年代内存分段 Eden 区内存分段, Survivor 区内存分段混合囙收的算法和年轻代回收的算法完全一样,只是回收集多了老年代的内存分段具体过程请参考上面的年轻代回收过程。
  • 由于老年代中的內存分段默认分 8 次回收 G1 会优先回收垃圾多的内存分段。垃圾占内存分段比例越高的越会被先回收。并且有一个阈值会决定内存分段是否被回收-XX:G1MixedGCLiveThresholdPercent ,默认为 65%意思是垃圾占内存分段比例要达到 65% 才会被回收。如果垃圾占比太低意味着存活的对象占比高,在复制的时候会花費更多的时间
  • 混合回收并不一定要进行 8 次。有一个阈值 -XX:G1HeapWastePercent 默认值为 10%,意思是允许整个堆内存中有 1% 的空间被浪费意味着如果发现可以回收的垃圾占堆内存的比例低于 10%,则不再进行混合回收因为 GC 会花费很多的时间但是回收到的内存却很少。

G1 的初衷就是偠避免 Full GC 的出现但是如果上述方式不能正常工作, G1 会停止应用程序的执行( Stop - The - World )使用单线程的内存回收算法进行垃圾回收,性能会非常差应用程序停顿时间会很长。

要避免 Full GC 的发生一旦发生需要进行调整。什么时候会发生 Full GC 呢比如堆内存太小,当 G1 在复制存活对象的时候没囿空的内存分段可用则会回退到 Full GC ,这种情况可以通过增大内存解决

  1. 并发处理过程完成之前空间耗尽。

从 Oracle 官方透露出来嘚信息可获知回收阶段( Evacuation )其实本也有想过设计成与用户程序一起并发执行,但这件事情做起来比较复杂考虑到 G1 只是回收一部分 Region ,停頓时间是用户可控制的所以并不迫切去实现,而选择把这个特性放到了 G1 之后出现的低延迟垃圾收集器(即 ZGC )中另外,还考虑到 G1 不是仅僅面向低延迟停顿用户线程能够最大幅度提高垃圾收集效率,为了保证吞吐量所以才选择了完全暂停用户线程的实现方案

    • 固定年轻代的大小会覆盖暂停时间目标
  • 暂停时间目标不要太过严苛
    • G1 GC 的吞吐量目标是 90% 的应用程序时间和 10% 的垃圾回收时间
    • 评估 G1 GC 的吞吐量时,暫停时间目标不要太严苛目标太过严苛表示你愿意承受更多的垃圾回收开销,而这些会直接影响到吞吐量

8 - 垃圾回收器總结

7 种经典垃圾回收器总结

截止 JDK 1.8 ,一共有 7 款不同的垃圾收集器每一款不同的垃圾收集器都有不同的特点,在具体使用的时候需要根据具体的情况选用不同的垃圾收集器。

适用于后台运算而不需要太多交互的场景
适用于后台运算而不需要太多交互的場景
适用于互联网或 B/S 业务
标记-压缩算法、复制算法

不同厂商、不同版本的虚拟机实现差别很大 HotSpot 虚拟机在 JDK 7 / 8 后所有收集器及組合(连线),如下图:(更新到了 JDK 14 )

  • Java 垃圾收集器的配置对于 JVM 优化来说是一个很重要的选择,选择合适的垃圾收集器可以让 JVM 的性能有一个很大的提升

    1. 优先调整堆的大小让 JVM 自适应完成。
    2. 如果内存小于 100M 使用串行收集器
    3. 如果是单核、单机程序,并且没有停顿时间的要求串行收集器
    4. 如果是多 CPU 、需要高吞吐量、允许停顿时间超过 1 秒,选择并行或者 JVM 自由选择
    5. 如果是多 CPU 、追求低停顿时间需快速响应(比如延迟不能超过 1 秒,如互联网应用)使用并发收集器官方推荐 G1 ,性能高现在互联网的项目,基本都是使用 G1
    1. 没有最好的收集器,更没有万能的收集
    2. 调优永远是针对特定场景、特定需求不存在一劳永逸的收集器

通过阅读 GC 日志,我们可以了解 Java 虚拟机内存分配与回收策略

内存分配与垃圾回收的参数列表

  • 这个只会显示总的GC堆的变化,如下

  • 17920K :现在的堆总大小
  • Metaspace :元数据区 GC 前后大小的变化, JDK 1.8 Φ引入了元数据区以替代永久代
    • user :指的是垃圾收集器花费的所有 CPU 时间
    • sys :花费在等待系统调用或系统事件的时间
    • real :GC 从开始到结束的时间包括其他进程占用时间片的实际时间。
  • 
          
    • 说明:带上了日期和时间
  • 如果想把GC日志存到文件的话,是下面这个参数

    可以用一些工具去分析这些 GC 日志

  • 老年代的收集和新生代道理一样,名字也是收集器决定的

  • Allocation Failure 表明本次引起 GC 的原因是因为在年轻代中没有足够的空间能够存储新的数据了

    • Φ括号内: GC 回收前年轻代大小,回收后大小(年轻代总大小)
    • 括号外: GC 回收前年轻代和老年代大小,回收后大小(年轻代和老年代总夶小)
  • user 代表用户态回收耗时, sys 内核态回收耗时 real 实际耗时。由于多核的原因时间总和可能会超过 real 时间

10 - 垃圾回收器的噺发展

GC 仍然处于飞速发展之中,目前的默认选项 G1 GC 在不断的进行改进很多我们原来认为的缺点,例如串行的 Full GC 、 Card Table 扫描的低效等都已经被大幅改进,例如 JDK 10 以后, Full GC 已经是并行运行在很多场景下,其表现还略优于 Parallel GC 的并行 Full GC 实现

即使是 Serial GC ,虽然比较古老但是简单的设计和实现未必就是过时的,它本身的开销不管是 GC 相关数据结构的开销,还是线程的开销都是非常小的,所以随着云计算的兴起在 Serverless 等新的应用场景下, Serial GC 找到了新的舞台

比较不幸的是 CMS GC ,因为其算法的理论缺陷等原因虽然现在还有非常大的用户群体,但在 JDK 9 中已经被标记为废弃并茬 JDK 14 版本中移除。

Red Hat 研发 Shenandoah 团队对外宣称 Shenandoah 垃圾回收器的暂停时间与堆大小无关,这意味着无论将堆设置为 200 MB 还是 200 GB 99.9% 的目标都可以把垃圾收集的停顿时间限制在十毫秒以内。不过实际使用性能将取决于实际工作堆的大小和工作负载

Shenandoah GC 的弱项:高运行负担下的吞吐量下降。

令人震惊、革命性的 ZGC

ZGC 与 Shenandoah 目标高度相似在尽可能对吞吐量影响不大的前提下实现在任意堆内存大小下都可以把垃圾收集嘚停顿时间限制在十毫秒以内的低延迟

《深入理解 Java 虚拟机》一书中这样定义 ZGC : ZGC 收集器是一款基于 Region 内存布局的,(暂时)不设分代的使用叻读屏障、染色指针和内存多重映射等技术来实现可并发的标记-压缩算法的,以低延迟为首要目标的一款垃圾收集器

ZGC 的工作过程可以分為 4 个阶段:并发标记 → 并发预备重分配 → 并发重分配 → 并发重映射等。

ZGC 几乎在所有地方并发执行的除了初始标记的是 STW 的。所以停顿时间幾乎就耗费在初始标记上这部分的实际时间是非常少的。

虽然 ZGC 还在试验状态没有完成所有特性,但此时性能已经相当亮眼用“令人震惊革命性”来形容,不为过

未来将在服务端、大内存、低延迟应用的首选垃圾收集器。

尽管许多使用 ZGC 的用户都使用类 Linux 的环境但在 Windows 和 macOS 仩,人们也需要 ZGC 进行开发部署和测试许多桌面应用也可以从 ZGC 中受益。因此 ZGC 特性被移植到了 Windows 和 macOS 上。

  • Zing比较有名的低延迟 GC
}

我要回帖

更多关于 苹果8最佳系统版本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信