自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除