
JVM
文章平均质量分 79
生而知之者为妖
这个作者很懒,什么都没留下…
展开
-
Java动态追踪技术探究
引子在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题。”比几十秒长几十倍的沉默之后:“我轮询了那段代码一十七遍之后,终于得出一个结论。转载 2020-06-03 15:02:20 · 302 阅读 · 0 评论 -
通过分析类加载过程来解析Java的静态变量、静态方法、静态代码块、代码块、构造器执行顺序
一、 前言本篇文章主要是通过解析类加载过程来验证子父类之间的静态方法、静态代码块、普通方法、代码块、构造器的执行顺序。二、 类加载过程类加载指的是在程序运行期将类数据从Class文件加载到内存中,最终形成可以被虚拟机直接使用的Java类型,整个过程包括加载、连接(验证、准备、解析)、初始化5个阶段。类加载的时机在开始类加载过程讲述之前,先聊一聊类加载是什么时候开始的。虚拟机没有规定什么时...原创 2020-03-30 12:17:40 · 1002 阅读 · 0 评论 -
Synchronized关键字和锁优化
多线程编程中,我们往往使用synchronized关键字以ReentrantLock类来实现线程安全,二者都是基于互斥同步的方式来保障并发安全性,且都可重入。尽管最基本的互斥同步手段是synchronized关键字,它是原生语法层面的互斥锁,而ReentrantLock是API层面的互斥锁;但在JDK1.6之前,synchronized关键字的性能远远不如ReentrantLock。但在1.6以及...原创 2020-03-02 19:23:34 · 908 阅读 · 0 评论 -
Java内存模型和Volatile关键字
前言学习并发关键在于学会解决并发过程中线程通信以及线程同步中出现的问题,线程通信有两类机制,一是共享内存,另一个是消息传递。JAVA使用的是第一种,通过在共享内存中进行读写来进行消息传递,在共享内存中,线程通信是隐性的,对编程人员是透明的,因此容易出现可见性问题;线程同步则是显性的,需要编程人员来指定线程之间的互斥以及同步。高效并发系列皆是围绕着介绍虚拟机如何实现线程、多线程之间由于共享和竞争数...原创 2020-02-15 22:16:26 · 474 阅读 · 0 评论