草庐IT

搞懂EventLoop机制

全部标签

20220930-Vector集合扩容机制源码分析

目录一、使用默认无参构造器创建Vector集合1.测试代码2.底层代码二、使用带参构造器创建Vector集合1.测试代码2.底层代码总结:ArrayList与Vector集合的底层都是通过Object[]elementData数组存放对象的ArrayList使用无参构造器时,初始容量为0,当存放一个对象后,容量扩容为10,此后按1.5*当前容量进行扩容ArrayList使用带参构造器时,初始容量为设定值,当存放对象个数达到集合容量上限后,此后按1.5*当前容量进行扩容Vector使用无参构造器时,初始容量为10,当存放对象个数达到集合容量上限后,此后按2*当前容量进行扩容Vector使用带参构

20220930-Vector集合扩容机制源码分析

目录一、使用默认无参构造器创建Vector集合1.测试代码2.底层代码二、使用带参构造器创建Vector集合1.测试代码2.底层代码总结:ArrayList与Vector集合的底层都是通过Object[]elementData数组存放对象的ArrayList使用无参构造器时,初始容量为0,当存放一个对象后,容量扩容为10,此后按1.5*当前容量进行扩容ArrayList使用带参构造器时,初始容量为设定值,当存放对象个数达到集合容量上限后,此后按1.5*当前容量进行扩容Vector使用无参构造器时,初始容量为10,当存放对象个数达到集合容量上限后,此后按2*当前容量进行扩容Vector使用带参构

Java的动态绑定机制

Java的动态绑定机制当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用看案例:publicclassDynamic{publicstaticvoidmain(String[]args){Animalcat=newCat();cat.action();//小猫吃鱼,动态绑定看new的对象的运行类型和内存地址}}classAnimal{privateintage;//创建eat方法publicvoideat(){System.out.println("动物进食");}//创建方法,调用eat方法publicvoidaction()

Java的动态绑定机制

Java的动态绑定机制当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用看案例:publicclassDynamic{publicstaticvoidmain(String[]args){Animalcat=newCat();cat.action();//小猫吃鱼,动态绑定看new的对象的运行类型和内存地址}}classAnimal{privateintage;//创建eat方法publicvoideat(){System.out.println("动物进食");}//创建方法,调用eat方法publicvoidaction()

18 Java内存模型与线程_JVM同步机制和锁类库实现线程安全

目录1线程安全定义2Java数据与线程安全2.1不可变2.2绝对线程安全2.3相对线程安全2.4线程兼容2.5线程对立3Java线程安全支持3.1互斥同步3.1.1synchronized互斥同步原理3.1.2Lock接口和ReentrantLock互斥同步原理3.1.3synchronized和Lock对比3.2非阻塞同步3.3无同步方案3.3.1可重入代码3.3.2线程本地存储1线程安全定义含糊的定义:如果一个对象可以安全地被多个线程同时使用,那它就是线程安全的严谨的定义:当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方

18 Java内存模型与线程_JVM同步机制和锁类库实现线程安全

目录1线程安全定义2Java数据与线程安全2.1不可变2.2绝对线程安全2.3相对线程安全2.4线程兼容2.5线程对立3Java线程安全支持3.1互斥同步3.1.1synchronized互斥同步原理3.1.2Lock接口和ReentrantLock互斥同步原理3.1.3synchronized和Lock对比3.2非阻塞同步3.3无同步方案3.3.1可重入代码3.3.2线程本地存储1线程安全定义含糊的定义:如果一个对象可以安全地被多个线程同时使用,那它就是线程安全的严谨的定义:当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方

【源码透视】SpringBoot的SPI机制

一、从java类加载机制说起java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器BootstrapClassLoader、ExtensionClassLoader和SystemClassLoader(ApplicationClassLoader)每一个类加载器都确定了从哪些位置加载文件。于此同时我们也可以通过继承java.lang.classloader实现自己的类加载器。BootstrapClassLoader:负责加载JDK自带的rt.jar包中的类文件,是所有类加载的父类ExtensionClassLoader:

【源码透视】SpringBoot的SPI机制

一、从java类加载机制说起java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器BootstrapClassLoader、ExtensionClassLoader和SystemClassLoader(ApplicationClassLoader)每一个类加载器都确定了从哪些位置加载文件。于此同时我们也可以通过继承java.lang.classloader实现自己的类加载器。BootstrapClassLoader:负责加载JDK自带的rt.jar包中的类文件,是所有类加载的父类ExtensionClassLoader:

解读JVM级别本地缓存Caffeine青出于蓝的要诀3 —— 讲透Caffeine的数据驱逐淘汰机制与用法

大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。上一篇文章中,我们聊了下Caffeine的同步、异步的数据回源方式。本篇文章我们再一起研讨下Caffeine的多种不同的数据淘汰驱逐机制,以及对应的实际使用。Caffeine的异步淘汰清理机制在惰性删除实现机制这边,Caffeine做了一些改进优化以提升在并发场景下的性能表现。我们可以和GuavaCache的基于容量大小的淘汰处理做个对比。当限制了GuavaCache最大容量之后,有新的记录写入超过了总大小,会理解触发数据淘汰策略,然后腾

解读JVM级别本地缓存Caffeine青出于蓝的要诀3 —— 讲透Caffeine的数据驱逐淘汰机制与用法

大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。上一篇文章中,我们聊了下Caffeine的同步、异步的数据回源方式。本篇文章我们再一起研讨下Caffeine的多种不同的数据淘汰驱逐机制,以及对应的实际使用。Caffeine的异步淘汰清理机制在惰性删除实现机制这边,Caffeine做了一些改进优化以提升在并发场景下的性能表现。我们可以和GuavaCache的基于容量大小的淘汰处理做个对比。当限制了GuavaCache最大容量之后,有新的记录写入超过了总大小,会理解触发数据淘汰策略,然后腾