首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏源码之路

    4. JDK源码级别彻底剖析类加载机制

    \jre\lib\rt.jar;D:\codespace\jvm\target\classes;D:\develop\apache-maven-3.6.1\repository\log4j\log4j\ 1.2.17\log4j-1.2.17.jar;D:\develop\apache-maven-3.6.1\repository\org\projectlombok\lombok\1.16.18\lombok sun.misc.Launcher$ExtClassLoader@5cad8086 the appClassLoader : sun.misc.Launcher$AppClassLoader@18b4aac2 -3.6.1\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\develop\apache-maven-3.6.1\repository\org\projectlombok 双亲委派机制说简单点就是,先找父亲加载,不行再由儿子自己加载 我们来看下应用程序类加载器AppClassLoader加载类的双亲委派机制源码,AppClassLoader 的loadClass方法最终会调用其父类

    62010发布于 2021-03-02
  • 来自专栏WriteOnRead

    JDK 源码 - 前言

    以前读过一些 JDK 常用的源码。当时的做法是在 IDE 打开源码文件,同时打开官方文档和谷歌翻译,一边读一边翻译,那时觉得还颇有收获。但是,由于基础薄弱,为了加快速度,有很多不理解的地方跳过了。

    41730发布于 2019-08-16
  • 来自专栏代码人生

    jdk源码-HashMap

    AbstractMap是Map接口的抽象实现类,通过抽象方法keySet()实现了get(key),remove(key),containsKey(key),containsValue(value)的基本算法,遍历加equals。

    49120发布于 2019-10-30
  • JDK源码解读:CountDownLatch源码解析

    经典案例 /** * CountDownLatch * 倒计时,拦截某个线程(CountDownLatch.await()),当倒计时为0时,将线程放行 */ @Slf4j public class 【3】设置截止时间:计算截止时间deadline final long deadline = System.nanoTime() + nanosTimeout; //【4】 代码分析: 【1】回调了内部Sync的tryAcquireShared方法 【2】如果前面判断为false,那么后面这里接着执行超时等待机制 【3】设置截止时间:计算截止时间deadline 【4】 取消申请 countDown:倒计时源码 public void countDown() { sync.releaseShared(1); } public loop to recheck cases unparkSuccessor(h); } //【4

    60700编辑于 2024-11-20
  • 来自专栏WriteOnRead

    JDK源码分析-PriorityBlockingQueue

    概述 前文「JDK源码分析-PriorityQueue」分析了优先队列 PriorityQueue,它既不是阻塞队列,而且线程不安全。 juejin.im/post/5cc258796fb9a03228616e6e https://blog.csdn.net/codejas/article/details/89190774 相关阅读: JDK 源码分析-PriorityQueue JDK源码分析-ReentrantLock Stay hungry, stay foolish.

    49630发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-Collection

    很多方法都能见名知意,这里简要分析一下: 1. size(): 集合中包含的元素个数; 2. isEmpty(): 集合是否为空; 3. contains(Object): 集合中是否包含某个对象; 4. super E>): 从该集合中移除满足指定条件的元素,其中 Predicate 是 JDK 1.8 引入的函数式操作,即传入的参数是一个方法; 12. retainAll(Collection<? 16. spliterator(): 可分割迭代器,用于并行遍历集合中的元素(iterator() 方法是顺序遍历); 17. stream() & parallelStream(): JDK 1.8 super T>) 方法,该方法也是 JDK 1.8 引入的,提供遍历集合元素的函数式操作。 PS: JDK 版本如下: ? 阅读源码时,个人以为应该先读接口类,而非具体的实现类。原因有二: 1. 实现类的代码一般较多,如果初读源码就钻到实现类,可能容易被搞蒙。 Stay hungry, stay foolish

    66520发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-ThreadPoolExecutor

    概述 ThreadPoolExecutor 是 JDK 中线程池的实现类,它的继承结构如下: ? private static final int TERMINATED = 3 << COUNT_BITS; 这里用了一个原子整型(AtomicInteger,可以理解为线程安全的 Integer 类,占用 4 STOP: 不接受新的任务,不处理任务队列中的任务,并且中断正在进行的任务; 4. TIDYING: 所有的任务都已终结,工作线程的数量为 0; 5. 源码分析-BlockingQueue」的分析。 源码分析-ReentrantLock」分析。

    56920发布于 2019-08-30
  • 来自专栏惊羽-布壳儿

    jdk(4) - JVM内存

    计数器 : 利用自增特性,主持线程顺次执行栈中的指令; JVM栈 : 由栈帧组成,每个栈帧包含当前方法的入口,返回信息,参数和变量,基础类型和对象的引用等; 本地方法栈 : 主要维护JNI相关的信息 堆 : 用于存放程序运行中创建的对象数据;

    76010编辑于 2022-06-15
  • 来自专栏WriteOnRead

    JDK源码分析-Semaphore

    具体可参考前文对 AQS 共享模式的分析「JDK源码分析-AbstractQueuedSynchronizer(3)」。 相关阅读: JDK源码分析-AbstractQueuedSynchronizer(3) Stay hungry, stay foolish.

    54520发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-CountDownLatch

    ; } 其中,acquireSharedInterruptibly、tryAcquireSharedNanos 和 releaseShared 都是 AQS 中「共享模式」的方法,具体代码可参考前文「JDK 源码分析-AbstractQueuedSynchronizer(3)」的分析。 Thread-4 is working .. 输出结果: Thread-1 add 0 Thread-1 add 1 Thread-1 add 2 Thread-1 add 3 Thread-1 add 4 相关阅读: JDK源码分析-AbstractQueuedSynchronizer(3) Stay hungry, stay foolish.

    46920发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-LinkedList

    结点类 Node 查看 LinkedList 的源码可发现它内部有个嵌套类 Node,代码如下: private static class Node<E> { E item; // 存储的数据 相关阅读: JDK源码-Queue, Deque Stay hungry, stay foolish.

    40020发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-CyclicBarrier

    Thread-4 is reading.. Thread-5 is reading..

    47420发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-LinkedHashMap

    概述 前文「JDK源码分析-HashMap(1)」分析了 HashMap 主要方法的实现原理(其他问题以后分析),本文分析下 LinkedHashMap。 构造器 2、3、4、5: public LinkedHashMap(int initialCapacity) { super(initialCapacity); accessOrder 前面 4 个构造器的 accessOrder 变量默认值都为 false;最后一个稍微不一样,它的 accessOrder 可以在初始化时指定,即指定 LinkedHashMap 的顺序(插入或访问顺序 可以方便的实现 LRU 缓存; 4. 线程不安全。 Stay hungry, stay foolish.

    49520发布于 2019-08-16
  • 来自专栏WriteOnRead

    JDK源码分析-Hashtable

    线程安全,使用 synchronized 关键字,并发效率低; 4. 若无需保证线程安全,推荐使用 HashMap;若需要线程安全的高并发场景,推荐使用 ConcurrentHashMap。 相关阅读: JDK源码分析-HashMap(1) Stay hungry, stay foolish.

    53710发布于 2019-08-16
  • 来自专栏彤哥读源码

    如何阅读jdk源码

    简介 这篇文章主要讲述jdk本身的源码该如何阅读,关于各种框架的源码阅读我们后面再一起探讨。 笔者认为阅读源码主要包括下面几个步骤。 设定目标 凡事皆有目的,阅读源码也是一样。 (4)ConcurrentHashMap使用了哪些锁? (5)ConcurrentHashMap的扩容是怎么进行的? (6)ConcurrentHashMap是否是强一致性的? 比如,笔者学习ConcurrentHashMap这个类时,上网一查很多都是基于jdk7的,那这时候就可以提出一个问题,jdk8与jdk7中ConcurrentHashMap这个类的实现方式有何不同? jdk8对jdk7作了哪些优化? (3)不断发现问题 在源码阅读的过程中,可能看着看着就遇到个问题,这是非常常见的,这种问题也应该保留下来研究研究。 jdk源码还是比较好阅读的,如果后面看spring的源码,做不到忽略不必要的细节,真的是会迷失的,先埋个伏笔哈~~ 举个例子,之前阅读过ArrayList的序列化相关的代码中的readObject()方法

    73121发布于 2019-07-08
  • 来自专栏二进制文集

    JDK源码分析 异常

    说明 对于JDK源码分析的文章,仅仅记录我认为重要的地方。源码的细节实在太多,不可能面面俱到地写清每个逻辑。 所以我的JDK源码分析,着重在JDK的体系架构层面,具体源码可以参考:http://www.cnblogs.com/skywang12345/category/455711.html。 (jdk.java:383) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ... Frank Yellin * @see java.lang.Error * @jls 11.2 Compile-Time Checking of Exceptions * @since JDK1.0 */ public class Exception extends Throwable { Error 源码分析 Error 最重要的意义,在于 JVM 对它的约定。

    1.1K40发布于 2018-10-08
  • 来自专栏WriteOnRead

    JDK源码分析-DelayQueue

    DelayQueue 也是一种队列,它内部的元素有“延迟”,也就是当从队列中获取元素时,如果它的延迟时间未到,则无法取出。

    49120发布于 2019-10-16
  • 来自专栏开源君

    JDK源码阅读指南

    JDK源码阅读指南 Read The Fucking Source Code  ---- RTFM源码面前,了无秘密  ---- 侯捷 背景 今天逛GitHub,发现了一个神级项目,作者将主要整理/记录阅读 JDK源码时的理解与体会分享出来,便于大家学习。 项目截图 [JDK中java.time.year中的源码说明] [在这里插入图片描述] 项目食用指南 项目中包含多个分支,主分支命名为master,测试分支命名为test,源码/笔记分支以JDK-X(X master分支不定期汇总源码笔记与测试代码的快照。 JDK-X分支存放JDK源码与笔记。阅读过程中产生的笔记以注释的形式直接写在源码文件中。 test分支存放辅助理解的测试代码,可直接运行。 阅读源码时请切换到JDK-X分支,且不需要关联JDK。 测试源码时请切换到test分支,此时需要关联OracleJDK/OpenJDK。

    2.7K00发布于 2021-03-21
  • 来自专栏代码人生

    jdk源码追踪-LinkedList

    关于List接口的类结构和AbstractList的讲解,可以看看上一篇文章jdk源码追踪-ArrayList。

    42120发布于 2019-10-30
  • 来自专栏WriteOnRead

    JDK源码分析-ReentrantLock

    概述 在 JDK 1.5 以前,锁的实现只能用 synchronized 关键字;1.5 开始提供了 ReentrantLock,它是 API 层面的锁。 源码分析-AbstractQueuedSynchronizer(2)」,这里不再赘述。 可实现公平锁; 4. 可绑定多个条件(Condition)。 JDK 1.6 以后,synchronized 与 ReentrantLock 性能基本持平,JVM 未来的性能优化也会更偏向于原生的 synchronized。 相关阅读: JDK源码分析-Lock&Condition JDK源码分析-AbstractQueuedSynchronizer(2) Stay hungry, stay foolish.

    36610发布于 2019-08-16
领券