Java 基准测试框架(JMH)

在对不同工具做性能对比测试时,由于jvm的运行期优化可能导致结果的偏差。 所以,为了在大程度上避免这种偏差问题,则会用到OpenJDK的性能基准测试项目[JMH](http://openjdk.java.net/projects/code ...

Git 历史记录清洗

当在公网环境下使用 git 仓库不小心把敏感信息提交上去时,则可以使用 `filter-branch` 对代码仓库进行清洗。 ## 1. 先对本地历史进行清洗 ``` git filter-branch --force --index- ...

Git 文件忽略

## 删除仓库文件 当不小心提交了不应提交的文件后,可以用此方法处理。 1. git rm \-r \-\-cached <file_path> 2. 更新 `.gitignore` 添加忽略文件。 3. 提交修改 这样本地文件不 ...

HashMap 在并发环境下的死循环问题

因为 HashMap 是非线程安全的,在并发环境下应避免使用,改为 ConcurrentHashMap。 > 虽然在 jdk8 修复了该问题,但仍然还存在其他并发问题。 其产生的主要原因是扩容时元素的`循环引用`,在这里简单描述下。 ...

java8 default method 的使用见解

oracle 在 jdk8 中引入了接口的默认方法,用 `default` 关键字标识。 ``` public inteface Listener { default void start() { ... } } ``` 该原 ...

Java GC过程

由于JVM分代设计,GC也根据原因不同而产生不同效果的GC,并且在Java的发展过程中根据不同的GC策略也有不同的过程实现。 ## Stop-the-World 在 HotSpot 虚拟机中,Stop-the-World 也被称之为 s ...

volatile 浅析

## 概念 volatile原语保障了多线程下变量的原子性、可见性、有序性。 ## 原子性 在32位虚拟机下对`long`、`double`类型的赋值操作会拆分位高位、低位两步完成修改,而volatile可使用内存屏障来达到原子性,保证 ...

Java 锁机制

## synchronized 在 jdk1.6 之后,`synchronized` 原语通过引入偏向锁、轻量锁进行了优化。 synchronized 是通过 `monitor_enter` 和 `monitor_exit` 来控制的 ...

在 jdk9 下使用 Lombok

由于jdk9中对lombok所依赖的类进行了迁移,所以使用lombok的程序无法直接升级。需按照如下方式升级: 1. 升级lombok依赖 ``` <properties> <lombok.version>1.18.0</lom ...

ConcurrentHashMap 原理分析

`ConcurrentHashMap` 是 jdk 提供的针对并发环境下的集合类容器,是为了解决 `HashMap` 在并发环境下的线程安全问题。 ## JDK7 * 利用分段锁(Segment)和 `ReentrantLock` ...