- 博客(5)
- 收藏
- 关注
原创 线程之ThreadLocal
在expungeStaleEntry()方法中,会将ThreadLocal为null对应的value设置为null,同时会把对应的Entry对象也设置为null,并且会将所有ThreadLocal对应的value为null的Entry对象设置为null,这样就去除了强引用,便于后续的GC进行自动垃圾回收,也就避免了内存泄露的问题。所以,Entry对象中的Key可以被GC自动回收。场景:在同一个请求线程中,需要跨类,跨方法传递用户的身份信息,TraceID,事务上下文等信息,避免显式传参。
2025-05-07 18:32:43
602
原创 对象创建过程(java)
TLAB:TLAB为每个线程预先在java堆中Eden区域划分了一块内存区域,为对象分配内存时首先在TLAB中划出内存,如果对象内存超过内存的大小或者内存耗尽,则采用CAS+失败重试的方式。将java的堆内存空间中用过的内存整合在一边,未用过的内存划在另一边,中间存在一个分界指针,当需要从内存中划分确定大小的区域时,指针朝向未用过的内存方向移动对象内存大小的位置即可。虚拟机会维护一个表,该表记录了哪些内存块是可用的。当java代码new一个对象时,会判断该对象是否有创建过,如果没有,则执行类加载过程。
2025-04-21 22:45:43
285
原创 二叉树基本概念
对于树中相同深度的每个节点来说,它们的高度不一定相同,这取决于每个节点下面的叶子节点的深度。上图中,13和54的深度都是1,但是13的高度是1,54的高度是2。若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边是完全二叉树。满足下列性质:,这就。上图中,13的深度是1,30的深度是2,28的深度是3。54的高度是2,根节点23的高度是3。父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子 节点。
2025-04-15 14:39:53
524
原创 mysql索引B+树
官方上面说索引是帮助MySQL高效获取数据的数据结构,通俗点的说,数据库索引好比是一本书的目录,可以直接根据页码找到对应的内容,目的就是为了加快数据库的查询速度。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。一种能帮助mysql提高了查询效率的数据结构:索引数据结构。
2025-04-12 16:01:06
1036
原创 MarkDown语法记录
几乎每个 Markdown 应用程序都支持两个或多个空格进行换行,称为 结尾空格(trailing whitespace) 的方式,但这是有争议的,因为很难在编辑器中直接看到空格,并且很多人在每个句子后面都会有意或无意地添加两个空格。CommonMark 和一些其他的轻量级标记语言让您可以使用括号()作为定界符(例如,1)第一项),但并非所有 Markdown 应用程序都支持这一点,因此,从兼容性的角度来看,这不是一个很好的选择。要同时用粗体和斜体突出显示文本,请在单词或短语的前后各添加三个星号或下划线。
2024-03-19 19:05:00
1209
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人