开始OpenJDK源代码阅读

开始OpenJDK源代码阅读



在阅读了一周的 OpenJDK 源代码后,我才写这篇文章。因为除非你已经开始阅读,否则是不知道自己是不是应该读下去的。所以,不要贸然说自己要干嘛,先做一段时间,觉得感觉还好,再决定做下去。

这一周,主要是看 java.util 中和容器相关的几个文件,虽然还没看太多,但是已经有一些收获了。看到了以前学过的数据结构在Java的标准库中是如何被实现的。也明白了平时使用的一些类的原理是什么。另外,由于最近在看
《Java编程思想》,也能把书中讲的和标准库的源代码对应起来,感觉还不错。还有一个收获就是明白了,基础越扎实,阅读源代码收获也越大,否则根本就看不出一些设计的初衷是什么。之前看到源代码中一些编写程序的方式,我觉得没有必要那样写,后来看《Java编程思想》,才知道为什么会这样写。也有一些是我觉得可以从源代码中学习的东西,从《Java编程思想》中看到,标准库中的编写方式有些是历史遗留问题,不得不那么写,而不是说我们写的时候,也要那样做。这就是说不要迷信那些你不明白的东西,即使他们看起来很权威。

另外,要长期坚持一件事情,最好是每天都在一个固定的时间来做,这样养成习惯,心理上就不会有什么负担。之前为了学好英语,我背单词,每天早上第一件事就是背单词,养成习惯,背了471天。后来,我开始阅读英文原著。每天中午饭后就开始阅读,每天读一章,从二月中旬到现在,已经读完了五本书,这样看来,之前定下的今年读十本原著的计划,应该没有问题了。 鉴于阅读源代码的重要性,我一周前决定要开始阅读源代码,并且养成习惯,每天都要读。于是,晚饭后的时间,我就固定下来阅读源代码,希望可以长期坚持。

我会按照 OpenJDK 的目录结构,把每个源代码文件的阅读笔记更新到 GitHub上,然后再选一些更新到博客里。

开始OpenJDK源代码阅读

时间: 2024-10-12 02:55:50

开始OpenJDK源代码阅读的相关文章

OpenJDK 源代码阅读之 Collections

概要 类继承关系 java.lang.Object java.util.Collections 定义 public class Collections extends Object 实现 sort public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T&g

OpenJDK 源代码阅读之 String

概要 类继承关系 java.lang.Object java.lang.String 定义 public final class String extends Object implements Serializable, Comparable<String>, CharSequence 要点 一旦创建就不可改变 实现 storage /** The value is used for character storage. */ private final char value[]; 可以看出

OpenJDK 源代码阅读之 TreeMap

概要 类继承关系 java.lang.Object java.util.AbstractMap<K,V> java.util.HashMap<K,V> 定义 public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable 要点 1) 基于 NavigableMap 实现的红黑树 2) 按

OpenJDK 源代码阅读之 HashMap

概要 类继承关系 java.lang.Object java.util.AbstractMap<K,V> java.util.TreeMap<K,V> 定义 public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable 要点 1) 与 Hashtable 区别在于:非同步,允许 null 2) 不保证

OpenJDK 源代码阅读之 BitSet

概要 类继承关系 java.lang.Object java.util.BitSet 定义 public class BitSet extends Object implements Cloneable, Serializable 要点 BitSet 类用来支持位操作,给它一个 size ,就会返回一个对象,代表 size 个位.可以完成"与或非"操作. 实现 试想一下,long 最多也就 64 位,假如我们想对 1000 位进行一些运算,要如何实现呢?这个类就告诉我们怎么用一个数组,

Notepad++源代码阅读——窗口元素组织与布局

1.1 前言 这两天在看notepad++ 1.0版本的源代码.看了许久终于把程序的窗口之间的关系搞清楚了现在把其组织的要点写于此,希望对大家有所帮助. 1.2 窗口元素之间的关系 Notepad++主要有以下窗口元素(见下图). 其中Notepad_plus 是程序的主要窗口,其他:工具栏.状态栏.主次编辑窗口.主次选项卡窗口以及对话框窗口均为主窗口的子窗口.     _mainDocTab 和 _subDocTab 为 类:DocTabView 其成员_pView 分别指向 _mainEdi

Linux-0.11源代码阅读一 加载操作系统

x86系列CPU可以在16位实模式和32位保护模式下运行,实模式的特点是地址总线只有20位,也就是只有1MB的寻址空间,为了兼容老的CPU,Intel x86系列CPU包括最新的CPU在上电时都运行在16位的实模式下,同时在硬件上强行将CS置成0xF000,IP置成0xFFF0,那么CS:IP就指向0xFFFF0这个地址,也就是上电瞬间代码从该处开始执行,而BIOS恰恰就存储在这个地方,可以想象一下,如果连BIOS都没有将会是一个什么结果. BIOS程序被存储在计算机主板上的一块ROM芯片里,首

linux0.11 源代码阅读记录

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成物理查询计划

SQL编译解析三部曲分为:构建语法树,制定逻辑计划,生成物理运行计划. 前两个步骤请參见我的博客<<淘宝数据库OceanBase SQL编译器部分 源代码阅读--解析SQL语法树>>和<<淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划>>.这篇博客主要研究第三步,生成物理查询计划. 一. 什么是物理查询计划 与之前的阅读方法一致,这篇博客的两个主要问题是what 和how.那么什么是物理查询计划?物理查询计划可以直接运行并返回数据