Java优化之GC

原创 2018年04月17日 19:32:44

一般我们不必关心Java的垃圾回收问题,JVM会帮我们处理;但是如果对JVM的GC机制不了解,可能会写出很影响性能的代码

        在此之前,我们需要了解到JVM垃圾的回收的时候,有可能出现的一种情况:stop-the-world,即JVM判定有大量垃圾需要回收,除了GC线程外,其他线程均处于阻塞状态,知道GC任务完成。所以针对GC的优化工作就是主要是减少stop-the-world触发次数(一般来说就是Full GC)。

        JVM的垃圾回收,针对的是堆内存空间和方法区,而栈内存空间的数据会在超出作用域后JVM自动清理,不归GC管理。

        通常来说,堆内存空间被大致分为

                年轻代:对象被创建后被放入老年代,大部分对象会在这个区域保存直到销毁,但是GC多次运行后依然存在的对象会根据存活时间,依次移到老年代

                老年代: 所占用的空间要比年轻代大得多

                在年轻代的清理称为MinorGC,年老代称为Full GC

                GC对于年轻代 老年代 区域的扫描频率是不一样的,相对来说老年代扫描频率低很多

        一般来说GC通过一下的条件判断是否回收

        1.对象没有引用

        2.作用域发生未捕获的异常

        3.程序在作用域内正常执行完毕

        4.程序意外停止(如 kill -9 线程)

        5.执行System.exit()

        当然我们把杜对象显式的=null 后也是可以的

        注意以上情况只是被标记为可回收,但具体什么时间回收有JVM判断


        通常的优化做法是设置年轻代转年老代的转换比例/年龄阈值

=============================================

漏掉了持久区(方法区)的GC回收介绍

必须满足以下三个条件

1.所有实例都被回收

2.加载该类的类加载器被回收

3.Class对象无法通过任何对象被访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xsf1840/article/details/79979200

JVM GC 机制与性能优化

1 背景介绍 与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理。JAVA提供了垃圾回收器(garbage collector)来自动检测对象的作用域),可自动把不再被使用的...
  • antony9118
  • antony9118
  • 2016-05-11 16:31:38
  • 7543

成为Java GC专家系列(三) ——如何优化Java垃圾回收

本文是成为Java GC专家系列文章的第三篇。在第一篇《成为Java GC专家系列(1) ——Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是年轻代和年老代,你应该了...
  • kobejayandy
  • kobejayandy
  • 2014-05-21 23:28:07
  • 6250

java GC性能优化

★JVM的内存   在Java虚拟机规范中(具体章节请看这里),提及了如下几种类型的内存空间:   ◇栈内存(Stack):每个线程私有的。   ◇堆内存(Heap):所有线程公用的。   ...
  • huanongjingchao
  • huanongjingchao
  • 2015-07-22 20:09:41
  • 630

6. GC 调优(工具篇) - GC参考手册

进行GC性能调优时, 需要明确了解, 当前的GC行为对系统和用户有多大的影响。有多种监控GC的工具和方法, 本章将逐一介绍常用的工具, 以及如何获取原生数据。 后续的章节将对重要的派生指标(deri...
  • renfufei
  • renfufei
  • 2017-02-23 18:56:02
  • 5013

gc优化小记

前提: 如果满足下面的指标,则一般不需要进行GC:    Minor GC执行时间不到50ms;    Minor GC执行不频繁,约10秒一次;    Full GC执行时间不到1s;  ...
  • u013593306
  • u013593306
  • 2016-07-06 14:18:30
  • 1052

JavaGC(3)-Java垃圾回收优化

本文是成为Java GC系列文章的第三篇。在第一篇中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。在...
  • zmx729618
  • zmx729618
  • 2016-05-18 17:40:36
  • 642

java GC调优

原帖地址:http://arbow.javaeye.com/blog/362861由于Boss看了某JVM GC调整的文章,兴致大发叫嚷要对我们的服务进行调优,于是开始了一次调优经历。由于服务是属于非...
  • jimmy1980
  • jimmy1980
  • 2009-12-08 15:23:00
  • 4510

Java GC(5)-性能调优的原则

本篇为JavaGC的第五篇,本文将讲解Java程序性能调优的原则,尤其是在这个过程中必要的知识以及判断你的程序是否需要调优。还会介绍调优过程中你可能遇到的问题。本文最后会给出一些建议,依据这些你能在对...
  • zmx729618
  • zmx729618
  • 2016-05-19 11:40:47
  • 633

elasticsearch三个重要的优化

编辑:elasticsearch-2.3.3/bin/ elasticsearch  加上: export ES_HEAP_SIZE=10g 或者启动的时候设置参数,确保Xmx和Xms大...
  • chengxuyuanyonghu
  • chengxuyuanyonghu
  • 2017-02-10 16:18:00
  • 1276

做一个吝啬的Java程序员——面向GC的编程

原文链接:BAT直通车 ——做一个吝啬的Java程序员——面向GC的编程PS:欢迎BAT直通车前言相比于C++开发Java开发要轻松的多,因为程序员不必关心比较trick的内存问题。JVM高度优化...
  • hitxueliang
  • hitxueliang
  • 2016-08-01 18:17:43
  • 864
收藏助手
不良信息举报
您举报文章:Java优化之GC
举报原因:
原因补充:

(最多只允许输入30个字)