Crow Home

未知明年在何处,不可一日无此君

Java volatile 关键字底层实现原理解析

在Java多线程并发编程中,volatile关键词扮演着重要角色,它是轻量级的synchronized,在多处理器开发中保证了共享变量的“可见性”。“可见性”的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果一个字段被声明为volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。与synchronized不同,volatile变量不会引起线程上下文...

数据不说谎:用网络爬虫探秘虎扑步行街

前言 前一阵子虎扑步行街内部举行的步行街女神投票大赛在网络上引发了不小的骚动,最终邱淑贞力压高圆圆成为新一届步行街女神,而高圆圆也继首届决赛惜败贾静雯后蝉联总亚军。比赛的赛况被微博大V和各大微信公众号疯狂转载,让众多女性网民开始重新认识真正的“直男审美”,也让步行街这个小众论坛走进了大众视野。 除了著名的“直男一条街”,步行街还有诸如“绿化一条街”、“985一条街”、“最坑爹小舅子/丈母...

Java集合框架源码解读(5)——TreeMap

概述 TreeMap也是Map接口的实现类,它最大的特点是迭代有序,默认是按照key值升序迭代(当然也可以设置成降序)。在前面的文章中讲过LinkedHashMap也是迭代有序的,不过是按插入顺序或访问顺序,这与TreeMap需要区分开来。TreeMap内部用红黑树存储数据,而不是像HashMap、LinkedHashMap、WeakHashMap一样使用哈希表来存储。 此外,TreeM...

Java集合框架源码解读(4)——WeakHashMap

概述 WeakHashMap也是Map接口的一个实现类,它与HashMap相似,也是一个哈希表,存储key-value pair,而且也是非线程安全的。不过WeakHashMap并没有引入红黑树来尽量规避哈希冲突带来的影响,内部实现只是数组+单链表。此外,WeakHashMap与HashMap最大的不同之处在于,WeakHashMap的key是“弱键”(weak keys),即当一个key...

Java集合框架源码解读(3)——LinkedHashMap

概述 LinkedHashMap是HashMap的子类,它的大部分实现与HashMap相同,两者最大的区别在于,HashMap的对哈希表进行迭代时是无序的,而LinkedHashMap对哈希表迭代是有序的,LinkedHashMap默认的规则是,迭代输出的结果保持和插入key-value pair的顺序一致(当然具体迭代规则可以修改)。LinkedHashMap除了像HashMap一样用数...

Java集合框架源码解读(2)——HashMap

在Java Collections Framework的体系中中,主要有两个重要的接口,一个是List、Set和Queue所属的Collection,还有一个就是Map接口了。在上一篇文章中介绍了List接口,它适用于按数值索引访问元素的情形。本文中将介绍的Map则提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”)也叫键值对(key/value pair)...

Java集合框架源码解读(1)——ArrayList、LinkedList和Vector

java.util.List接口是Java Collections Framework的一个重要组成部分,List接口的架构图如下: 本文将通过剖析List接口的三个实现类——ArrayList、LinkedList和Vector的源码,带你走近List的世界。 ArrayList ArrayList是List接口可调整数组大小的实现。实现所有可选列表操作,并允许放入包括空值在内的所有...

深入理解JVM(6)——类加载器

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 一般来说,Java 虚拟机使用 Java 类的方式如下: Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成字节码(.class 文件)。 ...

深入理解JVM(5)——虚拟机类加载机制

在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机中会发生什么变化?本文将逐步解答这些问题。 类加载过程概览 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括以下7个阶段: 加载(Loading) 验证(Verification) 准备(...

深入理解JVM(4)——如何优化Java GC「译」

本文翻译自Sangmin Lee发表在Cubrid上的”Become a Java GC Expert”系列文章的第三篇《How to Tune Java Garbage Collection》,本文的作者是韩国人,写在JDK 1.8发布之前,虽然有些地方有些许过时,但整体内容还是非常有价值的。译者此前也看到有人翻译了本文,发现其中有许多错漏生硬和语焉不详之处,因此决定自己翻译一份,供...