范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

JVM垃圾回收整理

  1. 如何计算对象已死
  1.1 引用计数器算法
  引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象不再被使用,是"垃圾"了。
  引用计数器实现简单,效率高;但是不能解决循环引用问问题(A对象引用B对象,B对象又引用A对象,但是A,B对象已不被任何其他对象引用),同时每次计数器的增加和减少都带来了很多额外的开销,所以在JDK1.1之后,这个算法已经不再使用了。
  1.2 可达性分析算法
  可达性分析算法是通过一些"GC Roots"对象作为起点,从这些节点开始往下搜索,搜索通过的路径成为引用链(Reference Chain),当一个对象没有被GC Roots的引用链连接的时候,说明这个对象是不可用的,如下图所示。
  如上图种的对象C,此对象没有被GC Roots节点引用,就是可回收垃圾。
  object5/6/7虽然内部引用,但是没有被GC Roots,也是垃圾。
  那么,什么的东西才可以作为GC Roots?
  GC Roots对象包括:虚拟机栈(栈帧中的本地变量表)中的引用的对象。 方法区域中的类静态属性引用的对象。 方法区域中常量引用的对象。 本地方法栈中JNI(Native方法)的引用的对象。
  2.常见的垃圾回收算法
  3种:复制;标记清除(Mark-Sweep);标记整理(Mark-Compact);
  1.复制算法(年轻代)
  复制算法是把内存分成大小相等的两块,每次使用其中一块,当垃圾回收的时候,把存活的对象复制到另一块上,然后把这块内存整个清理掉。这种方式听上去确实是非常不错的方案,但是总的来说对内存的消耗十分高。
  复制之后有交换,谁空谁是To。 详细如下(复制->清空->互换):
  a.Eden和From复,制到To,年龄+1
  首先,当Eden区满时,会触发第一次gc,把还活着的对象,复制到from区;当Eden区再次发生gc时,会扫描Eden和From这两个区域,对这两个区域进行垃圾回收,把还活着的对象,直接复制到To区(如果有对象年龄达到老年标准,则复制到老年代),同时把对象的年龄+1。
  b.清空Eden和From
  然后,清空Eden和From种的对象;
  c.To和From互换
  最后,To和From互换,此时From为空,变为To区;原来的To,变为下一次gc时的From区;部分对象会在From和To之间来回复制,交换15次(由jvm参数MaxTenuringThreshold决定,这个参数默认值是15)之后,如果对象还存活,就存入到老年代。
  2.标记清除(Mark-Sweep)(老年代)
  标记—清除算法包括两个阶段:"标记"和"清除"。在标记阶段,确定所有要回收的对象,并做标记。清除阶段紧随标记阶段,将标记阶段确定不可用的对象清除。
  优点:没有复制,节省空间;
  缺点:产生内存碎片;
  3.标记压缩整理(Mark-Compact, 或称为标记-整理算法,Java堆中老年代的垃圾回收算法)
  优点:在标记清除的基础上,增加滑动,解决了碎片问题;
  缺点:滑动(移动)对象需要成本。
  4.分代收集算法
  分代收集是根据对象的存活时间把内存分为新生代和老年代,根据个代对象的存活特点,每个代采用不同的垃圾回收算法。新生代采用标记—复制算法,老年代采用标记清除或者标记—整理算法。
  垃圾算法的实现涉及大量的程序细节,而且不同的虚拟机平台实现的方法也各不相同。上面介绍的只不过是基本思想。 垃圾收集器有哪些?
  上面是目前比较常用的垃圾收集器,和他们直接搭配使用的情况,上面是新生代收集器,下面则是老年代收集器,这些收集齐都有自己的特点,根据不同的业务场景进行搭配使用。
  年轻代收集器如下
  Serial收集器 (串行)
  它针对单线程环境设计,且只使用一个线程进行垃圾回收,会暂停所有用户线程,所以不适合服务器环境。
  形象解释:大家在餐厅用餐(用户线程),来了一位员工阿姨(垃圾回收线程),说我们要打扫卫生了,请大家先暂停用餐,打扫完再继续吃饭。
  ParNew收集器
  ParNew收集器其实就是serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为与Serial收集器一样。 使用方式可以使用 -XX:+UseConcMarkSweepGC  ,或者是使用 -XX:+UseParNewGC  来强制开启,可以通过 -XX:ParallelGCThreads   来调整或者限制垃圾收集的线程数量。
  Parallel Scavenge收集器(并行)
  有多个垃圾收集线程并行工作,此时用户线程也是暂停的;适用于科学计算/大数据后台处理等,和前台若交互场景;
  形象解释:大家在餐厅用餐(用户线程),来了 多个 员工阿姨(垃圾回收线程),说我们要打扫卫生了,请大家先暂停用餐,打扫完再继续吃饭。
  Parallel Scavenge收集器也是一个并行的多线程新生代收集器,它也使用复制算法。Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput)。
  特点:
  就是非常关注系统的吞吐量,吞吐量=代码运行时间/(代码运行时间+垃圾收集时间)
  老年代垃圾回收器
  Serial Old收集器
  Serial Old 是 Serial收集器的老年代版本,它同样是一个单线程收集器,使用"标记-整理"(Mark-Compact)算法。
  用途一个是在JDK1.5及之前的版本中与Parallel Scavenge收集器搭配使用, 另一个就是作为CMS收集器的后备预案,如果CMS出现Concurrent Mode Failure,则SerialOld将作为后备收集器。
  Parallel Old收集器
  Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和"标记-整理"算法。前面已经提到过,这个收集器是在JDK 1.6中才开始提供的,在此之前,如果新生代选择了Parallel Scavenge收集器。
  老年代除了Serial Old以外别无选择,所以在Parallel Old诞生以后,"吞吐量优先"收集器终于有了比较名副其实的应用组合,在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器。
  CMS收集器
  CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,它非常符合那些集中在互联网站或者B/S系统的服务端上的Java应用,这些应用都非常重视服务的响应速度。从名字上("Mark Sweep")就可以看出它是基于"标记-清除"算法实现的。
  CMS收集器工作的整个流程分为以下4个步骤: 初始标记(CMS initial mark):仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,需要"Stop The World"。 并发标记(CMS concurrent mark):进行GC Roots Tracing的过程,在整个过程中耗时最长。 重新标记(CMS remark):为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。此阶段也需要"Stop The World"。 并发清除(CMS concurrent sweep)
  优点
  CMS是一款优秀的收集器,它的主要优点在名字上已经体现出来了:并发收集、低停顿,因此CMS收集器也被称为并发低停顿收集器(Concurrent Low Pause Collector)。
  缺点 对CPU资源非常敏感 其实,面向并发设计的程序都对CPU资源比较敏感。在并发阶段,它虽然不会导致用户线程停顿,但会因为占用了一部分线程(或者说CPU资源)而导致应用程序变慢,总吞吐量会降低。 CMS默认启动的回收线程数是(CPU数量+3)/4,也就是当CPU在4个以上时,并发回收时垃圾收集线程不少于25%的CPU资源,并且随着CPU数量的增加而下降。但是当CPU不足4个时(比如2个),CMS对用户程序的影响就可能变得很大,如果本来CPU负载就比较大,还要分出一半的运算能力去执行收集器线程,就可能导致用户程序的执行速度忽然降低了50%,其实也让人无法接受。 无法处理浮动垃圾(Floating Garbage) 可能出现"Concurrent Mode Failure"失败而导致另一次Full GC的产生。 由于CMS并发清理阶段用户线程还在运行着,伴随程序运行自然就还会有新的垃圾不断产生。这一部分垃圾出现在标记过程之后,CMS无法再当次收集中处理掉它们,只好留待下一次GC时再清理掉。 这一部分垃圾就被称为"浮动垃圾"。也是由于在垃圾收集阶段用户线程还需要运行,那也就还需要预留有足够的内存空间给用户线程使用,因此CMS收集器不能像其他收集器那样等到老年代几乎完全被填满了再进行收集,需要预留一部分空间提供并发收集时的程序运作使用。 标记-清除算法导致的空间碎片 CMS是一款基于"标记-清除"算法实现的收集器,这意味着收集结束时会有大量空间碎片产生。 空间碎片过多时,将会给大对象分配带来很大麻烦,往往出现老年代空间剩余,但无法找到足够大连续空间来分配当前对象。
  G1收集器
  ①. G1(Garbage-First)是一款面向服务端应用的垃圾收集器,主要针对配备多核CPU及大容量内存的机器, 以极高概率满足GC停顿时间的同时 ,还 兼具高吞吐量的性能特征
  具体细节详见 https://juejin.cn/post/7010034105165299725JDK 8 默认使用的垃圾收集器
  查看步骤:
  cmd执行命令:
  java -XX:+PrintCommandLineFlags -version
  输出如下:
  引用类型和垃圾回收
  参考文章:
  https://blog.csdn.net/csdn_20150804/article/details/96368802
  https://wangkang007.gitbooks.io/jvm/content/chapter1.html
  https://www.jianshu.com/p/a9703d82c901
  https://blog.csdn.net/qq9808/article/details/80933396
  https://cloud.tencent.com/developer/article/1592943

