写点什么

druid 源码阅读 3——DataSource 的结构(变量)

作者:张大彪
  • 2022 年 5 月 13 日
  • 本文字数:452 字

    阅读完需:约 1 分钟

今天时间比较晚了,从宏观角度分析一下 DataSource 的结构,能看到哪里看到哪里。

宏观结构:这个类将近 4000 行,一天时间肯定看不完。先大体分个类吧。


先看变量:

从变量里看到一个非常有意思的地方,对象的原子操作,不使用 atomicLong 这样的 jdk 封装好的对象,而是使用一个原始对象加 Updater 的组合。netty 的源码里也有类似的写法,目的是为了节约内存,一个对象占用的内存比一个原始对象占用的内存要多。

对照:如果是我写的话,我会用:

private volatile AtomicLong                    recycleErrorCount         = new AtomicLong(0L);
复制代码

结果 druid 的源码是这么用的:

//声明原始变量private volatile long                    recycleErrorCount         = 0L;
//声明一个原始的updaterprotected static final AtomicLongFieldUpdater<DruidDataSource> recycleErrorCountUpdater = AtomicLongFieldUpdater.newUpdater(DruidDataSource.class, "recycleErrorCount");
复制代码


今天加班太晚了,先看到这里,明天我们借着今天这个机会,看一下这种方式大概能节省多少内存。

用户头像

张大彪

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
druid 源码阅读 3——DataSource的结构(变量)_张大彪_InfoQ写作社区