导航:首页 > 编程语言 > javagcfullgc

javagcfullgc

发布时间:2022-11-28 14:00:36

㈠ 弱弱的问一句 jvm full gc到底是啥意思

JVM 内置的通用垃圾回收原则,堆内存划分为 Eden、Survivor 和 Tenured/Old 空间。GC一共分三种:MinorGC,Major GC v和Full GC。Full GC是清理整个堆空间—包括年轻代和永久代。有时候系统会频繁的FullGC,这时候需要去服务器查一下原因。

当编辑并运行一个java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。

(1)javagcfullgc扩展阅读

触发Full GC执行的情况有如下四种。旧生代空间不足

1.旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:

java.lang.OutOfMemoryError: Java heap space

为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。

2. Permanet Generation空间满

PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,在未配置为采用CMS GC的情况下会执行Full GC。如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息:

java.lang.OutOfMemoryError: PermGen space

为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。

3. CMS GC时出现promotion failed和concurrent mode failure

对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当这两种状况出现时可能会触发Full GC。

promotionfailed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。

应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。

4. 统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间

这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。

例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次Minor GC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行Full GC。

当新生代采用PSGC时,方式稍有不同,PS GC是在Minor GC后也会检查,例如上面的例子中第一次Minor GC后,PS GC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。

除了以上4种状况外,对于使用RMI来进行RPC或管理的Sun JDK应用而言,默认情况下会一小时执行一次Full GC。可通过在启动时通过- java-Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC执行的间隔时间或通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。

参考资料来源:网络-JAVA

㈡ 请java 高手帮我看看这个问题,多次GC连续出现2个FULLGC 是什么情况导致的

建议: (1)创建图表:

㈢ java中,MinorGC、MajorGC、FullGC 什么时候发生

minorGC:新生代满了,就发生
FullGC:新生代满了,老年代也满了,还有新对象要产生,就发生
majorGC=FullGC

㈣ Java中full gc什么意思

转发的~但能解决你的问题

除直接调用System.gc外,触发Full GC执行的情况有如下四种。
1. 旧生代空间不足
旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:
java.lang.OutOfMemoryError: Java heap space
为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。
2. Permanet Generation空间满
PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,在未配置为采用CMS GC的情况下会执行Full GC。如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息:
java.lang.OutOfMemoryError: PermGen space
为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。
3. CMS GC时出现promotion failed和concurrent mode failure
对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当这两种状况出现时可能会触发Full GC。
promotionfailed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。
应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。
4. 统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间
这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。
例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次Minor GC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行Full GC。
当新生代采用PSGC时,方式稍有不同,PS GC是在Minor GC后也会检查,例如上面的例子中第一次Minor GC后,PS GC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。
除了以上4种状况外,对于使用RMI来进行RPC或管理的Sun JDK应用而言,默认情况下会一小时执行一次Full GC。可通过在启动时通过- java-Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC执行的间隔时间或通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。

㈤ JVM堆内存很富足时,为什么经常连续发生两次full GC

