- 博客(8)
- 收藏
- 关注
原创 JMH探索
JMH探索 一、JMH基本介绍 1.1 什么是JMH 1.2 JMH入门 二、JMH的基本概念和配置 2.1 例 2.2 基本标签介绍 2.3 控制台输出 2.4 常用模式(Mode) 2.5 迭代(Iteration) 2.6 预热(Warmup) 2.7 配置类(Options) 2.8 状态(State) 三、JMH注意事项 3.1 Dead-Code代码 3.2 黑洞 3.3 常量折叠 3.4 避免循环 3.5 分叉 四、可视化 JMH基本介绍 什么是J
2021-10-07 18:42:05
259
原创 集合删除的陷阱
集合删除的陷阱 一、基本原理 二、删除的陷阱(一) 2.1 什么是结构性变化?如何解决 2.2 迭代器的原理 三、删除的陷阱(二) 基本原理 说到集合,最典型的就属ArrayList了,这里来说说其原理。 内部有一个数组elementData保存元素,一个整数size记录实际元素个数。 private transient Object[] elementData; private int size; add方法如下: public boolean add(E e) { ensureC
2021-07-25 23:42:48
144
原创 当单例模式碰上序列化
当单例模式碰上序列化 一、问题如下 二、解决办法 三、原理剖析 3.1 对象反序列化 3.2 枚举反序列化 问题如下 单例模式: public class MmSingleton implements Serializable { private MmSingleton() { if (INSTANCE != null) { //预防AccessibleObject.setAccessible通过反射机制调用私有构造器 t
2021-05-31 09:29:39
121
原创 IDEA中的并发调试
IDEA中的并发调试 一、介绍 二、进入非主线程的调试 三、挂起整个虚拟机 四、重现错误 介绍 最近看葛一鸣了的"实战高并发程序设计"一书,里面有一章介绍了"并行程序调试",不过书中是基于Eclipse编辑器的,这里总结一下IDEA中的调试方法,大同小异。 实验样本如下: /** * 两个线程都过了数组大小检查,先后插入数据时 引起 java.lang.ArrayIndexOutOfBoundsException */ public class UnsafeArrayList
2021-04-19 09:22:05
1931
原创 JDK动态代理使用及原理解析
JDK动态代理使用及原理解析 一、动态代理的使用 1.1 动态代理简单示例 1.2 创建代理实例在代理类中 1.3 公用的代理类 二、如何进入到代理类中的invoke的? 2.1 拿到$Proxy0这个类 2.2 $Proxy0的解析 三、Proxy.newProxyInstance是如何生成一个代理对象然后返回的? 一、动态代理的使用 1.1 动态代理简单示例 动态代理类图如下: 主体和实际主体代码如下所示: /** * 主体 */ public in
2021-03-29 09:15:11
223
原创 线程池探索之扩展篇
线程池探索之扩展篇 一、线程工厂的使用 二、拒绝策略的使用 三、线程池中的线程数量 四、线程池的扩展 五、线程池的堆栈调试 线程工厂的使用 我们先看看ThreadPoolExecutor类构造方法中,默认采用的线程工厂Executors.defaultThreadFactory(),其创建了默认的线程工厂,如下: public static ThreadFactory defaultThreadFactory() { return new DefaultThreadFactory()
2021-03-16 09:06:58
185
原创 线程池探索之基础篇
线程池探索之基础篇 一、使用线程池的好处 二、线程池的内部实现 三、线程池的工厂类 一、使用线程池的好处: 1)重用线程,避免系统频繁地创建和销毁线程 2)任务过多时,通过排队避免创建过多线程,减少系统资源的消耗 阿里开发手册中规定:线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 二、线程池的内部实现: JDK中线程池的实现类是ThreadPoolExecutor,先来看看其最重要的构造方法: public ThreadPoolExecutor(int corePo
2021-03-07 22:06:25
77
原创 乱码产生的原因
乱码产生的原因一般有两种: 一种是解析错误; 另一种是在错误解析的基础上加上了编码转换。 (1)解析错误 比如一个GB2312编码的文件,使用UTF-8来打开,就会出现乱码。 这种情况下,只需要使用正确的编码方式即可解读。很多编辑器都有这个功能,如下图中的NotePad++: (2)错误的解析和编码转换 使用编辑器如何改变编码方式都不对时,很有可能是文本在错误解析的基础上,还进行了编码转换。如下例子: 发送方以GBK编码发送,而接收方以UTF-8解码时,
2021-02-28 21:15:01
10058
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人