• JVM-4


    目录

    1.JVM性能调优参数

    1.1JVM参数分类

    1.2JVM性能调优参数(简单)

    2.逃逸分析技术

    3.JVM垃圾收集器


    1.JVM性能调优参数

    1.1JVM参数分类

    “-”、“-X”、“-XX”

    标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

    -verbose:class,-verbose:gc,-verbose:jni

    非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

    Xms20m,-Xmx20m,-Xmn20m,-Xss128k

    非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

    -XX:+PrintGCDetails,-XX:-UseParallelGC,-XX:+PrintGCTimeStamps

    参考:JVM调优参数_-xx:newratio-CSDN博客

    1.2JVM性能调优参数(简单)

    1. 设定堆内存大小
    • -Xmx:堆内存最大限制。
    1. 设定新生代大小。 新生代不宜太小,否则会有大量对象涌入老年代
    • -XX:NewSize:新生代大小
    • -XX:NewRatio 新生代和老生代占比
    • -XX:SurvivorRatio:伊甸园空间和幸存者空间的占比
    1. 设定垃圾回收器
    • 年轻代用 -XX:+UseParNewGC
    • 老年代用-XX:+UseConcMarkSweepGC

    2.逃逸分析技术

    逃逸分析(Escape Analysis):是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数

    全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用

    范围,从而决定是否要将这个对象分配到堆上。

    逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变

    量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他方法或者

    线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。通俗点讲,如果一个对象的指针被

    多个方法或者线程引用时,那么我们就称这个对象的指针发生了逃逸。

    逃逸分析的好处:

    栈上分配,可以降低垃圾收集器运行的频率。

    同步消除,如果发现某个对象只能从一个线程可访问,那么在这个对象上的操作可以不需要同步。

    标量替换,把对象分解成一个个基本类型,并且内存分配不再是分配在堆上,而是分配在栈上。

    这样的好处有,

    1. 减少内存使用,因为不用生成对象头。
    2. 程序内存回收效率高,并且GC频率也会减少。

    3.JVM垃圾收集器

    如果说垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。

    新生代收集器:Serial、 ParNew 、 Parallel Scavenge

    老年代收集器: CMS 、Serial Old、Parallel Old

    整堆收集器: G1 , ZGC

    Serial收集器(复制算法): 新生代单线程收集器,标记和清理都是单线程,优点是简单高效;

    ParNew收集器 (复制算法): 新生代收并行集器,实际上是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现;

    Parallel Scavenge收集器 (复制算法): 新生代并行收集器,追求高吞吐量,高效利用 CPU。

    吞吐量 = 用户线程时间/(用户线程时间+GC线程时间),高吞吐量可以高效率的利用CPU时间,尽快完成程序的运算任务,适合后台应用等对交互相应要求不高的场景;

    Serial Old收集器 (标记-整理算法): 老年代单线程收集器,Serial收集器的老年代版本;

    Parallel Old收集器 (标记-整理算法): 老年代并行收集器,吞吐量优先,Parallel Scavenge收集器的老年代版本;

    CMS(Concurrent Mark Sweep)收集器(标记-清除算法): 老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短GC回收停顿时间。

    G1(Garbage First)收集器 (标记-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一个新收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生内存碎片。此外,G1收集器不同于之前的收集器的一个重要特点是:G1回收的范围是整个Java堆(包括新生代,老年代),而前六种收集器回收的范围仅限于新生代或老年代。

    ZGC (Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在 JDK 11 新加入,还在实验阶段,主要特点是:回收TB级内存(最大4T),停顿时间不超过10ms。

    优点:低停顿,高吞吐量, ZGC 收集过程中额外耗费的内存小。

    缺点:浮动垃圾


    近日总结:嗯......最近吃的太好了,有些安逸了,面试没有几个,有的还都是线下,难受,来往路程就要花一部分钱,完了之后还有可能是给人家刷KPI,就肯定是果断不去了,还是搞线上。

    还有一个问题,我发现我,好像是...纯爱战神......爱的话真的就从始至终了.......完了我这是...... 

  • 相关阅读:
    Java基础——递归
    excel自定义函数之汉字转为拼音及大写字母
    软件测试的行业现状,我们的未来在哪里?
    043—pandas 分组运用聚合函数agg制作汇总表
    20_多线程01
    数据结构与算法之集合: Leetcode 349. 两个数组的交集 (Typescript版)
    echarts-初识
    leetcode 71. 简化路径
    Charles下载抓包基本流程
    Ubuntu16.04 部署 TensorFlow2-GPU版本(虚拟环境)
  • 原文地址:https://blog.csdn.net/Hubery_sky/article/details/136636519