![](https://img-blog.csdnimg.cn/20210518233215476.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
加瓦
文章平均质量分 88
我和加瓦牌咖啡的故事
削尖的螺丝刀
Life is for living
展开
-
[ JVM ] 常用参数 & 优化参考
算机中三个关键指标cpu:因单位时间有限,所以由于业务逻辑不合理而出现瓶颈等...内存:数据可直接使用的暂存空间,GC会回收垃圾,但是GC配置不合理也有可能造成OOMIO(存储+网络):存储数据时持久化的IO过程,分布式多机部署时网络的IO过程。原创 2023-06-28 11:38:13 · 906 阅读 · 0 评论 -
[ Druid ] 源码拆解 —— 2. 连接是如何创建的 ?
我们之前分析源码的时候,说道了源码中关键的两个方法,分别是createAndStartCreatorThread() 和 createAndStartDestroyThread(),他们分别代表了连接的创建和销毁逻辑,我们上次从整个流程提炼出来,并对销毁逻辑做了拆解,这次我们再补齐对连接的创建逻辑的内容:创建连接任务的主要流程如下:[ 创建链接的核心流程 ]0.入口...原创 2022-05-17 23:43:36 · 449 阅读 · 0 评论 -
[ Java ] 到底什么是 SPI ?
昨天在和我的小伙伴探讨Druid源码的时候,他提出了一个问题,问题是这样描述的:DruidDataSource#getConnection中的 init 执行 DruidDriver.getInstance 的时候是如何把其他驱动注册的,也就是下面这里: public void init() throws SQLException { if (inited) { return; } ...原创 2022-05-15 23:21:14 · 359 阅读 · 0 评论 -
[ 并发编程 ] 产生死锁的 —— 四大必要条件 和 解决方案
什么是死锁 ? 一般 “死”字我们生活中都是避讳的,而这字偏偏又搭上一个 “锁” 字,就好像好像你永远也解不开你暗恋对象心中的那把锁一样...好了,意思大概这么个意思,就是死锁是让人很头疼的东西,但是女神的死锁解不开,并发编程中的锁却是有办法可解的...我们来看看对死锁比较广泛的一个解释:死锁是指两个或两个以上的...原创 2022-05-14 17:26:06 · 511 阅读 · 0 评论 -
[ Druid ] 源码拆解 —— 3. 连接池到底是如何做到 收缩的 ?
上篇文章从 Druid 的入口了解了它从初始化到创建获取链接,然后到最终销毁的过程,但还有一块没有细说,那就是 Shrink ,它的英文本意有一层缩水的意思,没错就像你新买的牛仔裤洗完就缩水了。但是这里的缩水明显更加智能,它是池化的一项必备技能,你可以在各种池化工具中看到它的身影 。同时上篇文章中有提到各种参数的初始化,我们这里再从 Druid 官方文档 来看看,主要的配置参数都有哪些: 配置 缺省值 ...原创 2022-05-13 12:30:14 · 394 阅读 · 0 评论 -
[ Druid ] 源码拆解 —— 1. 初始化过程的全局概览
说到数据库连接池,一定绕不过的坎就是 JDBC, 本文对源码的拆解阅读,默认读者已经了解JDBC,此处只做简单概括,略微回忆,如果已经掌握请直接跳至Druid源码拆解的部分:JDBC (全称: Java Database Connectivity)—— 它代表了 Java数据库连接,是你代码逻辑到一切数据库的直接桥梁。我们可以简单鸟瞰一下JDBC的架构和对应的API核心组件。JDBC API提供以下接口和类 :DriverManager:此类管理数据库驱动程序列表原创 2022-05-12 10:20:36 · 829 阅读 · 0 评论 -
[ JVM ] 螺丝刀学习笔记之 —— 重学JVM概览
这里是螺丝刀本人在学习儒猿JVM专栏时,结合自己理解对一些重点概览做的提炼总结,方便学习和记忆,欢迎感兴趣的同学一起学习探讨。JVM是如何运行JAVA文件的?Java文件在打包成jar或者war后会变成Class文件,在容器里面调用JVM,时候就会加载class文件加载的过程: 加载 —— 连接(校验,准备(在这里会设置内存空间,并给static赋默认值,finalstatic直接赋值放在常量池,这个必须记住),解析) —— 初始化(在这里会调用静态方法) —— 使用 —— 销毁加载方式:.原创 2021-10-24 22:20:27 · 1670 阅读 · 0 评论 -
[ Java ] 一文说透所谓的双亲委派
所谓的双亲委派我其实觉得更应该翻译成“父辈代理”,因为这个双亲在原意中就是父/母辈这一代,并且代码体现的意思也是把类交由父类加载。那么在了解双亲委派的基础上我们还要知道类的加载过程分为三个阶段即加载——>验证——>初始化,而我们所说的双亲委派就是发生在加载阶段中。PS: 类似于这样提升理解成本的翻译偏差在计算机领域还是有一小部分的,比如套接字-socket的本意是插座、插孔,想象服务器就像一个大插排,包含很多插座,客户端就是像一个插头,每一个线程代表一条电线,客户端将电线的插头插到服务器插排上原创 2021-03-05 14:32:24 · 429 阅读 · 6 评论 -
关于@Primary和@Autowired+@Qualified和@Resource注解的区别【注解篇】
【关于*@Primary和@Autowired+@Qualified和@Resource*注解的区别】???? 当一个Service被两个Bean实现时,或者是其他接口被多个bean实现,那么当你再一个类中要引用这个接口就会报错,要么是***Invalid bound statement (not found)*** 要么是org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of原创 2020-09-03 09:57:57 · 2024 阅读 · 0 评论