个人简介

Echo Blog


江湖无名 安心练剑
  • JVM-GoLang GC 于 java 对比-35
    序言 首先强调下本文的起因是在高可用架构后花园群的一次聊天,大家在争论Golang的GC到底是类似Java的ZGC还是类似Java的CMS GC。 我个人的看法是Golang的GC是类似于Java的CMS GC,官方的mgc的注释这么说的: // The GC runs concurrently with mutator threads, is type accurate (aka p...
    2018-10-08 15:36:46 | Java
  • JVM-生成性能问题定位-34
    1. 代码相关 遇到性能问题,首先应该做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误。 性能优化的最佳位置,是应用内部。 譬如,查看业务日志,检查日志内容里是否有大量的报错产生,应用层、框架层的一些性能问题,大多数都能从日志里找到端倪(日志级别设置不合理,导致线上疯狂打日志);再者,检查代码的主要逻辑,如 for 循环的不...
    2018-10-08 15:36:46 | Java
  • JVM-Arthas Java 诊断工具-33
    arthas arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 能解决什么问题 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上...
    2018-10-08 15:36:46 | Java
  • JVM-反编译字节码 decompile bytecode-32
    背景 有编译,就有反编译。 实际使用中,我们最常见的需求,应该是根据 class 文件,阅读相关的源码信息。 CFR(Class File Reader) 最近在研究一下class字节码的东西,尝试将class文件反编译成java文件。尝试了很多的工具,比如JD-GUI及其插件以及各种在线反编译,始终感觉不够酷,毕竟我是一个比较依赖终端的人,所以尝试找一些能否在终端可以实现反编译的工...
    2018-10-08 15:36:46 | Java
  • JVM-逃逸分析-31
    逃逸分析 逃逸分析(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-Shenandoah GC-29
    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