
java 源码分析
代老师的编程课
去哪儿网资深架构师,前美团技术专家,16年Java开发经验,MiniTomcat实战课程作者。
展开
-
深入JUnit源码之Runner
初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑。不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感兴趣的童鞋凑合着看吧,感觉JUnit这个框架还是值得看的,里面有许多不错的设计思想在,更何况它是Kent Beck和Erich Gamma这样的大师写的。。。。。写在前面的话不知道是因为第一份工作的影响还是受在博客园上看到的转载 2014-03-18 21:28:10 · 1244 阅读 · 0 评论 -
Java Executor 框架
Executor框架是指java5中引入的一系列并发库中与executor相关的功能类,包括Executor、Executors、ExecutorService、CompletionService、Future、Callable等。(图片引用自http://www.javaclubcn.com/a/jichuzhishi/2012/1116/170.html) 本篇博文分析转载 2013-08-19 19:29:51 · 1096 阅读 · 0 评论 -
ArrayList removeRange方法分析
《ArrayList原码分析》一文中提到了“为什么removeRange(int fromIndex,int toIndex)是protected的?” 先给出removeRange(int fromIndex,int toIndex)方法的源码(这段代码是干什么的就不再解释了,源码分析一文中已经说明) 1 protected void removeRange(int f转载 2013-08-19 19:37:19 · 1587 阅读 · 0 评论 -
LinkedHashMap源码分析(基于JDK1.6)
《Java集合类》一文中已经最List的基本操作进行说明,并且比较了ArrayList和LinkedList的效率。本文将进一步解析LinkedList。 LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。 除此之外转载 2013-08-19 19:34:53 · 608 阅读 · 0 评论 -
LinkedList原码分析(基于JDK1.6)
LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为它使用链表维护内部次序(HashMap是基于散列表实现的,相关HashMap的内容可以看《Java集合类》和《HashMap源码分析》)。1 public class LinkedHashMap ex转载 2013-08-19 19:35:24 · 701 阅读 · 0 评论 -
TreeMap源码分析——基础分析(基于JDK1.6)
常见的数据结构有数组、链表,还有一种结构也很常见,那就是树。前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的TreeMap。 TreeMap基于红黑树(点击查看树、红黑树相关内容)实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的转载 2013-08-19 19:33:22 · 609 阅读 · 0 评论 -
TreeMap源码分析——深入分析(基于JDK1.6)
TreeMap有Values、EntrySet、KeySet、PrivateEntryIterator、EntryIterator、ValueIterator、KeyIterator、DescendingKeyIterator、NavigableSubMap、AscendingSubMap、DescendingSubMap、SubMap、Entry共十三个内部类。Entry是在TreeMap中用于转载 2013-08-19 19:32:30 · 703 阅读 · 0 评论 -
并发基础(Runnable、Thread、Executor)
与顺序编程不同,并发使程序可以在“同一时间”执行多个操作。 Java对并发编程提供了语言级别的支持。Java通过线程来实现并发程序。一个线程通常实现一个特定的任务,多个线程一起执行的时候就实现了并发。 定义任务的最简单的方式就是实现Runnable接口。1 public interface Runnable {2 public abstract转载 2013-08-19 19:27:57 · 711 阅读 · 0 评论 -
Java IO
江苏 无锡 缪小东< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 本篇主要讲述IO相关的内容,主要包括:与IO相关的简单的历史背景知识;Java IO的简单分类;与IO设计相关的两个模式;同时列举几个简单的例子;分析其中几个实现的源代码;最后给大家一些简单扩展的例子。转载 2013-07-13 17:21:31 · 609 阅读 · 0 评论 -
ArrayList源码分析(基于JDK1.6)
不积跬步,无以至千里;不积小流,无以成江海。从基础做起,一点点积累,加油! 《Java集合类》中讲述了ArrayList的基础使用,本文将深入剖析ArrayList的内部结构及实现原理,以便更好的、更高效的使用它。 ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小......转载 2013-08-19 22:48:44 · 789 阅读 · 0 评论 -
HashMap源码分析(基于JDK1.6)
在Java集合类中最常用的除了ArrayList外,就是HashMap了。本文尽自己所能,尽量详细的解释HashMap的源码。一山还有一山高,有不足之处请之处,定感谢指定并及时修正。 在看HashMap源码之前先复习一下数据结构。 Java最基本的数据结构有数组和链表。数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。链表转载 2013-08-19 18:52:07 · 715 阅读 · 0 评论 -
HashSet及LinkedHashSet源码分析(基于JDK1.6)
Java容器类的用途是“保存对象”,分为两类:Map——存储“键值对”组成的对象;Collection——存储独立元素。Collection又可以分为List和Set两大块。List保持元素的顺序,而Set不能有重复的元素。 本文分析Set中最常用的HashSet类,并简单介绍和对比LinkedHashSet。 首先对Set接口进行简要的说明。 存转载 2013-08-19 19:34:03 · 583 阅读 · 0 评论 -
深入源码之JDK Logging
JDK从1.4开始提供Logging实现,据说当初JDK打算采用Log4J的,后来因为某些原因谈判没谈拢,然后就自己开发了一套,不知道是为了报复而故意不沿用Log4J的命名方式和抽象方式,还是开发这个模块的人水平不够,或没用心,亦或是我用Commons Logging和Log4J习惯了,看JDK的Logging实现怎么看怎么不爽~~~吐个槽额~~~~JDK Logging将日志打印抽象转载 2014-03-18 21:17:45 · 874 阅读 · 0 评论 -
Java Timer&TimerTask原理分析
如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer和TimerTask完成了一个定时执行的任务,实现得没有问题,但当在TimerTaks的run()方法中使用 Thread.sleep()方式时,可能会出现奇怪的现象,好像Timer失效了,网上查了一下,倒是有人遇到了相同的问题,但是并没有找到一篇解释为什么转载 2014-03-18 16:58:24 · 785 阅读 · 0 评论 -
JDBC中驱动加载的过程分析
江苏 无锡 缪小东 本篇从java.sql.Driver接口、java.sql.DriveManager类以及其它开源数据库的驱动类讨论JDBC中驱动加载的全过程以及JDBC的Framework如何做到“可插拔”的细节。 本篇包含了很多部分的内容。如类加载器、本地方法、对象锁、类锁、按功能或者状态分离锁、安全机制,对这些内容没有深入讨论!详情可以继续关注本博转载 2013-07-13 17:20:36 · 2444 阅读 · 0 评论 -
源码剖析之sun.misc.Unsafe
首先介绍一下什么是Compare And Swap(CAS)?简单的说就是比较并交换。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该位置的值。CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,则将 B转载 2013-11-13 17:48:52 · 921 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解析之ReentrantLock(二)
上篇文章分析了ReentrantLock的lock,tryLock,unlock方法,继续分析剩下的方法,首先开始lockInterruptibly,先看其API说明:lockInterruptiblypublic void lockInterruptibly()throws Acquires the lock unless the current thread is .Acqui转载 2013-11-13 08:46:32 · 866 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解析之ReentrantLock(一)
在上一篇笔记中提到concurrent包中semaphores, barriers, and latches等Synchronizer的介绍和使用,于是想深入的了解这些Synchronizer的原理和源码。可以从上图中观察到这些Synchronizer内部都有自己的Sync类,而且Sync类全部继承AbstractQueuedSynchronizer抽象类,可以看出AbstractQueuedSy转载 2013-11-13 08:44:28 · 1039 阅读 · 0 评论 -
Java集合类
数组是一种很常见的数据结构,开始接触编程的时候多数程序都和数组相关。刚开始接触Java时也是一直使用数组写一些程序,后来越来越觉得数组这东西没法满足需求了,这时一位“前辈”对我说了一句:不会用集合类就等于没学过Java。然后才知道有集合类。 想想已经是3、4年前的事了,时间如白驹过隙啊。 什么时候数组会显得力不从心,没法满足需求,需要集合类呢?不知道具体数据长度转载 2013-08-19 22:50:45 · 801 阅读 · 0 评论 -
ArrayBlockingQueue源代码及解析
一些解析:ArrayBlockingQueue用的锁一个Reentrantlock,而下面的两个notEmptyCondition和notFullCondition是通过Reentrantlock的newCondition()方法得到的。/*** Main lock guarding all access */07转载 2013-08-19 19:39:44 · 830 阅读 · 0 评论 -
从InputStream到ByteArrayInputStream
本篇主要分析:1.如何将byte数组适配至ByteArrayInputStream,对应与IO部分的适配器模式;2.BufferedInputStream的工作原理,对应于IO的装饰器模式,会首先研究InputStream和FilterInputStream的源代码,同时会将要谈谈软件设计中的缓存相关的知识。后面专门一章分析PipedInputStream和PipedOutStream,简单谈谈管转载 2013-07-13 17:20:25 · 2132 阅读 · 0 评论 -
使用Java 6 API分析源代码
原文:http://today.java.net/pub/a/today/2008/04/10/source-code-analysis-using-java-6-compiler-apis.html 静态代码分析工具Checkstyle, FindBugs,以及IDE如NetBeans, Eclipse能快速进行代码关联,它们使用了API解析代码,生成AST,深入分析代码元素。J翻译 2012-08-19 23:24:48 · 1624 阅读 · 0 评论 -
从PipedInputStream/PipedOutputStream谈起
本篇主要从分析PipeInputStrem和PipedOutputStream谈起。谈及软件设计的变化,以及如何将软件拆分、组合,适配……1 源代码分析 下面将详细分析PipedInputStream和PipedOutputStream的源代码。1.1 PipedInputStream package java.io;//PipedInp转载 2013-07-13 17:20:43 · 682 阅读 · 0 评论 -
JDK源码分析Java.lang.Boolean的浅析——单例模式的应用(使我们更省内存)
JDK源码Java.lang.Boolean的理解和分析是什么呢,希望可以在对JDK源码Java.lang.Boolean的基础上分析其他的代码,举一反三掌握好JDK。AD:JDK源码(jdk 1.5 b2)的研究是一个很大的范畴,那么今天先对Java.lang.Boolean开始解剖。首先我们来看JDK源码中Java.lang.Boolean的代码转载 2012-02-08 16:10:26 · 1162 阅读 · 0 评论 -
Java源码分析:深入探讨Iterator模式——迭代器模式
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很转载 2012-02-08 18:18:07 · 701 阅读 · 0 评论 -
JDK源码分析——研究 Hash 存储机制
简介: HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。本文的标签转载 2012-02-08 15:18:48 · 855 阅读 · 0 评论 -
jdk源码--整数和字符串间的转换
如果让您亲自动手来来写一个Integer中的toString()方法和parseInt()方法,您会怎么写?请您先动手写toString()方法。我对于toString()的思路:1.首先需要得到这个Integer数值的位数,所以肯定有一个getIntegerSize()的private方法2.然后要把这个Integer数值转化为一个字符数组,所以也要有一个getChars()原创 2012-02-10 15:57:56 · 735 阅读 · 0 评论 -
快速排序(二) jdk源码中如何优化快速排序
快速排序是一种相当棒的排序方案,相关理论内容可以参见快速排序(一) 原理介绍 在jdk的[java.util.Arrays]类中,有一个sort的函数,它实现对很多数据结构进行的排序方法,其中sort(int[] a)中主要使用的是优化后的快速排序法,本文正是基于此来讲解如何优化快速排序算法。 java源代码:[c-sharp] view转载 2012-02-15 11:26:00 · 685 阅读 · 0 评论 -
JDK源码分析:java.lang.String
最近开始看JDK源码,不能太懒了~~注释非常详细(虽然是英文),而且部分代码也不算很复杂。先挑的简单的看看。。为了坚持下去,所以在博客写些记录,一是为了记忆,二是给自己一个坚持的理由~~哇咔咔,英文不算很好,那就对着中文API一起看吧。。String结构这个类结构很简单。。/** The value is used for character storage. */转载 2012-02-08 17:31:43 · 1596 阅读 · 0 评论 -
源码分析——System.arraycopy
之前在分析ArrayList和Vector源码的时候,发现Sun JDK版本中的ArrayList和Vector大量使用了System.arraycopy来操作数据,特别是同一数组内元素的移动及不同数组之间元素的复制。在网上查到一些关于Java优化的资料里也推荐使用System.arraycopy来批量处理数组,其本质就是让处理器利用一条指令处理一个数组中的多条记录,有点像汇编语言里面的串转载 2012-02-10 16:24:17 · 2142 阅读 · 1 评论 -
LinkedHashMap的实现原理
1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代转载 2013-05-13 19:07:13 · 499 阅读 · 0 评论 -
JDK源码分析——动态代理源码(Proxy类)
读源码,怕过两天又忘记了,还是记录下吧..动态代理最重要的实现就是Proxy.newInstance ,那我们直接看这个方法public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)//这里有三个参数,第一个是传入classl转载 2012-02-12 10:44:23 · 1402 阅读 · 1 评论 -
jdk源码分析 – Thread线程类源码分析
1、继承关系:首先看到Thread类的声明:class Thread implements Runnable { /* Make sure registerNatives is the first thing does. */可知,其实现了Runnable接口,而Runnable接口有一个run()方法,所以Thread也实现了该方法。2、构造函数:原创 2012-02-18 12:27:23 · 1792 阅读 · 0 评论 -
JDK中的动态代理
江苏 无锡 缪小东 写到代理模式这章,不得不提到JDK中的动态代理,它是java语言自身对动态代理的支持,类似于JDK中在java.util包中提供Observable类和Observer接口提供对观察者模式的语言级支持。关于动态代理的好处可以从网络上流行的中用动态代理类实现记忆功能>>、使用JAVA中的动态代理实现数据库连接池>>、通过JAVA的动态代理机制控制事务>> 、用转载 2013-07-12 08:44:18 · 758 阅读 · 0 评论 -
Collections Framework中的算法(之三)--不可变装饰器相关
本篇主要讲述Collections类中的unmodifiable相关的方法!这些方法都有一个共同含义就是使用此方法创建的对象都是不可变的!典型的装饰器模式的应用!下面的几篇都是装饰器模式在Java Collections Framework中的典型应用!同时还简要叙说了如何理解内部类! 12.1装饰器模式基础 装饰器模式是GOF那本书中提到的23个经典设计模转载 2013-07-12 08:41:46 · 861 阅读 · 0 评论 -
Collections Framework中的算法(之二)
从本篇开始我们讲述Collections中的一些算法的源代码!本篇主要讲述与排序相关的一些方法,如:排序、反序、反序比较器、乱序、最大值和最小值等。 一、头及一些与算法相关的属性package java.util;import java.io.Serializable;import java.io.ObjectOutputStream;import转载 2013-07-12 08:41:03 · 913 阅读 · 0 评论 -
Java Collections Framework的Fail Fast机制及代码导读
本文章主要抽取了Java Collections Framework中的Collection接口、List接口、AbstractCollection抽象类、AbstractList抽象类和具体的ArrayList的实现纵向研究了Java Collections Framework中的Fail Fast机制,通常的编程错误以及这些接口和类之间的关系,以有助于大家对Java Collectio转载 2013-07-11 20:53:22 · 887 阅读 · 0 评论 -
Collections Framework中的算法(之一)
江苏 无锡 缪小东 在博客其它文章中提到Java Collections Framework――java中面向对象的数据结构的框架!几乎任何学习java的朋友都要对此包(java.util)非常熟悉。 该框架主要包含接口、实现和算法三部分。在本博客关于FailFast机制的文章中纵向研究了List接口和List的实现。关于算法一点都没有提及。本系列主要讲述该转载 2013-07-12 08:39:28 · 986 阅读 · 0 评论 -
JDK源码中ClassLoader的浅析
JDK源码中ClassLoader是什么呢?JDK源码中ClassLoader有哪些特点是使用时注意的事情呢?那么本文讲给你一个介绍。AD:ClassLoader类作为JDK源码为我们的程序使用提供了一些帮助,程序编制一般需经编辑、编译、连接、加载和运行几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在连接步骤中,连接器转载 2012-02-08 16:32:59 · 670 阅读 · 0 评论 -
JDK源码分析——Java.util.Vector的浅析
首先我们来看JDK源码中Java.util.Vector的代码,剔除所有的方法和静态变量,Java.lang.Vector的核心代码如下:public class Vector extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable{ pro原创 2012-02-09 11:10:08 · 1418 阅读 · 0 评论