警察荣誉最受欢迎角色排行榜出炉,李大为第二,夏洁未进前三前几天,评论区的高人,让我笑得岔了气徐开骋含泪卧底牛郎店,张若昀主动请缨堕风尘阿伟哥初探风月场,李大为重回舒适区,孙有光血战索马里没错,前几集的警察荣誉就是这么欢乐,可话又说回来了看到真车后想退款?特斯拉电动皮卡量产版曝光和原型差距有点大6月7日消息,外媒driveteslacanada曝光特斯拉Cybertruck量产版的相关照片,reddit社区上也有网友分享了该车的视频,从多个角度展示电动皮卡的外观细节。有不给孩子吃垃圾零食和不给孩子吃,长大后,性格爱好差距大南方经过一段时间的梅雨季后,这几天温度终于步入夏天的轨道了,每天大大的太阳,30度的高温,热得人受不了。为了解暑,老公买了一箱冰淇淋回来,大人一吃,孩子见了便嚷嚷着也要吃。怕孩子感中国女排决战比利时,蔡斌有望调整三处首发,郑益昕或成秘密武器北京时间6月8日,2022赛季女排世界联赛正在进行中,第一周的比赛战罢,中国女排以3胜1负的战绩排在积分榜的第二位,仅次于四连胜的日本女排,本届世联赛蔡斌作为第一次带队出征的国际比坏得彻底,绝不洗白这7位男反派帅是真帅,坏也是真坏上错花轿嫁对郎柯世昭柯世昭是自幼父母双亡,被老太君接到身边照顾,是齐府的表亲。按理说齐府有三个亲孙子,家产是轮不着柯世昭的。但是在柯世昭的一顿操作下,齐府的两个孙子被毒蛇咬死,只剩宫海滨暗夜行者收官,于升海下线角色口碑大反转新颖刑侦缉毒题材警匪剧暗夜行者,自5月22日于爱奇艺独家上线后,瞬间捕获大批观众关注,剧情热度直线上升。历时半个月的播放,在如火如荼的影视内容之战激烈交锋下,终于将迎来完美收官。高油价调整信息今天6月8号,加油站调整后9295号汽油新售价今天是2022年6月8日,本轮国内成品油价格调整计价周期运行一半了,目前来说,国内汽柴油价格预计上涨幅度已经达到了0。23元升,本轮油价调整以来,油价始终处于上调阶段,各位车主要注头名晋级世界杯却被拖欠奖金!国脚宣布即日起集体罢赛足协下课国际比赛日,面对着接踵而至的友谊赛,好不容易打进了世界杯决赛圈的国家队应当怎么做?按照正常的逻辑,当然是认真备战认真比赛了,但是,世界排名第38位的加拿大却做出了一个极其反常的决定郭昊文试训湖人,压力与挑战并存,但是敢去就比不敢去的强湖人稳坐钓鱼台,消息却一个接一个地来想要得到一些好人才,奈何选秀权早已说拜拜花钱购买二轮签看起来挺慷慨,郭昊文到底能不能去还得看能耐倘若中国球员去了海外,机票门票多贵咱都愿意买。N民生证券董事长被曝失联曾与落马官员王宗成曾长虹共事澎湃新闻记者田忠方民生证券股份有限公司(简称民生证券)董事长总裁冯鹤年失联了?据6月9日,证券时报报道,冯鹤年已于6月7日被有关部门带走,目前处于失联状态。针对此事,澎湃新闻记者尝别克纯电动概念车Wildcat发布,无框车门设计,中文名夜猫近日,别克品牌在美国市场发布了全新纯电动概念车别克Wildcat。同时别克品牌计划在明年针对北美市场推出首款纯电车型,并且这款Wildcat纯电概念车是别克品牌向纯电动转型的过渡产
曾经让红牛头疼的问题,如今来到了法拉利经历了赛季初的强劲开局后,事情并没有完全按照法拉利的计划发展。勒克莱尔在过去的三场比赛中两次因动力单元相关故障导致退赛,塞恩斯也因为液压故障没能在阿塞拜疆完赛。领队马蒂亚比诺托承认高拉特阿兰,昔日巴西双子星离开恒大后,一人无球可踢一人沉沦2015年1月,巴西双子星高拉特与阿兰被里皮带到了当时的广州恒大,开始了中国足球之旅。7年后,中超繁华不再,金元足球不再,归化政策破产,高拉特回到了巴甲,15场不进球被巴西媒体痛批浅谈一下看了亚泰比赛的感悟吧中超开赛三轮了,亚泰一胜两平,这个战绩也只能说是差强人意吧,总得来说感觉和真正的强队比差点火候,还比弱队要强。这个赛季打到现在,总得来说发挥是不如上个赛季的,一方面球员能力有所下降混双大战!伊藤美诚时隔10个月再登场携手日本男乒老二PK张本早田北京时间6月13日19日,WTT常规赛萨格勒布站将点燃战火。日媒在最新的对这项赛事的预告中重点关注了混双。东京奥运会混双金牌得主伊藤美诚,将时隔10个月再度登上混双赛场,目前他的搭国乒大满贯重拾球拍!打球风采依旧引围观,曾喊话挑战三奥运冠军近日,国乒大满贯得主李晓霞受邀出席一场业余乒乓球邀请赛,在活动现场,李晓霞也重拾球拍,回到球台前,努力恢复训练的她打球风采依旧,引众多球迷围观拍照。虽然已经退役五年多,拿起球拍的李霍福德我们在防守端必须要做自己并保持稳定在进攻端不能失误直播吧6月14日讯今日NBA总决赛G5,凯尔特人94104不敌勇士,系列赛大比分23落后。赛后,凯尔特人球员霍福德接受了记者采访。当记者提问到绿军为何开局表现不佳时,霍福德表示我相大比分落后的凯尔特人还有机会吗?北京时间,6月14日上午,NBA总决赛第五场继续开战,最终,维金斯加上替补球员大爆发的金州勇士在主场大胜凯尔特人,总比分32领先!连输两场的凯尔特人还有机会夺冠吗?凯尔特人G4输球首进总决赛就夺冠27名球星上榜绿军双探花有望实现维金斯在冲刺202122赛季NBA总决赛继续进行中,凯尔特人已经夺得总决赛主动权,大比分21领先勇士。这意味着,凯尔特人只要再赢一场比赛,就能夺得总决赛的赛点。根据赛程安排,总决赛G4也是在凯为啥有的人指甲上有月牙,有的人却没有?科学解释来了不知道大家是否有观察过自己手指上的白色月牙呢?爱乐养生我们经常能在手指指甲上看到时间末端有一个半月形类似于月牙一样的东西,临床上又将其称为甲板月或半月痕,是指甲生长过程中非常自然的空腹血糖和餐后血糖,哪个更重要?医生说出答案生活中很多人受到糖尿病的困扰,对于很多糖尿病患者来说,更是一个困扰多年的问题,因为现在患上糖尿病的人越来越多,所以生活中要注重血糖的监测。如果发现自己的血糖值升高了,要及时进行调理教培三巨头,沉船求生从一个风口,到另一个风口。文华商韬略何军一场暴风骤雨过后,万亿规模的中国教培行业一夜崩塌。快一年过去了,他们都还好吗?016月10日,中关村周杰伦,火了。8年带过50万学生的新东方