摘要: 前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的。同时我们常用的注解如:@Service、@Component、@Controller标注的类也是需要在xml中配置<contex 阅读全文
posted @ 2020-11-15 21:30 夜勿语 阅读(849) 评论(0) 推荐(0) 编辑
摘要: @ 前言 JDK1.5以前只有synchronized同步锁,并且效率非常低,因此大神Doug Lea自己写了一套并发框架,这套框架的核心就在于AbstractQueuedSynchronizer类(即AQS),性能非常高,所以被引入JDK包中,即JUC。那么AQS是怎么实现的呢?本篇就是对AQS及 阅读全文
posted @ 2020-10-06 16:46 夜勿语 阅读(4344) 评论(1) 推荐(7) 编辑
摘要: @ 前言 上一篇分析了优化后的synchronized在不同场景下对象头中的表现形式,还记得那个结论吗?当一个线程第一次获取锁后再去拿锁就是偏向锁,如果有别的线程和当前线程交替执行就膨胀为轻量级锁,如果发生竞争就会膨胀为重量级锁。这句话看起来很简单,但实际上synhronized的膨胀过程是非常复杂 阅读全文
posted @ 2020-09-12 17:03 夜勿语 阅读(1368) 评论(1) 推荐(0) 编辑
摘要: 前言 并发编程式Java基础,同时也是Java最难的一部分,因为与底层操作系统和硬件息息相关,并且程序难以调试。本系列就从synchronized原理开始,逐步深入,领会并发编程之美。 正文 基础稍微好点的同学应该都知道,Java中获取锁有两种方式,一种是使用synchronized关键字,另外一种 阅读全文
posted @ 2020-08-30 12:24 夜勿语 阅读(1802) 评论(0) 推荐(2) 编辑
摘要: 前言 相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Spring中是如何实现的呢?这就要分析Spring源码才能知道了。友情提示:本篇主要是讲解Autowired的实现原理,不会分析Spring初始化的过程,不熟悉 阅读全文
posted @ 2020-08-22 11:37 夜勿语 阅读(1538) 评论(0) 推荐(0) 编辑
摘要: @ 前言 在最开始讲解JVM内存结构的时候有简单分析过方法的执行原理——每一次方法调用都会生成一个栈帧并压入栈中,方法链的执行就是一个个栈帧弹出栈的过程,本篇就从字节码层面详细分析方法的调用细节。 正文 解析 Java中方法的调用对应字节码有5条指令: invokestatic:用于调用静态方法。 阅读全文
posted @ 2020-08-05 23:13 夜勿语 阅读(1310) 评论(0) 推荐(3) 编辑
摘要: @ 前言 前面学习了虚拟机的内存结构、对象的分配和创建,但对象所对应的类是怎么加载到虚拟机中来的呢?加载过程中需要做些什么?什么是双亲委派机制以及为什么要打破双亲委派机制? 类的生命周期 类的生命周期包含了如上的7个阶段,其中验证、准备、解析统称为连接 ,类的加载主要是前五个阶段,每个阶段基本上保持 阅读全文
posted @ 2020-08-01 12:22 夜勿语 阅读(546) 评论(0) 推荐(2) 编辑
摘要: @ 前言 本篇紧接上文,主要讲解垃圾回收算法的实现细节以及对目前最前沿的低延迟GC(Shenandoah、ZGC)做个介绍。 垃圾回收算法实现细节 根节点枚举 我们知道目前的JVM的垃圾回收器都是采用可达性分析算法标记存活对象,该算法首先需要找到GC Roots,然后通过这些根节点向下搜索,能搜索到 阅读全文
posted @ 2020-07-27 16:00 夜勿语 阅读(872) 评论(0) 推荐(0) 编辑
摘要: @ 前言 JVM的自动内存管理得益于不断发展的垃圾回收器,从最初的单线程收集到现在并发收集,垃圾回收器的开发者们一直在致力于如何降低GC过程中的停顿时间(STW)以及提高吞吐量,但直到现在也不存在一款完美的垃圾回收器,只能根据不同的场景选择最合适的。所以需要了解每款垃圾回收器出现的背景、原因,并掌握 阅读全文
posted @ 2020-07-25 18:24 夜勿语 阅读(344) 评论(0) 推荐(0) 编辑
摘要: @ 前言 Java是面向对象的语言,所谓“万事万物皆对象”就是Java是基于对象来设计程序的,没有对象程序就无法运行(8大基本类型除外),那么对象是如何创建的?在内存中又是怎么分配的呢? 正文 一、对象的创建方式 在Java中我们有几种方式可以创建一个新的对象呢?总共有以下几种方式: new关键字 阅读全文
posted @ 2020-07-22 22:55 夜勿语 阅读(682) 评论(0) 推荐(1) 编辑