个人简介

Echo Blog


江湖无名 安心练剑
  • JVM-31-逃逸分析(Escape Analysis)
    逃逸分析 逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用 例如作为调用参数传递到其他地方中,称为方法逃逸。 例子 public static StringBuffer craeteStringBuffer(String s1, String s2) {...
    2018-10-08 15:36:46 | Java
  • JVM-30-锁消除+锁粗化 自旋锁、偏向锁、轻量级锁 逃逸分析
    自旋锁 自旋锁其实就是一个线程自转,空转,什么都不操作,但也不挂起,在那里空循环。空循环的作用就是等待一把锁。自旋锁是明确的会产生竞争的情况下使用的。 当竞争存在时,如果线程可以很快获得锁,那么就没有必要在(操作系统)OS层面挂起线程(因为在操作系统层面去挂起,他的性能消耗是非常严重的,因此如果我们能假定他能很快获取锁,就不需要让线程挂起),而是让线程做几个空操作(称为自旋) 互斥同步...
    2018-10-08 15:36:46 | Java
  • JVM-29-Shenandoah GC
    JDK 12 如期而至 jdk12 下载地址 Shenandoah GC 则是很有现实意义度 Shenandoah GC。它是 Redhat 主导开发的 Pauseless GC 实现,从大概 2013 年开始研发,终于取得了重要的阶段性成果,与其他 Pauseless GC 类似。 Shenandoah GC 主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等。 也...
    2018-10-08 15:36:46 | Java
  • JVM-28-动态追踪
    场景导入 程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧。” “线上机器,没开Debug端口。” “看日志,看看请求值和返回值分别是什么?” “那段代码没打印日志。” “改代码,加日志,重新发布一次。” “怀疑是线程池的问题,重启会破坏现场。” 长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题。” 比几十秒...
    2018-10-08 15:36:46 | Java
  • JVM-27-GC LOG 垃圾回收日志
    情境导入 产线一个问题:业务系统调用后台超时,问是不是 FULL GC 的问题。 查看方式 知道 GC 文件的位置 ··· locate xxx.log ··· 知道如何查看 FULL GC 日志 cat /XXX/gc.log | grep -a 'Full'| more 简单分析 直接根据 full gc 的关键词查看。 一般在并发较高的系统中会出现...
    2018-10-08 15:36:46 | Java
  • jmap-27-查看 jvm 内存对象信息
    jmap 概述 命令jmap是一个多功能的命令。 它可以生成 java 程序的 dump 文件,也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。 参数 option:选项参数。 pid:需要打印配置信息的进程ID。 executable:产生核心dump的Java可执行文件。 core:需要打印配置信息的核心文件。 ser...
    2018-10-08 15:36:46 | Java
  • JVM-26-GC G1 Java G1 垃圾收集器
    带着问题学习 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题。 总体来讲,对于G1我有几个疑惑,希望能够在这篇文章中得到解决。 G1出现的初衷是什么? G1适合在什么场景下使用? G1的trade-off是什么? G1的详细过程? 如何理解G1的gc日志? G1的调优思路? 从问题开始出发学习 serial...
    2018-10-08 15:36:46 | Java
  • JVM-25-GC CMS 垃圾收集器
    CMS 的问题 我觉得这些问题提的非常好,其实不看本篇解答,直接根据问题的角度去学习就足够了。 问题 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助。 CMS出现的初衷、背景和目的? CMS的适用场景? CMS的trade-off是什么?优势、劣势和代价 CMS会回收哪个区域的对象? ...
    2018-10-08 15:36:46 | Java