前面我自理解面复制java垃圾收前听师讲像内存满才做整体垃圾收,收垃圾同调用finalize.构造类构造类覆盖finalize便于该类垃圾收执行些代码,比释放资源.1.JVMgc概述 gc即垃圾收集机制指jvm用于释放些再使用象所占用内存java语言并要求jvmgc没规定gc何工作用jvm都gc且数gc都使用类似算管理内存执行收集操作 充理解垃圾收集算执行程才能效优化性能些垃圾收集专用于特殊应用程序比实应用程序主要避免垃圾收集断数OLTP应用程序则注重整体效率理解应用程序工作负荷jvm支持垃圾收集算便进行优化配置垃圾收集器 垃圾收集目于清除再使用象gc通确定象否象引用确定否收集该象gc首先要判断该象否候收集两种用引用计数象引用遍历 1.1.引用计数 引用计数存储特定象所引用数说应用程序创建引用及引用超范围jvm必须适增减引用数某象引用数0便进行垃圾收集 1.2.象引用遍历 早期jvm使用引用计数现数jvm采用象引用遍历象引用遍历组象始沿着整象图每条链接递归确定达(reachable)象某象能些根象(至少)达则作垃圾收集象遍历阶段gc必须记住哪些象达便删除达象称标记(marking)象 步gc要删除达象删除些gc简单扫描堆栈删除未标记未标记象并释放内存新象叫做清除(sweeping)种问题于内存段足用于新象组合起却许gc重新组织内存象并进行压缩(compact)形利用空间 gc需要停止其种意味着所与应用程序相关工作停止gc运行结响应期间增减许混杂请求另外更复杂 gc断增加或同运行减少或者清除应用程序断gc使用单线程完项工作则采用线程增加效率2.几种垃圾收机制 2.1.标记-清除收集器 种收集器首先遍历象图并标记达象扫描堆栈寻找未标记象并释放内存种收集器般使用单线程工作并停止其操作 2.2.标记-压缩收集器 叫标记-清除-压缩收集器与标记-清除收集器相同标记阶段第二阶段则标记象复制堆栈新域便压缩堆栈种收集器停止其操作 2.3.复制收集器 种收集器堆栈两域称半空间每仅使用半空间jvm新象则放另半空间gc运行达象复制另半空间压缩堆栈种适用于短存期象持续复制存期象则导致效率降低 2.4.增量收集器 增量收集器堆栈域每仅域收集垃圾造较应用程序断 2.5.代收集器 种收集器堆栈两或域用存放同寿命象jvm新象般放其某域段间继续存象获使用期并转入更寿命域代收集器同域使用同算优化性能 2.6.并发收集器 并发收集器与应用程序同运行些收集器某点(比压缩)般都停止其操作完特定任务其应用程序进行其台操作所断其处理实际间降低 2.7.并行收集器 并行收集器使用某种传统算并使用线程并行执行工作cpu机器使用线程技术显着提高java应用程序扩展性3.Sun HotSpot 1.4.1 JVM堆调整 Sun HotSpot 1.4.1使用代收集器堆三主要域:新域、旧域及永久域Jvm所新象放新域旦象经历定数量垃圾收集循环便获使用期并进入旧域永久域jvm则存储classmethod象配置言永久域独立域并且认堆部 面介绍何控制些域使用-Xms-Xmx 控制整堆原始或值 面命令初始设置128M: java –Xms128m –Xmx256m控制新域使用-XX:NewRatio设置新域堆所占比例 面命令整堆设置128m新域比率设置3即新域与旧域比例1:3新域堆1/4或32M:java –Xms128m –Xmx128m–XX:NewRatio =3使用-XX:NewSize-XX:MaxNewsize设置新域初始值值 面命令新域初始值值设置64m:java –Xms256m –Xmx256m –Xmn64m 永久域默认4m运行程序jvm调整永久域满足需要每调整jvm堆进行完全垃圾收集 使用-XX:MaxPerSize标志增加永久域搭WebLogic Server应用程序加载较类经需要增加永久域值jvm加载类永久域象急剧增加使jvm断调整永久域避免调整使用-XX:PerSize标志设置初始值 面永久域初始值设置32m值设置64mjava -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m 默认状态HotSpot新域使用复制收集器该域般三部第部Eden用于新象另两部称救助空间Eden 充满收集器停止应用程序所达象复制前from救助空间旦前from救助空间充满收集器则达象复制前to救助空间Fromto救助空间互换角色维持象救助空间断复制直获使用期并转入旧域使用-XX:SurvivorRatio 控制新域空间 同NewRationSurvivorRation规定某救助域与Eden空间比值比命令新域设置64mEden占32m每救助域各占16m:java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2 前所述默认状态HotSpot新域使用复制收集器旧域使用标记-清除-压缩收集器新域使用复制收集器意义应用程序部象短寿命理想状态所渡象移Eden空间收集能够并且移Eden空间象寿命理论立即移进旧域避免救助空间反复复制应用程序能适合种理想状态部寿命象保持些寿命象并放新域复制部象总比压缩旧域廉价控制新域象复制用-XX:TargetSurvivorRatio控制救助空间比例(该值设置救助空间使用比例救助空间位1M该值50表示用500K)该值百比默认值50较堆栈使用较低 sruvivorratio应增加该值80至90更利用救助空间用-XX:maxtenuring threshold控制限 放置所复制全部发及希望象eden扩展旧域MaxTenuring Threshold设置0设置完实际再使用救助空间应SurvivorRatio设值化Eden空间设置:java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=50000 …4.BEA JRockit JVM使用 Bea WebLogic 8.1使用新JVM用于Intel平台Bea安装完毕目录看类似于jrockit81sp1_141_03文件夹 Bea新JVM所目录同于HotSpotJava字节码编译本码预先编译类JRockit提供更细致功能用观察JVM运行状态主要独立GUI控制台(能适用于使用Jrockit才能使用jrockit81sp1_141_03自带console监控些cpu及 memory参数)或者WebLogic Server控制台 Bea JRockit JVM支持4种垃圾收集器: 4.1.1.代复制收集器 与默认代收集器工作策略类似象新域配即JRockit文档nursery种收集器适合单cpu机型堆操作 4.1.2.单空间并发收集器 该收集器使用完整堆并与背景线程共同工作尽管种收集器消除断收集器需花费较间寻找象且处理应用程序收集器经运行处理器能应付应用程序产垃圾断应用程序并关闭收集 代并发收集器种收集器护理域使用排复制收集器旧域则使用并发收集器由于比单空间共同发收集器断频繁需要较少内存应用程序运行效率较高注意护理域导致量临象扩展旧域造收集器超负荷运作甚至采用排性工作式完收集 4.1.3.并行收集器 该收集器停止其进程工作使用线程加速收集进程尽管比其收集器易于引起间断般能更利用内存程序效率较高 默认状态JRockit使用代并发收集器要改变收集器使用-Xgc:应四收集器别 gensinglecongencon及parallel使用-Xms-Xmx设置堆初始值要设置护理域则使用- Xns:java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m…尽管JRockit支持-verbose:gc关输信息收集器同异JRockit支持memory、 loadcodegen输 注意 : 使用JRockit JVM使用WLS自带console(C:\bea\jrockit81sp1_141_03\bin)监控些数据cpu memery等要想能构监控必须启服务startWeblogic.cmd加入-Xmanagement参数5.何JVM获取信息进行调整 -verbose.gc关显示gc操作内容打显示忙空闲收集行发间、收集前内存、收集需要间等打- xx:+ printgcdetails关详细解gc变化打-XX: + PrintGCTimeStamps关解些垃圾收集发间自jvm启秒计量通-xx: + PrintHeapAtGC关解堆更详细信息解新域情况通-XX:=PrintTenuringDistribution关解获使用期象权6.Pdm系统JVM调整 6.1.服务器:前提内存1G 单CPU 通参数进行调整:-server 启用服务器模式(CPU服务器机建议使用项) -Xms,-Xmx般设同 800m -Xmn NewSize与MaxNewSize设致320m -XX:PerSize 64m -XX:NewSize 320m 值设调新象区减少Full GC数 -XX:MaxNewSize 320m -XX:NewRato NewSize设设 -XX: SurvivorRatio -XX:userParNewGC 用设置并行收集 -XX:ParallelGCThreads 用增加并行度 -XXUseParallelGC 设置使用并行清除收集器 -XX:UseAdaptiveSizePolicy 与面联合使用效更利用自优化新域及救助空间比值 6.2.客户机:通JNLP文件设置参数调整客户端JVM JNLP参数:initial-heap-sizemax-heap-size frameworkRequestManagerJNLP文件加入述参数些值要求根据客户机硬件状态变化(客户机内存等)建议两参数值设客户机用内存60%(待测试)态JNLP两参数值能够随客户机同同靠虑获客户机系统信息并些嵌首页index.jsp作连接请求参数 设置述参数通Visualgc 观察垃圾收些参数状态再做相应调整改善性能般标准减少fullgc数硬件支持使用并行垃圾收(要求CPU)

