木西笔记

个人博客

深入JVM字节码(1)

Java Class 详解

前言 作为一个Java开发者,对技术的追求而不仅仅停留在会用API,会写基本功能上,要想在技术上有更高的造诣,就需要深入到原理层面去认识代码运行的机制。因此,本文从class字节码文件的结构入手,一步步来解剖二进制字节码的内部工作原理,这对深入理解JVM的运行机制大有裨益,同时,对于想要使用BCEL来动态改变Class字节码指令的工作也很有帮助(示例:JVM Class字节码之三-使用BCE...

Java垃圾回收详解(6)

CMS 垃圾回收器详解之一 CMS GC常见问题分析

定位GC日志中STW时间较长的行为 打印所有STW停顿 1-XX:+PrintGCApplicationStoppedTime和-XX:+PrintGCApplicationConcurrentTime 找出所有暂停时间超过阈值的地方,如下: 1awk '{match($0,/.*stopped:(.*)seconds,/,a);if(a[1]>0.5) print...

Java垃圾回收详解(4)

CMS 垃圾回收器详解之一 CMS 处理流程

CMS 垃圾回收器简介 由于上一篇博文已经详细介绍了,这里就不在赘述,有兴趣可以围观一下Java垃圾回收详解(2) GC方式介绍 这里做一个简单的回顾: 获取最短回收停顿时间为目标的多线程并发收集器 cms 只会回收老年代和永久带(1.8开始为元数据区,需要设置- CMSClassUnloadingEnabled, 不会收集年轻带; cms 是一种预处理垃圾回收器,它不能等到ol...

Java垃圾回收详解(5)

CMS 垃圾回收器详解之二 CMS 深入分析

回顾 继上一节,讨论了CMS的gc 流程,本篇讨论几个遗留的问题。 CMS 的缺点 CMS GC 和Full GC 和 Minor GC 的区别 CMS GC 通过一个后台线程触发,触发机制是默认每隔2秒判断一下当前老年代的内存使用率是否达到阈值,当然具体的触发条件没有这么简单,如果是则触发一次cms gc,在该过程中只会标记出存活对象,然后清除死亡对象,期间会产生碎片空间。 Ful...

Spring-Retry 源码分析

前面我们用自己的代理模式完成一些重试的操作,接下来我们将分析一下 SpringRetry 的实现方式spring-retry 项目实现了重试和熔断功能,目前已用于SpringBatch、Spring Integration等项目 详解 QuickStart 我们首先来看一下使用。 首先我们引入使用,这里我们使用的是1.3版本 123456<!-- https://mvnreposito...

JAVA多线程之Atomic和LongAddr类(2)

LongAddr 类详解

概诉 上一节,我们讨论了Atomic类的实现原理,以及代码分析。这一节我来看 LongAddr 类。LongAdder 是JDK8添加到JUC中的。它是一个线程安全的、比Atomic*系工具性能更好的"计数器"。 首先我们来看一下 Doug Lea 大神对这个类的概述 LongAddr LongAdder 中会维护一个或多个变量,这些变量共同组成一个long型的和(这个...

JAVA多线程之常见的并发工具类(1)

并发工具类举例

概诉 本文会对java JUC 下的并发包做一个统一的讲解,针对于源码分析环境,需要取查看博主的另外一个系列——多线程,这里对细节不在深入。 Semaphore 信号量是一类经典的同步工具。信号量通常用来限制线程可以同时访问的(物理或逻辑)资源数量。 CountDownLatch 一种非常简单、但很常用的同步辅助类。其作用是在完成一组正在其他线程中执行的操作之前,允许一个或多个线程一...

JAVA多线程之Atomic和LongAddr类(1)

Atomic类详解

概述 Atomic与LongAddr解决什么问题 解决变量赋值的原子性问题。 底层采用的是CAS的自旋的方式来实现的。CAS会有ABA和性能的问题,Atomic 采用版本号的方式来解决ABA的问题。ABA问题是否会对业务产生影响,还需要业务方自己评估,大部分情况下比如一些非金融业务系统中,ABA不会对业务造成影响。 至于性能问题,CAS自旋的方式确实会造成一些CPU的空转,因为严格意义上来说...

TCP/IP系列(4)-SSL/TSL详解(3)

TLS1.2的握手步骤

概述 TLS 握手协议包含如下几步: 交换 Hello 消息, 交换随机数和支持的密码套件列表, 以协商出密码套件和对应的算法。检查会话是否可恢复 交换必要的密码参数以允许 client 和 server 协商预备主密钥 premaster secret 交换证书和密码信息以允许 client 和 server 进行身份认证 从预备主密钥 premaster secret 和交换的随机数中...

TCP/IP系列(4)-SSL/TSL详解(2)

SSL/TSL详解(2)-TLS层次分类

概述 前面章节,我们简单介绍了TLS的秘钥交换的算法。接下来我们来讲一下SSL层。 TLS层SSL层 TLS是介于网络层和传输层之间的半层。 协议层分类 TLS/SSL 协议位于应用层和传输层 TCP 协议之间。TLS 粗略的划分又可以分为 2 层: 靠近应用层的握手协议 TLS Handshaking Protocols 靠近 TCP 的记录层协议 TLS Record Protoco...