3 夜勿语

尚未进行身份认证

我要认证

热爱技术,分享技术,博客园地址:https://www.cnblogs.com/yewy/

等级
TA的排名 9w+

深入探究JVM之方法调用及Lambda表达式实现原理

文章目录前言正文解析分派静态分派动态分派单分派和多分派动态分派的实现Lambda表达式的实现原理MethodHandle总结前言在最开始讲解JVM内存结构的时候有简单分析过方法的执行原理——每一次方法调用都会生成一个栈帧并压入栈中,方法链的执行就是一个个栈帧弹出栈帧的过程,本篇就从字节码层面详细讲讲方法的调用细节。正文解析Java中方法的调用对应字节码有5条指令:invokestatic:用于调用静态方法。invokespecial:用于调用实例构造器()方法、私有方法和父类中的方法。in

2020-08-05 23:12:46

深入探究JVM之类加载与双亲委派机制

文章目录前言类的生命周期加载验证准备解析初始化案例一案例二案例三案例四类加载器类加载器和双亲委派模型破坏双亲委派模型第一次SPITomcatOSGI总结前言前面学习了虚拟机的内存结构、对象的分配和创建,但对象所对应的类是怎么加载到虚拟机中来的呢?加载过程中需要做些什么?什么是双亲委派机制以及为什么要打破双亲委派机制?类的生命周期类的生命周期包含了如上的7个阶段,其中验证、准备、解析统称为连接 ,类的加载主要是前五个阶段,每个阶段基本上保持如上顺序开始(仅仅是开始,实际上执行是交叉混合的),只有解析

2020-08-01 12:21:13

深入探究JVM之垃圾回收算法实现细节

文章目录前言垃圾回收算法实现细节根节点枚举安全点安全区域记忆集和卡表写屏障并发的可达性分析低延迟GC前言本篇紧接上文,主要讲解垃圾回收算法的实现细节以及对目前最前沿的低延迟GC(Shenandoah、ZGC)做个介绍。垃圾回收算法实现细节根节点枚举我们知道目前的JVM的垃圾回收器都是采用可达性分析算法标记存活对象,该算法首先需要找到GC Roots,然后通过这些根节点向下搜索,能搜索到的就标记为存活对象,未被标记的最后就会被垃圾回收器回收。那你是否想过垃圾回收器怎么找到GC Roots呢?对于在方

2020-07-27 15:59:25

深入探究JVM之垃圾回收器

文章目录前言正文一、垃圾收集算法标记-复制标记-清除标记-整理分代回收二、常用的垃圾回收器Serial/SerialOldParNewParallel Scavenge/ParallelOldCMSGarbage First总结前言JVM的自动内存管理得益于不断发展的垃圾回收器,从最初的单线程收集到现在并发收集,垃圾回收器的开发者们一直在致力于如何降低GC过程中的停顿时间(STW)以及提高吞吐量,但直到现在也不存在一款完美的垃圾回收器,只能根据不同的场景选择最合适的。所以需要了解每款垃圾回收器出现的背景

2020-07-25 18:23:12

深入探究JVM之对象创建及分配策略

前言Java是面向对象的语言,所谓“万事万物皆对象”就是Java是基于对象来设计程序的,没有对象程序就无法运行(8大基本类型除外),那么对象是如何创建的?在内存中又是怎么分配的呢?正文对象的创建方式在Java中我们有几种方式可以创建一个新的对象呢?总共有以下几种方式:new关键字反射clone反序列化Unsafe.allocateInstance为了便于说明和理解,下文仅针对new出来的对象进行讨论。对象的创建过程Java中对象的创建过程就包含上图中的5个步骤,首先需要验证待创

2020-07-22 22:54:24

深入探究JVM之内存结构及字符串常量池

前言Java作为一种平台无关性的语言,其主要依靠于Java虚拟机——JVM,我们写好的代码会被编译成class文件,再由JVM进行加载、解析、执行,而JVM有统一的规范,所以我们不需要像C++那样需要程序员自己关注平台,大大方便了我们的开发。另外,能够运行在JVM上的并只有Java,只要能够编译生成合乎规范的class文件的语言都是可以跑在JVM上的。而作为一名Java开发,JVM是我们必须要学习了解的基础,也是通向高级及更高层次的必修课;但JVM的体系非常庞大,且术语非常多,所以初学者对此非常的头疼。本