㈥ 为什么会发生full gc

前面是我自己理解的后面是复制的java中垃圾回收以前听老师讲好像是内存满了他才去做一次整体垃圾回收,在回收垃圾的同时会调用finalize方法.你在构造一个类时可以构造一个类时覆盖他的finalize方法以便于该类在被垃圾回收时执行一些代码,比如释放资源.1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如,实时应用程序主要是为了避免垃圾收集中断,而大多数OLTP应用程序则注重整体效率。理解了应用程序的工作负荷和jvm支持的垃圾收集算法,便可以进行优化配置垃圾收集器。 垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。 1.1.引用计数 引用计数存储对特定对象的所有引用数,也就是说,当应用程序创建引用以及引用超出范围时,jvm必须适当增减引用数。当某对象的引用数为0时,便可以进行垃圾收集。 1.2.对象引用遍历 早期的jvm使用引用计数,现在大多数jvm采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。 下一步,gc要删除不可到达的对象。删除时,有些gc只是简单的扫描堆栈,删除未标记的未标记的对象,并释放它们的内存以生成新的对象,这叫做清除(sweeping)。这种方法的问题在于内存会分成好多小段,而它们不足以用于新的对象,但是组合起来却很大。因此,许多gc可以重新组织内存中的对象,并进行压缩(compact),形成可利用的空间。 为此,gc需要停止其他的活动活动。这种方法意味着所有与应用程序相关的工作停止,只有gc运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的 gc不断增加或同时运行以减少或者清除应用程序的中断。有的gc使用单线程完成这项工作,有的则采用多线程以增加效率。2.几种垃圾回收机制 2.1.标记-清除收集器 这种收集器首先遍历对象图并标记可到达的对象,然后扫描堆栈以寻找未标记对象并释放它们的内存。这种收集器一般使用单线程工作并停止其他操作。 2.2.标记-压缩收集器 有时也叫标记-清除-压缩收集器,与标记-清除收集器有相同的标记阶段。在第二阶段,则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。 2.3.复制收集器 这种收集器将堆栈分为两个域,常称为半空间。每次仅使用一半的空间,jvm生成的新对象则放在另一半空间中。gc运行时,它把可到达对象复制到另一半空间,从而压缩了堆栈。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率降低。 2.4.增量收集器 增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。 2.5.分代收集器 这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。jvm生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。 2.6.并发收集器 并发收集器与应用程序同时运行。这些收集器在某点上(比如压缩时)一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低。 2.7.并行收集器 并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显着的提高java应用程序的可扩展性。3.Sun HotSpot 1.4.1 JVM堆大小的调整 Sun HotSpot 1.4.1使用分代收集器,它把堆分为三个主要的域:新域、旧域以及永久域。Jvm生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。在永久域中jvm则存储class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分。 下面介绍如何控制这些域的大小。可使用-Xms和-Xmx 控制整个堆的原始大小或最大值。 下面的命令是把初始大小设置为128M: java –Xms128m –Xmx256m为控制新域的大小,可使用-XX:NewRatio设置新域在堆中所占的比例。 下面的命令把整个堆设置成128m,新域比率设置成3,即新域与旧域比例为1:3,新域为堆的1/4或32M:java –Xms128m –Xmx128m–XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize设置新域的初始值和最大值。 下面的命令把新域的初始值和最大值设置成64m:java –Xms256m –Xmx256m –Xmn64m 永久域默认大小为4m。运行程序时,jvm会调整永久域的大小以满足需要。每次调整时,jvm会对堆进行一次完全的垃圾收集。 使用-XX:MaxPerSize标志来增加永久域搭大小。在WebLogic Server应用程序加载较多类时,经常需要增加永久域的最大值。当jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小。为了避免调整,可使用-XX:PerSize标志设置初始值。 下面把永久域初始值设置成32m,最大值设置成64m。java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m 默认状态下,HotSpot在新域中使用复制收集器。该域一般分为三个部分。第一部分为Eden,用于生成新的对象。另两部分称为救助空间,当Eden 充满时,收集器停止应用程序,把所有可到达对象复制到当前的from救助空间,一旦当前的from救助空间充满,收集器则把可到达对象复制到当前的to救助空间。From和to救助空间互换角色。维持活动的对象将在救助空间不断复制,直到它们获得使用期并转入旧域。使用-XX:SurvivorRatio 可控制新域子空间的大小。 同NewRation一样,SurvivorRation规定某救助域与Eden空间的比值。比如,以下命令把新域设置成64m,Eden占32m,每个救助域各占16m:java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2 如前所述,默认状态下HotSpot对新域使用复制收集器,对旧域使用标记-清除-压缩收集器。在新域中使用复制收集器有很多意义,因为应用程序生成的大部分对象是短寿命的。理想状态下,所有过渡对象在移出Eden空间时将被收集。如果能够这样的话,并且移出Eden空间的对象是长寿命的,那么理论上可以立即把它们移进旧域,避免在救助空间反复复制。但是,应用程序不能适合这种理想状态,因为它们有一小部分中长寿命的对象。最好是保持这些中长寿命的对象并放在新域中,因为复制小部分的对象总比压缩旧域廉价。为控制新域中对象的复制,可用-XX:TargetSurvivorRatio控制救助空间的比例(该值是设置救助空间的使用比例。如救助空间位1M,该值50表示可用500K)。该值是一个百分比,默认值是50。当较大的堆栈使用较低的 sruvivorratio时,应增加该值到80至90,以更好利用救助空间。用-XX:maxtenuring threshold可控制上限。 为放置所有的复制全部发生以及希望对象从eden扩展到旧域,可以把MaxTenuring Threshold设置成0。设置完成后,实际上就不再使用救助空间了,因此应把SurvivorRatio设成最大值以最大化Eden空间,设置如下:java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=50000 …4.BEA JRockit JVM的使用 Bea WebLogic 8.1使用的新的JVM用于Intel平台。在Bea安装完毕的目录下可以看到有一个类似于jrockit81sp1_141_03的文件夹。这就是 Bea新JVM所在目录。不同于HotSpot把Java字节码编译成本地码,它预先编译成类。JRockit还提供了更细致的功能用以观察JVM的运行状态,主要是独立的GUI控制台(只能适用于使用Jrockit才能使用jrockit81sp1_141_03自带的console监控一些cpu及 memory参数)或者WebLogic Server控制台。 Bea JRockit JVM支持4种垃圾收集器: 4.1.1.分代复制收集器 它与默认的分代收集器工作策略类似。对象在新域中分配,即JRockit文档中的nursery。这种收集器最适合单cpu机上小型堆操作。 4.1.2.单空间并发收集器 该收集器使用完整堆,并与背景线程共同工作。尽管这种收集器可以消除中断,但是收集器需花费较长的时间寻找对象,而且处理应用程序时收集器经常运行。如果处理器不能应付应用程序产生的垃圾,它会中断应用程序并关闭收集。 分代并发收集器这种收集器在护理域使用排它复制收集器,在旧域中则使用并发收集器。由于它比单空间共同发生收集器中断频繁,因此它需要较少的内存,应用程序的运行效率也较高,注意,过小的护理域可以导致大量的临时对象被扩展到旧域中。这会造成收集器超负荷运作,甚至采用排它性工作方式完成收集。 4.1.3.并行收集器 该收集器也停止其他进程的工作,但使用多线程以加速收集进程。尽管它比其他的收集器易于引起长时间的中断,但一般能更好的利用内存,程序效率也较高。 默认状态下,JRockit使用分代并发收集器。要改变收集器,可使用-Xgc:,对应四个收集器分别为 gen,singlecon,gencon以及parallel。可使用-Xms和-Xmx设置堆的初始大小和最大值。要设置护理域,则使用- Xns:java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m…尽管JRockit支持-verbose:gc开关,但它输出的信息会因收集器的不同而异。JRockit还支持memory、 load和codegen的输出。 注意 :如果 使用JRockit JVM的话还可以使用WLS自带的console(C:\bea\jrockit81sp1_141_03\bin下)来监控一些数据,如cpu, memery等。要想能构监控必须在启动服务时startWeblogic.cmd中加入-Xmanagement参数。5.如何从JVM中获取信息来进行调整 -verbose.gc开关可显示gc的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。打开- xx:+ printgcdetails开关,可以详细了解gc中的变化。打开-XX: + PrintGCTimeStamps开关,可以了解这些垃圾收集发生的时间,自jvm启动以后以秒计量。最后,通过-xx: + PrintHeapAtGC开关了解堆的更详细的信息。为了了解新域的情况,可以通过-XX:=PrintTenuringDistribution开关了解获得使用期的对象权。6.Pdm系统JVM调整 6.1.服务器:前提内存1G 单CPU 可通过如下参数进行调整:-server 启用服务器模式(如果CPU多,服务器机建议使用此项) -Xms,-Xmx一般设为同样大小。 800m -Xmn 是将NewSize与MaxNewSize设为一致。320m -XX:PerSize 64m -XX:NewSize 320m 此值设大可调大新对象区,减少Full GC次数 -XX:MaxNewSize 320m -XX:NewRato NewSize设了可不设。 -XX: SurvivorRatio -XX:userParNewGC 可用来设置并行收集 -XX:ParallelGCThreads 可用来增加并行度 -XXUseParallelGC 设置后可以使用并行清除收集器 -XX:UseAdaptiveSizePolicy 与上面一个联合使用效果更好,利用它可以自动优化新域大小以及救助空间比值 6.2.客户机:通过在JNLP文件中设置参数来调整客户端JVM JNLP中参数:initial-heap-size和max-heap-size 这可以在framework的RequestManager中生成JNLP文件时加入上述参数,但是这些值是要求根据客户机的硬件状态变化的(如客户机的内存大小等)。建议这两个参数值设为客户机可用内存的60%(有待测试)。为了在动态生成JNLP时以上两个参数值能够随客户机不同而不同,可靠虑获得客户机系统信息并将这些嵌到首页index.jsp中作为连接请求的参数。 在设置了上述参数后可以通过Visualgc 来观察垃圾回收的一些参数状态,再做相应的调整来改善性能。一般的标准是减少fullgc的次数,最好硬件支持使用并行垃圾回收(要求多CPU)。

