GC垃圾回收

  1. gc=full gc +young gc

    从网站建设到定制行业解决方案,为提供成都做网站、成都网站建设服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联将不断加快创新步伐,提供优质的建站服务。

  1. Java jvm 内存=堆内存+非堆内存

  2. 堆内存(-Xms-Xmx)=年轻代(-Xmn)+年老代

-Xms,初始分配内存,-Xmx最大分配内存,一般情况下设置成一样的值

  1. 年轻代=Eden+s0+s1

  2. 非堆内存=持久代(-XX:PermSize -XX:MaxPermSize)+code cache(-XX:reservedcodecachesize)

-XX:PermSize(初始值大小)、-XX:MaxPermSize(最大值)

【jvm内存模型图】

GC垃圾回收

  1. gc:自动检测和释放不再使用的内存。(垃圾回收)

  2. Minor gc:频率快是正常 ,也叫young  gc

  3. Major gc:尽可能让他频率少【重点关注】  ,也叫full gc

  4. 持久代(Perm):使用的class对象

  5. Jvm的生命周期:①一个对象,首先放置在Eden区,结果发现需继续使用,不能进入gc回收,则会放置在s区,s0和s1随意。②如果放在s0区,过一段时间仍不能gc回收,则会放置在s1区③再过一段时间仍不能回收,则会存放在年老代区域。④在年老代存放很长时间后,可能被major gc回收,也可能继续存活

  6. Jvm内存参数设置

  • -Xms-Xmx设置为一样的值,设置为可用内存的80%

  • -Xmn设置为堆内存的3/8

  • -XX:PermSize(默认为物理内存的1/64)、-XX:MaxPermSize(默认为物理内存的1/4)

  1. Jvm公共参数配置

  • -server:服务器模式,一定要放在所有参数之前

  • -Xss:指定每个线程占的大小(建议不要超过1M)

  • -XX:SurvivorRatio:设置年轻代里面Eden区和s区的大小比值

  • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=path_address:JVM崩溃的时候会打印出heap dump

  • -XX:+AggressiveOpts:启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)

  • -Djava.awt.headless=true:一般放在最后,主要是解决图表不兼容

  1. gc的类型

  • Serial GC:适用内存占用比较少的应用,性能最差

  • Parallel GC:年轻代多线程,年老代使用单线程

  • Parallel Old GC:年轻代和年老代都使用多线程收集垃圾

  • CMS:多线程并发回收垃圾,适用于不能忍受长时间停顿要求快速响应的应用,比较常用,最好和-XX:+UseParNewGC一同使用

  • -XX:+UseG1GC

  1. gc相关参数

  • -XX: +DisableExplicitGC:禁止使用System.gc

  • -XX:+PrintGCTimeStamps -XX:+PrintGCDetails –Xloggc:打印gc回收的详情日志

  • -XX:+UseGCOverheadLimit:让程序提前结束,达到预警目的

  • -XX:+UseCMSCompactAtFullCollection:对存活对象进行整理,使内存碎片减少


本文题目:GC垃圾回收
转载注明:http://pwwzsj.com/article/pjdohe.html