目录
前言说明一、源码目录结构(1).JDK目录(2).hotspot目录
二、基础知识(1).Object Header(对象头)(2).Lock(锁)1. 无锁 => 偏向锁2. 偏向锁 => 轻量级锁3. 轻量级锁 => 重量级锁
(3).Mark Word(标记字)
三、hashCode()的C++源代码(1). 寻找hashCode方法(2). FastHashCode(Thread * Self, oop obj)源代码解读1. 判断对象是否使用了偏向锁2. 做一些基本判断3. 当对象处于中性时4. 当对象处于重量级锁状态时5. 本线程拥有此对象...
概述
接口的继承结构如下:下面分析这几个接口的定义。
Executor
从名字来看,Executor 可译为“执行器”,它的作用就是执行任务。该接口只有一个 execute 方法:
public interface Executor {// 执行给定的任务(Runnable)void execute(Runnable command);
}
该方法的作用就是(在将来的某个时间)执行给定的命令,即实现了 Runnable 接口的对象。该命令可能在一个新的线程中执行,也可能在调用它的线程中执行。它的用法示例代码...
package com.example.demo;public class Sort {//java源码之stringpublic static void main(String[] args) {{//空字符对象创建字符串String s = new String();System.out.println(s);}{//字符串对象创建字符串String s = new String("a");System.out.println(s);}{//字符数组方式声明字符串char[] c = {a, b, c};String s = new String(c);System.out.println(s);}{/*** // Note: offset or count might be near -1>>>1.if (offs...
1. 概述
CopyOnWriteArrayList,从名字可以看出它跟 ArrayList 有点关系,可以理解为线程安全的 ArrayList。它的类签名和继承结构如下:
public class CopyOnWriteArrayList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}
它主要实现了 List 接口,也是一个集合类,下面分析其代码实现。
2. 代码分析
仍然先从构造器进行分析。
2.1 构造器
// 构造器一:无参构造器
public CopyOnWriteArrayList() {set...
JDK1.7
从源码上看,HashMap 实现了Map接口 cloneable接口,和序列化接口
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{
HashMap的默认初始容量为16
static final int DEFAULT_INITIAL_CAPACITY = 16;
HashMap最大容量为2^30
static final int MAXIMUM_CAPACITY = 1 << 30;
加载因子为0.75,当容量达到75%时就扩容一次
static final float DEFAULT_LOAD_FACTOR = 0.7...
native 关键字private static native void registerNatives();static {registerNatives();}public final native Class<?> getClass();public native int hashCode();protected native Object clone() throws CloneNotSupportedException;public final native void notify();public final native void notifyAll();public final native void wait(long timeout) throws InterruptedException;
native是与C++联合开发的时候用的!jav...
概述
Semaphore 是并发包中的一个工具类,可理解为信号量。通常可以作为限流器使用,即限制访问某个资源的线程个数,比如用于限制连接池的连接数。
打个通俗的比方,可以把 Semaphore 理解为一辆公交车:车上的座位数(初始的“许可” permits 数量)是固定的,行驶期间如果有人上车(获取许可),座位数(许可数量)就会减少,当人满的时候不能再继续上车了(获取许可失败);而有人下车(释放许可)后就空出了一些座位,其他...
从源码的定义中,我们可以看出linkedList是实现list接口和deque接口的双端链表
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
LinkedList是一个双端链表结构,有两个变量 first指向头部,last指向链表尾部,size表示当前链表中的数据个数
transient int size = 0;
transient Node<E> first;
transient Node<E> last;
LinkedList 的带参构造函数
p...
一 概述
HashMap实现
hashmap继承了AbstractMap,实现了Map接口和Cloneable接口,HashMap是基于哈希表(散列表),实现Map接口的双列集合
jdk8中底层数据结构已经改为二叉树,之前是链表
看hashmap之前,需要把Map,AbstractMap源码撸一遍,这里放我的博文链接: https://www.cnblogs.com/houzheng/p/12687883.html
涉及到的数据结构
二 源码分析
属性
静态内部类(Entry的实现)
三 总结
ava的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类。它包含了对象常用的一些方法,比如getClass、hashCode、equals、clone、toString、notify、wait等常用方法。所以其他类继承了Object后就可以不用重复实现这些方法。这些方法大多数是native方法,下面具体分析。
主要的代码如下:publicclassObject{privatestaticnativevoidregisterNatives();static{ registerNatives(); }public...
在上一篇JDK8源码解析 -- HashMap(一)的博客中关于HashMap的重要知识点已经讲了差不多了,还有一些内容我会在今天这篇博客中说说,同时我也会把一些我不懂的问题抛出来,希望看到我这篇博客的大神帮忙解答困扰我的问题,让我明白一个所以然来。彼此互相进步,互相成长。HashMap从jdk7到jdk8版本改变大,1.新增加的节点在链表末尾进行添加 2.使用了红黑树。
1. HashMap容量大小求值方法// 返回2的幂次static final int tableSi...
JDK源码解析
InputStream类就使用了模板方法模式。
在InputStream类中定义了多个 read() 方法,如下:
public abstract class InputStream implements Closeable {//抽象方法,要求子类必须重写public abstract int read() throws IOException;
?public int read(byte b[]) throws IOException {return read(b, 0, b.length);}
?public int read(byte b[], int off, int len) throws IOException {if (b == null) {throw new NullP...