㈦ java fullgc什么意思

GC是垃圾回收站。
FULL GC分析和问题定位
a. GC log收集和分析
(1)在JVM启动参数增加:"-verbose:gc -Xloggc:<file_name> -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
PrintGCTimeStamp只能获得相对时间,建议使用PrintGCDateStamps获得full gc 发生的绝对时间
(2)如果采用CMS GC,仔细分析jstat FGC输出和GC 日志会发现, CMS的每个并发GC周期则有两个stop-the-world阶段——initial mark与final re-mark,使得CMS的每个并发GC周期总共会更新full GC计数器两次,initial mark与final re-mark各一次

b. Dump JVM 内存快照
/opt/taobao/java/bin/jmap -mp:format=b,file=mp.bin pid
这里有一个问题是什么时候进行mp?
一种方法是前面提到的用jstat工具观察,当OLD区到达比较高的比例如60%,一般会很快触发一次FULL GC,可以进行一次DUMP,在FULL GC发生以后再DUMP一次,这样比较就可以发现到底是哪些对象导致不停的FULL GC
另外一种方法是通过配置JVM参数
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC分别用于指定在full GC之前与之后生成heap mp

c. 利用MAT((Memory Analyzer Tool)工具分析mp文件
关于MAT具体使用方法网上有很多介绍,这里不做详细展开,这里需要注意的是:
(1) MAT缺省只分析reachable的对象,unreachable的对象(将被收集掉的对象)被忽略,而分析FULL GC频繁原因时unreachable object也应该同时被重点关注。如果要显示unreachable的对象细节必须用mat 1.1以上版本并且打开选项“keep unreachable object”
(2) 通常mp文件会好几个G,无法在windows上直接进行分析,我们可以先把mp文件在linux上进行分析,再把分析好的文件拷贝到windows上,在windows上用MAT打开分析文件。

㈧ java 怎样规避full gc

据我观察JAVA程序,一般在命令行模式下运行JAVA任务,JDK可以承受的内存上限大概是机器物理内存的1/4。
比如我的服务器是16G的内存,那么JAVA程序可以占用的最大内存是4G左右,超出就报溢出。

所以在一般程序运行中,JAVA内存逐渐从
100MB 200MB, 300...1G...2G...... 膨胀到4G,在这个过程中,我的循环都设置了System.gc(),偶尔有占用内存减少的时候,但是基本下降都很有限,然后过一会儿又继续上升。直到上升到4G的时候,如果此时系统没有明确的数据持续写进内存,只是大量进行新建变量,赋值,然后生命周期结束待回收的过程,系统会大量进行GC的操作,保证JAVA内存不超过4G,但我似乎感觉一旦在内存在4G上下游动的时候,JAVA程序的性能就开始走低。

所以我的理解是,GC直到不得不执行的时候才会被执行,而且效果并不好。。。。
PS,如果是8G内存的服务器,GC频繁执行是在JAVA占用内存到达2G的时候。
同不知道如何进行高效的内存回收。本来没有任何写入内存操作的程序,但是程序处理问题一大了,占有内存就很多。

㈨ 为什么java进程频繁出现fullgc

为什么java进程频繁出现fullgc
因为有java虚拟机啊,比如说优先级什么的,都可以交给虚拟机处理。

㈩ Java中full gc什么意思

gc是垃圾回收的意思(gabage
collection),内存处理器是编程人员容易出现问题的地方,忘记或者错误的内存回收导致程序或者系统的不稳定甚至崩溃,java的gc功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的俄显示操作方法。
希望能帮到你,谢谢!

阅读全文

与javagcfullgc相关的资料

热点内容
搜索pdf内容 浏览:497
程序员装机必备的软件 浏览:9
php微信第三方登录demo 浏览:536
上海php工具开发源码交付 浏览:790
哪里有求购黄页的源码 浏览:194
商城矿机源码矿场系统 浏览:196
单片机的led灯熄灭程序 浏览:224
洛阳python培训 浏览:702
小键盘命令 浏览:194
单片机c语言返回主程序 浏览:816
dockerpythonweb 浏览:970
程序员算法有多强 浏览:717
pythonworkbook模块 浏览:245
什么app能查医生 浏览:175
轻量级的编程语言 浏览:338
程序员那么可爱生孩子 浏览:432
后缀him3加密文件是什么软件 浏览:986
坚果隐藏app为什么要140版本才能用 浏览:313
淘宝dns服务器地址 浏览:259
领英转型app哪个好用 浏览:943