2020-07-20 23:36:53

Mybatis插件扩展以及与Spring整合原理

文章目录前言正文插件扩展1. Interceptor核心实现原理2. Mybatis的拦截增强Mybatis与Spring整合原理1. SqlSessionFactory的创建2. 扫描Mapper并创建代理对象3. 如何整合Spring事务4. FactoryBean的扩展知识总结前言前面几篇文章分析了Mybatis的核心原理,但模块较多,没有一一分析,更多的需要读者自己下来研究。不过Mybatis的插件扩展机制还是非常重要的,像PageHelper就是一个扩展插件,熟悉其扩展原理,才能更好的针对我们

2020-07-09 23:08:31

深入Mybatis源码——执行流程

前言上一篇分析Mybatis是如何加载解析XML文件的,本篇紧接上文,分析Mybatis的剩余两个阶段:代理封装和SQL执行。正文代理封装Mybatis有两种方式调用Mapper接口:private static SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);// 第一种try (SqlSession session = sqlMapper.openSession(TransactionI

2020-07-07 22:44:57

深入Mybatis源码——配置解析

文章目录前言正文配置解析1. cacheRefElement/cacheElement2. resultMapElements3. sqlElement4. buildStatementFromContext总结前言上一篇分析了Mybatis的基础组件,Mybatis的运行调用就是建立在这些基础组件之上的,那它的执行原理又是怎样的呢?在往下之前不妨先思考下如果是你会怎么实现。正文熟悉Mybatis的都知道,在使用Mybatis时需要配置一个mybatis-config.xml文件,另外还需要定义Ma

2020-07-06 22:36:20

Mybatis源码初探——优雅精良的骨架

前言Mybatis是一款半自动的ORM框架,是目前国内Java web开发的主流ORM框架,因此作为一名开发者非常有必要掌握其实现原理,才能更好的解决我们开发中遇到的问题;同时,Mybatis的架构和源码也是很优雅的,使用了大量的设计模式实现解耦以及高扩展性,所以对其设计思想,我们也非常有必要好好理解掌握。(PS:本文基于3.5.0版本分析)精良的Mybatis骨架宏观设计Mybatsi的源码相较于Spring源码无论是架构还是实现都简单了很多,它所有的代码都在一个工程里面,在这个工程下分了很多包,

2020-07-06 15:23:15

全网最深分析SpringBoot MVC自动配置失效的原因

前言本来没有计划这一篇文章的,只是在看完SpringBoot核心原理后,突然想到之前开发中遇到的MVC自动失效的问题,虽然网上有很多文章以及官方文档都说明了原因,但还是想亲自看一看,本以为很简单的事情,没想到却引发出一个较复杂的问题,请教了很多人都没有得到结果,网上文章也没有写清楚的,最后还是自己搞了很久才弄明白的,此篇主要记录自己的一个分析过程,。正文引出问题上面是SpringBoot MVC的自动配置,问题是这样的,当我们需要自己配置MVC时,有三种选择:实现WebMvcConfigure

2020-06-29 21:58:12

这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)

文章目录前言正文启动原理事件驱动自动配置原理Condition注解原理总结前言SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本非常低,但是学习其实现原理的成本大大增加,需要先了解熟悉Spring原理。如果还不清楚Spring原理的,可以先查看博主之前的文章,本篇主要分析SpringBoot的启动、自动配置、Condition、事件驱动原理。正文启动原理SpringBoot启动非常简单,因其内置了Tomcat,所以只需要通过下面几种方式启动即可

2020-06-26 13:14:34

这一次搞懂Spring Web零xml配置原理以及父子容器关系

