Chris Blog

Finally you found me.

JDK 1.8 HashMap源码解析

领略JDK大师设计,了解HashMap的基本工作原理

简介 JDK 1.8的HashMap相较于JDK 1.7有了更多的优化,单纯在体量上HashMap的代码就足足增加了一倍。这些体量的增加更多的是底层的一些优化,如红黑树的引入和扩容时的rehash优化等。 内部结构 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<...

字解JDK并发工具源码 - AbstractQueuedSynchronizer Condition Queue

向Doug Lea学习并发工具设计

简介 Condition是一个接口,其子类在AbstractQueuedSynchronizer中实现,名为ConditionObject。 在本文中如没有特殊说明的话Condition皆为ConditionObject,他的作用与Object提供的监视器方法一样,实现等待通知模式,在Object中wait()、notify()和notifyAll()分别对应Condition中的a...

图解JDK并发工具源码 - AbstractQueuedSynchronizer Sync Queue

向Doug Lea学习并发工具设计

简介 根据JSR-166规范,Java的1.5版本引入了JUC并发工具包,这个包主要维护着以下几个功能:内部同步状态的管理,同步状态的更新和检查操作,且至少有一个使得线程在同步状态被争夺时从而进入阻塞状态的方法,以及在其他线程改变这个同步状态时解除线程的阻塞。而AbstractQueuedSynchronizer(AQS)就是构建这些组件的基础框架,整个框架的关键就是如何管理被阻塞的线程的...

Spring Cloud综合实战 - 基于TCC补偿模式的分布式事务

Spring Cloud Netflix的Try-Confirm-Cancel柔性事务示例

本文通过使用Spring Cloud和Docker构建了一个常见的Microservice体系. Spring Cloud为开发者提供了快速构建分布式系统中的一些常见工具, 如分布式配置中心, 服务发现与注册中心, 智能路由, 服务熔断及降级, 消息总线等. 而Spring Cloud Sleuth为Spring Cloud提供了分布式追踪方案, 可视化地分析服务调用链路和服务间的依赖关...

基于RESTful API的TCC补偿模式分布式事务解决方案

Atomikos TCC for transaction management across microservices

前言 本例基于Atomikos提出的微服务分布式事务的解决方案, 该方案建立在更加轻量级的HTTP协议之上, 原文如下 TCC for transaction management across microservices 根据Try Confirm Cancel补偿模式, 有关于Spring Cloud的实战如下 https://github.com/prontera/spring...

Linux性能监测工具

CPU, memory, network I/O, disk I/O and progress

监测要点 CPU - CPU的占有率 内存 - 内存的占用率, 换页数 I/O - 读写请求数, 读写量等 带宽 - 进站出站带宽占有率 CPU与内存监控 top top - 14:04:19(当前时间) up 145 days, 3:45(已运行时间), 4 users(当前在线用户数), load average: 0.09(1分钟内的...

剑指JVM - 内存区域

经得起推敲的JVM内存区域考究

运行时数据区域 - Runtime Data Areas Java堆 - Heap 对于大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存,而例外的情况就关乎JVM的优化技术之一,逃逸分析(Escape Analysis)。 逃...

剑指JVM - 虚拟机类加载机制

《深入理解Java虚拟机》第二版的知识搬运

类的生命周期 以类被加载到虚拟机内存开始直至卸载出内存,他的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载。 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始。而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定。这些阶段通常都是交叉进行,会在一个阶段执行的过程中调用另一个阶...