您好、欢迎来到现金彩票网!
当前位置:双彩网 > 向后可达性 >

GC详解及Minor GC和Full 触发条件总结

发布时间:2019-06-12 11:59 来源:未知 编辑:admin

  GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。

  要准确理解Java的垃圾回收机制,就要从:“什么时候”,“对什么东西”,“做了什么”三个方面来具体分析。

  第一:“什么时候”即就是GC触发的条件。GC触发的条件有两种。(1)程序调用System.gc时可以触发;(2)系统自身来决定GC触发的时机。

  系统判断GC触发的依据:根据Eden区和From Space区的内存大小来决定。当内存大小不足时,则会启动GC线程并停止应用线程。

  第二:“对什么东西”笼统的认为是Java对象并没有错。但是准确来讲,GC操作的对象分为:通过可达性分析法无法搜索到的对象和可以搜索到的对象。对于搜索不到的方法进行标记。

  第三:“做了什么”最浅显的理解为释放对象。但是从GC的底层机制可以看出,对于可以搜索到的对象进行复制操作,对于搜索不到的对象,调用finalize()方法进行释放。

  具体过程:当GC线程启动时,会通过可达性分析法把Eden区和FromSpace区的存活对象复制到To Space区,然后把Eden Space和FromSpace区的对象释放掉。当GC轮训扫描ToSpace区一定次数后,把依然存活的对象复制到老年代,然后释放To Space区的对象。

  对于用可达性分析法搜索不到的对象,GC并不一定会回收该对象。要完全回收一个对象,至少需要经过两次标记的过程。

  第一次标记:对于一个没有其他引用的对象,筛选该对象是否有必要执行finalize()方法,如果没有执行必要,则意味可直接回收。(筛选依据:是否复写或执行过finalize()方法;因为finalize方法只能被执行一次)。

  第二次标记:如果被筛选判定位有必要执行,则会放入FQueue队列,并自动创建一个低优先级的finalize线程来执行释放操作。如果在一个对象释放前被其他对象引用,则该对象会被移除FQueue队列。

  通过上面的GC过程不难看出,Java堆中的年轻代和老年代采用了不同的回收算法。年轻代采用了复制法;而老年代采用了标记-整理法

  程序计数器:线程私有。是一块较小的内存,是当前线程所执行的字节码的行号指示器。是Java虚拟机规范中唯一没有规定OOM(OutOfMemoryError)的区域。

  Java栈:线程私有。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用)。局部变量所需要的内存空间大小在编译期间完成分配。所以栈帧的大小不会改变。存在两种异常情况:若线程请求深度大于栈的深度,抛StackOverflowError。若栈在动态扩展时无法请求足够内存,抛OOM。

  Java堆:所有线程共享。虚拟机启动时创建。存放对象实力和数组。所占内存最大。分为新生代(Young区),老年代(Old区)。新生代分Eden区,Servior区。Servior区又分为From space区和To Space区。Eden区和Servior区的内存比为8:1。 当扩展内存大于可用内存,抛OOM。

  方法区:所有线程共享。用于存储已被虚拟机加载的类信息、常量、静态变量等数据。又称为非堆(Non – Heap)。方法区又称“永久代”。GC很少在这个区域进行,但不代表不会回收。这个区域回收目标主要是针对常量池的回收和对类型的卸载。当内存申请大于实际可用内存,抛OOM。

  本地方法栈:线程私有。与Java栈类似,但是不是为Java方法(字节码)服务,而是为本地非Java方法服务。也会抛StackOverflowError和OOM。

  (1)调用System.gc时,系统建议执行Full GC,但是不必然执行

  (5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

  背景事情最初是LZ这边用jersey提供的客户端API封装了一个rest客户端集成到业务系统A中,结果某次系统A在线上运行时崩了,分析线程栈的dump文件时,发现是因为大量线程阻塞拖跨了应用。线程阻塞...博文来自:x763795151的博客

  FullGC又称作MajorGC,属于老年代GC,指发生在老年代的GC,相对这种GC的有新生代GC即MinorGC。出现FullGC的时候经常伴随至少一次的MinorGC,但非绝对的,MajorGC的...博文来自:Java我人生的技术博客

  前言无论是日常工作,还是企业面试,我们都会经常接触到GC。我们都知道GC是java中的垃圾回收策略。GC帮我们省去了很多事。在GC中,我经常听到的就属于MinorGC和FullGC了。那么在什么情况下...博文来自:爱琴孩的博客

  1、Java垃圾回收机制        GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄...博文来自:三道杠

  本文参考:给出各个场景下可能触发fullgc的实例代码.1.调用System.gcim...博文来自:scugxl的专栏

  一、MinorGC触发条件     1、eden区满时,触发MinorGC。即申请一个对象时,发现eden区不够用,则触发一次MinorGC。      注:新生代分为三个区域,edenspace,f...博文来自:霍力强的专栏

  1、System.gc()方法的调用 此方法的调用是建议JVM进行FullGC,虽然只是建议而非一定,但很多情况下它会触发FullGC,从而增加FullGC的频率,也即增加了间歇性停顿的次数。强烈影响...博文来自:爱科学,爱生活

  对于MinorGC,其触发条件非常简单,当Eden区空间满时,就将触发一次MinorGC。而FullGC则相对复杂,有以下条件:1.调用System.gc()此方法的调用是建议JVM进行FullGC,...博文来自:刘伟龙的博客

  本文参考:给出各个场景下可能触发fullgc的实例代码.1.调用System.gci...博文来自:z69183787的专栏

  我们的Java应用因频繁FULLGC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下:4.758:[FullGC[...博文来自:天岳的博客

  MinorGC和FullGC触发条件1、MinorGC:eden区满时,触发MinorGC(即申请一个对象时,发现eden区不够用,则触发一次MinorGC)注:新生代分为三个区域,edenspace...博文来自:向代码提问

  除直接调用System.gc外,触发FullGC执行的情况有如下四种。1.旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行FullGC后空间仍然不足,则抛...博文来自:路漫漫其修远

  MinorGC当Eden区满时,触发MinorGC。FullGC调用System.gc时,系统建议执行FullGC,但是不必然执行老年代空间不足方法区空间不足通过MinorGC后进入老年代的平均大小大...博文来自:剑未佩妥,出门已是江湖

  作者:RednaxelaFX链接:来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非...博文来自:z69183787的专栏

  昨天下午公司有个后台管理系统,部署后,今天早上观察来看,发现gc.log中频繁的执行fullgc,活动轨迹很明确,都是一个小时执行一次整个空间的fullgc,但明显内存占用率还远远没有达到阈值,从日志...博文来自:gao_xianglong的自言自语

  除直接调用System.gc外,触发FullGC执行的情况有如下四种。1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行FullGC后空间仍然不足,则...博文来自:zbuger的博客

  写在前面:  前面两篇博客中介绍了GC的收集算法,和7种收集器的特点,而在这篇博客,我们会讨论什么情况下回触发一次FullGC。分代收集补充:  在了解什么情况触发一次FullGC之前,我们先看一下J...博文来自:To be a better man的博客

  触发MinorGC(YoungGC)  虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间  1、如果大于的话,直接执行minorGC  2、如果小于,判断是否...博文来自:summerZBH123的博客

  除直接调用System.gc外,触发FullGC执行的情况有如下四种。1.旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行FullGC后空间仍然不足,则抛...博文来自:安东的技术博客

  很多人都分不清MajorGC,FullGC的概念,事实上我查了下资料,也没有查到非常精确的MajorGC和FullGC的概念定义。分不清这两个概念可能就会对这个问题疑惑:FullGC会引起MinorG...博文来自:hellozhxy的博客

  名词解释:GC:垃圾收集器MinorGC:新生代GC,指发生在新生代的垃圾收集动作,所有的MinorGC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非常短暂。...博文来自:lovexiaoqiqi的博客

  概念: 新生代GC(MinorGC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以MinorGC非常频繁,一般回收速度也比较快。 老年代GC(MajorGC /Full...博文来自:丹妮专栏

  举一个简单java调优例子,一个大对象导致fullGC的例子下面是一个产生大对象,MinorGC的时候总有很多的大对象没有被回收,需要将这些对象放入到年老带中,导致年老带使用量增长过快引发fullGC...博文来自:屌丝程序员的奋斗之路

  转载自  一次频繁FullGC的排查过程,根源居然是它...业务部门的一个同事遇到个奇怪的FullGC问题,有个服务迁移到新的应用后,一直频繁FullGC。新应用机器的配置是4c8g,老应用是4c4g...博文来自:茅坤宝骏氹的博客

  问题描述应用收到频繁FullGC告警问题排查登录到对应机器上去,查看GC日志,发现YGC一分钟已经达到了15次,比FullGC还要频繁一些,其中FullGC平均10分钟超过了4次,如下图使用jstat...博文来自:vwycm的博客

  ParNew GC 在访问量大的时候,一秒钟可能就会发生多次。 FULL GC 差不多二十分钟一次。 这样算是正常的吗?论坛

  关于FullGC,博主只是在一些书中或者博客中,看别人调优过,今天兴起,亲自在本地调了一把本地的项目:      第一步:我首先打开了jvisualvm.exe,在VisualGC里面发现了今天要讨论...博文来自:u012257955的博客

  文章目录惨案的发生解决方案后续分析可怕的String.split()总结惨案的发生FullGC很正常,但是频繁的FullGC并且导致线上CPU飙升,然后服务直接宕掉,这是很可怕的。2018年11月19...博文来自:supermao1013的专栏

  在Plumbr的工作过程中遇到GC间隙功能探测问题使我不得不关注相关文章,书籍,简报。自始至终,我不止一次迷惑于Minor,MajorandFullGC的用法。为了搞清楚这些疑惑我写这...博文来自:maxiaoyin111111的博客

  概念:●新生代GC(MinorGC):从年轻代空间(包括Eden和Survivor区域)回收内存被称为MinorGC,因为Java对象大多都具备朝生夕灭的特性,所以MinorGC非常频繁,一般回收速度...博文来自:Alpha_Paser的博客

  一、场景描述上周开始系统在业务高峰期一直收到Fullgc报警,监控显示fgc频繁,下图是监控图,左边红框是优化前效果,右边是优化后,优化后fgc基本为0 二、原因查找1.查看gc日志,发现old区fg...博文来自:n8765的专栏

  名词解释:GC:垃圾收集器MinorGC:新生代GC,指发生在新生代的垃圾收集动作,所有的MinorGC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非常短暂。...博文来自:静静等_静静爱

  作为一个码农,最大的成就不是你看过多少本专业书,而是你踩过多少坑。在多变的业务场景中,不管你的架构设计如何完美,代码多么严谨,我们总会遇到一些匪夷所思的bug。 本文将描述一个真实的云搜线上问题,...博文来自:huangleijay的专栏

  2016年04月10日23:02:43阅读数:2689案例1 系统高峰期fullGC频繁,优化后恢复正常。 导致原因: 系统中有一个调用频繁的接口会调用下面这个方法,目的是获取图片的宽高信息,但是Im...博文来自:大JAVA解决方案

  发现网上很多关于GC的文章都自相矛盾,经过长期的积累验证,本文对很多含混的知识点做了严谨的解释,欢迎有理有据的拍砖!HotSpot虚拟机将其物理上划分为两个–新生代(younggeneration)和...博文来自:lemon的专栏

  序最近频繁收到线上报警,就看看到底啥原因二导出dump文件2.1查找报警对应的进程ps-efgrepXX是23898,看一下gc情况:这才不到半小时,fgc就增加了好几次。jmap导出dump。jm...博文来自:bohu83的博客

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  前言:前段时间做项目用到了图片裁剪,调用系统裁剪图片,结果在我的小米3上一直有问题,裁剪界面打不开,在其他设备上没问题,于是研究其他软件是怎么做的,淘宝的裁剪图片是自己做的,当然没问题,京东的是调用的...博文来自:zwenkai

  Intellij IDEA 如何通过数据库表生成带注解的实体类图文详细教程 Intellij IDEA 如何通过数据库表生成带注解的实体类 Contents 第一步:新建...博文来自:liu_yulong的专栏

  灰度图像的自动阈值分割(Otsu 法)机器视觉领域许多算法都要求先对图像进行二值化。这种二值化操作阈值的选取非常重要。阈值选取的不合适,可能得到的结果就毫无用处。今天就来讲讲一种自动计算阈值的方法。这...博文来自:Ivan 的专栏

  用以前以前写过的自定义课表软件 ,Android 自定义View课程表表格 原生View截图合成分享的图片 看到的是图片只显示到11节处,下面的没有...博文来自:ShallCheek

  本matplotlib安装过程在一定程度上参考了 因为学习机器学习的需要,又准备参考《机器学...博文来自:SCUT_Arucee的博客

  1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包...博文来自:专注、专心

  servlet页面代码:@每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复...博文来自:高调做事,低调做人!

  首先,确定你已经有了CSR证书请求、开发证书和App ID。如果你不是第一次开发iOS应用程序,那么你可能已经有了这些东西。那么你可以继续以下的步骤。一、配置App ID登录你的provisionin...博文来自:kmyhy的专栏

  目前还没有写出这个demo,不过可以参考下面这两个链接,一个是显示日期的,还有一个是合并单元格: 合并单元格: 博文来自:dddd的博客

  以回归为例吧,回归在某些场合可能更精准 支持连续变量和类别变量,类别变量就是某个属性有三个值,a,b,c,需要用Feature Transformers中的vectorindexer处理 上来是一堆...博文来自:chencheng12077的博客

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  简述关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系。关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的。简述 ...博文来自:本博客暂停更新,后期专注维护个人公众号『高效程序员』,欢迎关注!

  今天为了休息下,换换脑子,于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了。 附上源码pyDdos.py: #!/usr/bin/env ...博文来自:jeepxiaozi的专栏

http://chinoamobi.com/xianghoukedaxing/136.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有