- 博客(11)
- 收藏
- 关注
原创 JDK17模块化、反射类加载限制绕过
对于作者来说JDK17带来的最大便利就是文本块和记录类了,前者是我这个Python老玩家很喜欢的一点,后者在很大程度上简化了DTO,这回不用讨论引Lambok的问题啦。创建位置: 模块根目录命名: module名称的要求和准则跟包一样。
2024-11-07 16:01:00
967
原创 从颠倒二进制位到JIT
编译器优化的过程就是一个个图节点的优化串联起来的。不同于非解释型语言的直接编译成机器码,我们都清楚cpp在Windows系统上编译成的exe文件是不能直接在Linux系统上运行的,而Java为了跨系统兼容性,将开发者与对于系统的适配交给了JVM,对于编写好的Java文件,通过javac编译成class字节码文件,在需要运行的时候则依托对应系统的解释器运行,但是解释器每次都要将代码翻译成系统指令,对性能的影响巨大,于是Java的设计者就在JVM中内置了JIT编译器,通过选择性地编译热点代码极大地提高了性能。
2024-11-05 14:09:37
1854
原创 十大经典排序算法的Java实现
它也是基于分治策略,但与归并排序不同,快速排序的核心在于分区(partitioning),快速排序占用的空间相对较低,在特点情况下的速度高于归并排序,有很多人说Java底层采用的是快速排序,这种说法有点浅显了,Java底层的排序会根据具体场景选择最优的排序算法。大顶堆保证的是根节点的数值最大,并不能保证叶子节点是有序的,它不是二叉搜索树,所以我们通过构建大顶堆,并不断地取出堆顶的数并放到数组尾部、不断地维护大顶堆,就可以实现升序排序了。时间复杂度为n+k,其中k为待排序数组中最大的数。
2024-10-30 17:05:25
1871
原创 从零构建并查集
1.线程安全,本实现是线程不安全的,为了在多线程环境中运行,应该在修改节点的方法前加上synchronized关键字,或者通过Semaphore对各个节点分别加锁,或者直接使用ConcurrentHashMap。并查集(Disjoint-set data structure),是一种树形结构用于处理不相交集合的合并和查询问题,图数据库Neo4J底层就使用到了并查集算法,并提供了带权和不带权的支持,在。2.union(T x, T y)方法中将深度小的树合并到深度大的树下可以降低树的高度。
2024-10-28 09:52:51
288
原创 Java线程调用start方法后发生了什么?
过了这第一重关,下面就可以正式进入到启动线程的流程了,首先是添加线程组方便管理,我们创建线程时并没有传入线程组。后面的代码感兴趣的可以自行观看,总而言之就是找到并调用传入线程类的run方法。接下来调用本地方法运行线程的run方法,最后从线程组中移除掉该线程。在同步代码块中将当前线程加入线程组的线程数组,同时改变标记。在start方法内,通过线程组的add方法将线程加入线程组。当一切都执行完毕后,线程的生命自然而然地走到了末期。可以看到在这一步,获取了创建它的线程的线程组。
2024-09-30 10:17:17
343
原创 MySQL内部的一些优化方法
Adaptive Hash Index自适应哈希索引,以下简称AHI,用于优化B+Tree层级扩大后带来的查找性能下降问题,占用InnoDB Buffer Pool空间。生成的条件: 某个索引树被多次调用、该索引树上的某个索引条件被经常使用、索引数上的某个数据页被经常使用。
2024-09-24 10:43:59
488
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人