<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[clebron的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/clebron</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; clebron]]></copyright><item><title><![CDATA[HashMap的扩容机制]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120529597</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120529597</guid><author>clebron</author><pubDate>Tue, 28 Sep 2021 15:01:12 +0800</pubDate><description><![CDATA[HashMap的扩容机制：
首先来了解一下几个参数：

static final float DEFAULT_LOAD_FACTOR = 0.75f;  //默认的负载因子 常量

static final int MAXIMUM_CAPACITY = 1 &lt;&lt; 30;  //hashmap的最大容量 常量

static final int DEFAULT_INITIAL_CAPACITY = 1 &lt;&lt; 4; // aka 16  常量

int threshold;   //阀值]]></description><category></category></item><item><title><![CDATA[Vector的扩容机制]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120513904</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120513904</guid><author>clebron</author><pubDate>Mon, 27 Sep 2021 17:46:10 +0800</pubDate><description><![CDATA[同样的Vector的初始化也有无参和有参
无参：
    public Vector() {
        this(10);
    }

直接给定初始容量为10；
一个参数：
    public Vector(int initialCapacity) {
        this(initialCapacity, 0);
    }

定义初始化容量大小，扩容参数为0
两个参数：
public Vector(int initialCapacity, int capacityIncrement) {
]]></description><category></category></item><item><title><![CDATA[ArrayList的扩容机制]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120511162</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120511162</guid><author>clebron</author><pubDate>Mon, 27 Sep 2021 16:16:51 +0800</pubDate><description><![CDATA[ArrayList的初始化：
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
	public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

ArrayList的容量默认大小：
    /**
     * Default initial capacity.
     */
    priva]]></description><category></category></item><item><title><![CDATA[JVM要点]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120334940</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120334940</guid><author>clebron</author><pubDate>Thu, 16 Sep 2021 18:31:44 +0800</pubDate><description><![CDATA[一、体系结构











程序计数器：


内存空间小，线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令，分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成


Java 虚拟机栈：


线程私有，生命周期和线程一致。描述的是 Java 方法执行的内存模型：每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束，就对应着一个栈帧从虚拟机栈中入栈到出栈.]]></description><category></category></item><item><title><![CDATA[JVM判断对象是否死去]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120334924</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120334924</guid><author>clebron</author><pubDate>Thu, 16 Sep 2021 18:30:09 +0800</pubDate><description><![CDATA[一、引用计数法

给对象添加一个引用计数器，每当有一个地方引用它时，计数器值就加1；当引用失效时，计数器值就减1；任何时刻计数器为0的对象就是不可能被再使用的。



二、可达性分析算法

通过一些列的称为“GC Roots”的对象作为起始点，从这些节点开始向下搜索，搜索所走过的路径称为引用链，当一个对象到GC Roots没有任何引用链相连时（就是从GC Roots 到这个对象是不可达），则证明此对象是不可用的。所以它们会被判定为可回收对象（例如图B中的对象既是不可达的）。



可作为 GC Roots ]]></description><category></category></item><item><title><![CDATA[对象的生命周期]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120334905</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120334905</guid><author>clebron</author><pubDate>Thu, 16 Sep 2021 18:28:53 +0800</pubDate><description><![CDATA[在JVM运行空间中，对象的整个生命周期大致可以分为7个阶段：


创建阶段（Creation）、应用阶段（Using）、不可视阶（Invisible）、不可到达阶段（Unreachable）、可收集阶段（Collected）、终结阶段（Finalized）与释放阶段（Free）。上面的这7个阶段，构成了 JVM中对象的完整的生命周期。




创建阶段：

在对象创建阶段，系统要通过下面的步骤，完成对象的创建过程：

（1）为对象分配存储空间。

（2）开始构造对象。

（3）递归调用其超类的构造方法。

]]></description><category></category></item><item><title><![CDATA[CompletableFuture之有返回值异步回调]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120334869</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120334869</guid><author>clebron</author><pubDate>Thu, 16 Sep 2021 18:26:29 +0800</pubDate><description><![CDATA[使用CompletableFuture的静态方法实例化，传入的参数为函数式接口Supplier的匿名内部类，Supplier接口只提供返回值；



SupplyAsync方法中，带Async结尾的都是异步的，







asyncPool参数是一个异步线程池，







当useCommonPool为真时，useCommonPool等于公共池的并行线程数是否大于1







当等于1时，就相当于只有一个线程，不能支持并行性则回退



大于1的时候就使用公共线程池，继续执行





...]]></description><category></category></item><item><title><![CDATA[并发编程要点]]></title><link>https://blog.youkuaiyun.com/clebron/article/details/120334760</link><guid>https://blog.youkuaiyun.com/clebron/article/details/120334760</guid><author>clebron</author><pubDate>Thu, 16 Sep 2021 18:25:08 +0800</pubDate><description><![CDATA[一.Synchronized 与Lock 的区别

1、Synchronized 内置的Java关键字，Lock是一个Java类

2、Synchronized 无法判断获取锁的状态，Lock可以判断

3、Synchronized 会自动释放锁，lock必须要手动加锁和手动释放锁！可能会遇到死锁

4、Synchronized 线程1(获得锁-&gt;阻塞)、线程2(等待)；lock就不一定会一直等待下去，lock会有一个trylock去尝试获取锁，不会造成长久的等待。

5、Synchronized 是]]></description><category></category></item></channel></rss>