使用火焰图(FlameGraph)分析性能热点

1. 介绍

火焰图是一个可视化工具,可以将诸多性能检测相关的命令行工具的结果进行可视化展示,方便侦测性能热点。其支持将以下工具的采样结果进行可视化展示:

Linux: perf, eBPF, SystemTap, and ktap

Solaris, illumos, FreeBSD: DTrace

Mac OS X: DTrace and Instruments

Windows: Xperf.exe

本文以perf为例介绍(关于perf的用法可以参考perf examples如何在Linux上采集性能数据并且生成火焰图。

因为我们采集的是JAVA进程,perf......

正确使用Object.wait和Object.notify

1. 前言

现在的代码实现里面几乎不用Object.wait和Object.notify了,但是对其进行学习还是有助于理解为啥他们被Locksupport.park和unpark替换了。

2. 使用汇总

关于完整使用,参考文章:如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

文章中使用wait的生产者和消费者例子可以看看。

主要要点是:

对需要线程间互斥的对象用synchronized,持有其监视器锁

永远在循环(loop)里调用 wait 和 notify, 主要避免条件不满足是就被虚假唤醒,......

聊聊Locksupport

1. 为啥有Locksuppot

看看Locksupport的源码中的注释可知,Locksupport是实现别的锁和同步类的基本原语。

Basic thread blocking primitives for creating locks and other synchronization classes.

该类native实现是依靠posix OS接口来搞的(pthread.h),类似以前操作系统课程学习的互斥锁。

class Parker : public os::PlatformParker {

private:

volatile int _counter ;

.........

关于java中的interrupt

1. interrupt知识点

PS: 以下总结基于JDK8

本文不会完整说明interrupt,只会罗列一些比较重要的点。完整了解Thread.interrupt可以看参考资料。

以下的一些理解新的有助于理解参考资料的文章:

interrupt方法调用后,针对BLOCKED状态的线程,只是设定中断标志位为true。是否响应中断(感知这个标志位的变化)取决于API的设计。JDK的阻塞IO API、Synchronized同步块、还有Lock中的很多方法(不包括lockInterruptibly)都是不响应中断的。当然调用线程可以利用标志位判断来使得自己设计的API是......

mac开发环境配置(2017)

1. 概述

以前一直用的windows,后来公司发了mac之后,用了大半年,终于感受到mac系统作为程序员工作系统的优势。类UNIX环境、很多优秀的工具、强大的触摸板和手势让我外接显示器的时候,多窗口操作的效率得到大大提升。

这里简单对自己开发环境的配置做个介绍,分享给大家,主要从以下几方面来说明:

系统配置: 主要是为了关闭一些效果,减少散热;另外一些方便的配置可以提升效率

开发工具配置

以下是我的mac,用的2017款mac pro 带touch bar,平时外接2台4K显示器,P2715Q