202109-29 Java源码分析:Guava之不可变集合ImmutableMap的源码分析 目录一、案例场景二、ImmutableMap源码分析总结一、案例场景遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样——publicstaticfinalMap<String,String>dayMap=newHashMap<>();static{dayMap.put("Monday","今天上英语课");dayMap.put("Tuesday","今天上语文课");dayMap.put("Wednesday","今天上数学课");dayMap.put("Thursday","今天上音乐课");dayMap.put("Su... 继续阅读 >
202109-16 Java源码解析之详解ImmutableMap 一、案例场景遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样——publicstaticfinalMap<String,String>dayMap=newHashMap<>();static{dayMap.put("Monday","今天上英语课");dayMap.put("Tuesday","今天上语文课");dayMap.put("Wednesday","今天上数学课");dayMap.put("Thursday","今天上音乐课");dayMap.put("Sunday","今天上编程课");......}当时,我就... 继续阅读 >
202107-17 Java源码解析之ConcurrentHashMap 早期ConcurrentHashMap,其实现是基于:分离锁,也就是将内部进行分段(Segment),里面则是HashEntry的数组,和HashMap类似,哈希相同的条目也是以链表形式存放。HashEntry内部使用volatile的value字段来保证可见性,也利用了不可变对象的机制以改进利用Unsafe提供的底层能力,比如volatileaccess,去直接完成部分操作,以最优化性能,毕竟Unsafe中的很多操作都是JVMintrinsic优化过的。在进行并发操... 继续阅读 >
202107-09 Java源码解析之ClassLoader 目录一、前言二、java中的ClassLoader三、Android中的ClassLoader四、双亲委派机制五、源码分析一、前言一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,... 继续阅读 >