JDK 源码
Jacky-止涯
这个作者很懒,什么都没留下…
展开
-
JVM关闭钩子(1) —— 概念和应用
Hook-钩子钩子(Hook) ,是一个处理消息的程序段,用于Windows消息处理机制,通过系统调用,把它挂入系统,当特定事件触发的时候执行。 如键盘钩子截获键盘消息,外壳钩子截取、启动和关闭应用程序的消息等。钩子也可以理解为WINDOWS留给我们的后门,通过钩子可以参与到WINDOWS事件的处理。很多木马程序就是通过添加钩子来监视用户的行为。 相当于我们先建立一个事件列表,然原创 2013-05-16 02:53:53 · 1783 阅读 · 0 评论 -
JDK-CountDownLatch-实例、源码和模拟实现
CountDownLatch作为一个同步的计数器,可以统一线程组的开始和结束,让我们来探探其内部实现。并且一起讨论,其实现是否可以通过原子类来替代呢?原创 2013-09-14 12:34:40 · 1448 阅读 · 0 评论 -
初探Java序列化(2)-writeObject/readObject
上一篇《初探Java序列化(Serialization)》给我们大体介绍了什么是序列化和反序列化,以及解析了一下序列化出来的文件。接着我们看看JDK具体如何序列化一个Object。 在序列化过程中,虚拟机会试图调用对象类里的writeObject() 和readObject(),进行用户自定义的序列化和反序列化,如果没有则调用ObjectOutputStream.defaultW原创 2015-02-26 22:36:14 · 7855 阅读 · 0 评论 -
JDK-Future 模式和实现
最近的项目用到了多线程,发现java.util.concurrent.Future蛮好用的。像平时,写多线程一般使用Thread/Runnable,直接扔给线程池执行就好了。但是遇到了一些需要获取线程执行结果的情况,就需要使用Callable。对于使用Callable的task,ExecutorService执行后会返回一个Future对象来传递执行结果。那这个Future是怎么存放返回值原创 2013-09-15 21:45:54 · 3410 阅读 · 1 评论 -
初探Java序列化(Serialization)
Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化Deserialization是一种将这些字节重建成一个对象的过程。【字节流的来回转换】Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。将对象状态转换成字节流之后,可以用java原创 2015-02-26 22:24:03 · 3247 阅读 · 0 评论 -
比较两个List是否相等(相同元素)
我们看看如何比较两个数组相等。数组是一个连续的内存空间,所以一般来说,两个数组相等,就是意味着他们有相同的长度,相同的元素,以及相同的顺序。我们看看JDK的Arrays.equals()实现就一目了然了。 public static boolean equals(int[] a, int[] a2) { if (a==a2) return true;原创 2015-01-18 16:21:31 · 51484 阅读 · 2 评论 -
浅谈JDK的File.equal()
java.io.File.equal()比较两个File对象是否指向同一个文件,但实际上不同系统的文件系统中,需要小心使用,以免被坑。原创 2014-06-28 00:36:02 · 2865 阅读 · 0 评论 -
初探JVM-ClassLoader源码
之前简单介绍了一下JVM中的ClassLoader,现在我们再来看看ClassLoader的源码。ClassLoader 首先,我们看看ClassLoader的构造方法,如果不传入参的话,默认父加载为SystemClassLoader默认加载器。protected ClassLoader() { this(checkCreateClassLoader原创 2013-12-02 01:21:05 · 2330 阅读 · 1 评论 -
JDK-Map源码浅析——IdentityHashMap
java.util.IdentityHashMap 类也是一种哈希表实现的Map接口,该类不是 通用 Map 实现。此类实现 Map 接口时,它有意违反 Map的常规协定,比较键/值时使用引用相等性代替对象相等性,不使用hashcode,而只使用Object.equals()。 这里相等性比较的是地址:key1==key2,所以只有两个对象的地址相等才认为相等,是最严格的相等条件原创 2013-05-16 20:22:08 · 1521 阅读 · 0 评论 -
JDK1.7-Arrays源码详解
Arrays此类包含数组操作的各种方法(比如排序和搜索)。此类还包含一个允许将数组作为列表来查看的静态工厂。除非特别注明,否则如果指定数组引用为null,则此类中的方法都会抛出 NullPointerException Arrays的主要方法:sort(),binarySearch(),equals(),copyOf(),toString()等。 sort我们先看看排序方法原创 2013-06-04 08:24:03 · 1780 阅读 · 1 评论 -
JDK1.7-StringBuilder源码详解
StringBuilder是一个可变字符序列 (字符串)。和String相比,两者都是字符串,都是字符的有序排列;不同的是,String是不可变的,而StringBuilder是可变的。 StringBuilder和StringBuffer几乎一样,只是前者没有同步处理,更加高效。因此,这两者的操作逻辑几乎是一样的,可以通过一个抽象的父类AbstractStringBuilder来原创 2013-06-02 20:36:49 · 1928 阅读 · 0 评论 -
JDK1.7-String源码详解
String表示字符串,是char的有序集合,在java中所有的字符串值,都是String的实例。 String类提供了很多方法,如获取字符串中的字符,比较字符串,查询字符等。 Java给String的 + 操作提供了很好的支持,相加后会返回一个字符常量结果。 String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象。所以原创 2013-06-01 02:23:47 · 2580 阅读 · 0 评论 -
JDK1.7-LinkedList循环链表优化
最近在看jdk1.7的时候,发现了一个LinkedList的改良,baidu了一把,发现还没有人讨论这个问题。所以我自己思考了一下,在这里和大家分享,讨论一把!欢迎大家拍砖,讨论起来,把这个问题搞明白 : ) 首先,简单介绍一下LinkedList:LinkedList是List接口的双向链表实现。由于是链表结构,所以长度没有限制;而且添加/删除元素的原创 2012-11-26 21:48:55 · 4632 阅读 · 5 评论 -
JVM关闭钩子(2)—— 源码浅析
上一篇《JVM关闭钩子(1)—— 概念和应用》简单解释了什么是钩子,并且举例说明了Java中关闭钩子的使用,现在我们来深入了解,Java中怎么实现这个关闭钩子的。 主要通过java.lang.Shutdown和java.lang.ApplicationShutdownHooks 这两个工具类来实现。Shutdown负责触发钩子,而ApplicationShutdownHook原创 2013-05-16 03:46:25 · 3350 阅读 · 0 评论 -
ThreadLocal失效
在JDK中,解决线程冲突问题,有两种解决方案:l 给临界区加锁;l 本地化临界区。第一种解决方案的典型代表是Synchonized。第二种的典型代表是ThreadLocal。而CopyOnWrite是这两种方案的融合。原创 2016-03-08 15:11:08 · 3730 阅读 · 0 评论