前言在使用Spring和SpringMVC的老版本进行开发时,我们需要配置很多的xml文件,非常的繁琐,总是让用户自行选择配置也是非常不好的。基于约定大于配置的规定,Spring提供了很多注解帮助我们简化了大量的xml配置;但是在使用SpringMVC时,我们还会使用到WEB-INF/web.xml,但实际上我们是完全可以使用Java类来取代xml配置的,这也是后来SpringBoott的实现原理。本篇就来看看Spring是如何实现完全的零XML配置。正文先来看一下原始的web.xml配置:<

2020-06-20 13:11:29

这一次搞懂SpringMVC原理

文章目录前言正文请求入口组件初始化调用Controller参数、返回值解析总结前言前面几篇文章,学习了Spring IOC、Bean实例化过程、AOP、事务的源码和设计思想,了解了Spring的整体运行流程,但如果是web开发,那么必不可少的还有Spring MVC,本篇主要分析在请求调用过程中SpringMVC的实现原理,通过本篇要搞懂它是怎么解决请求、参数、返回值映射等问题的。正文请求入口我们都知道前端调用后端接口时,都会通过Servlet进行转发,而Servlet的声明周期包含下面四个阶段:

2020-06-15 23:43:32

这一次搞懂Spring事务是如何传播的

文章目录前言正文事务切面的调用过程事务的传播性概念实例分析总结前言上一篇分析了事务注解的解析过程,本质上是将事务封装为切面加入到AOP的执行链中,因此会调用到MethodInceptor的实现类的invoke方法,而事务切面的Interceptor就是TransactionInterceptor,所以本篇直接从该类开始。正文事务切面的调用过程 public Object invoke(MethodInvocation invocation) throws Throwable { // Work

2020-06-12 00:00:09

这一次搞懂Spring事务注解的解析

前言事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑。但是Spring事务原理是怎样?事务在方法间是如何传播的?为什么有时候事务会失效?接下来几篇文章将重点分析Spring事务源码,让我们彻底搞懂Spring事务的原理。正文XML标签的解析<tx:annotation-driven transaction-manager="transactionManager"/>配置过事务的应该都不陌生,上面这个配

2020-06-09 22:14:13

这一次搞懂Spring代理创建及AOP链式调用过程

文章目录前言正文基本概念代理对象的创建小结AOP链式调用前言AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是在运行期动态生成代理对象实现,也可以在编译期、类加载时期静态织入到代码中。而Spring正是通过第一种方法实现,且在代理类的生成上也有两种方式:JDK Proxy和CGLIB,默认当类实现了接口时使用前者,否则使用后者;另外Spring AOP只能实现对方法的

2020-06-06 18:23:58

Spring IOC原理补充(循环依赖、Bean作用域等)

文章目录前言正文循环依赖什么是循环依赖?Spring是如何解决循环依赖的?作用域实现原理以及如何自定义作用域作用域实现原理自定义ScopeBeanPostProcessor的执行时机SpringBoot零配置实现原理浅析总结前言通过之前的几篇文章将Spring基于XML配置的IOC原理分析完成,但其中还有一些比较重要的细节没有分析总结,比如循环依赖的解决、作用域的实现原理、BeanPostProcessor的执行时机以及SpringBoot零配置实现原理(@ComponentScan、@Import、@

2020-06-02 23:39:57

这一次搞懂Spring的Bean实例化原理

文章目录前言正文环境准备两个重要的Processor注册BeanPostProcessor对象Bean对象的创建createBeanInstanceaddSingletonFactorypopulateBeaninitializeBean总结前言前两篇文章分析了Spring XML和注解的解析原理,并将其封装为BeanDefinition对象存放到IOC容器中,而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory,接下来就将围绕着这些BeanDefinition对

2020-05-31 20:52:40

这一次搞懂Spring自定义标签以及注解解析原理

前言在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的。同时我们常用的注解如:@Service、@Component、@Controller标注的类也是需要在xml中配置<context:component-scan>才能自动注入到IOC容器中,所以本篇也会重点分析注解解析原理。正文自定义标签解析原理在上一篇分析默认标签解析时看到过这个类DefaultBeanDefiniti

2020-05-26 22:50:20

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。