![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JDK源码分析篇
JR_Way
这个作者很懒,什么都没留下…
展开
-
JDK8中JVM堆内存划分
一:JVM中内存JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用运行线程方法存放本地暂时变量与线程中方法运行时候须要的引用对象地址。JVM全部的对象信息都存放在堆内存中。相比栈内存,堆内存能够所大的多,所以JVM一直通过对堆内存划分不同的功能区块实现对堆内存中对象管理。堆内存不够最常见的错误就是OOM(OutOfMemoryErro转载 2018-05-02 23:15:49 · 615 阅读 · 0 评论 -
JDK 源码解析 —— Condition
一. 简介使用 Condition 可以让线程等待不同条件,典型的例子就是 ArrayBlockingQueue。二. 源码解析Condition 接口的具体实现是在 AbstractQueuedSynchronized 类中一个叫做 ConditionObject 的内部类。核心字段: /**转载 2018-05-02 23:34:37 · 160 阅读 · 0 评论 -
JDK 源码解析 —— Executors ExecutorService ThreadPoolExecutor 线程池
零. 简介Executors 是 Executor、ExecutorService、ThreadFactory、Callable 类的工厂和工具方法。一. 源码解析创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销。当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲。由于转载 2018-05-02 23:33:02 · 184 阅读 · 0 评论 -
JDK 源码解析 —— HashSet
零. 简介这个类实现了 Set 接口,内部是由 HashMap 实例辅助实现的。它不保证元素的顺序,数据允许为 null。假如 hash 方法将数据分散地比较合理,比如一个 bucket 一个数据,那么 add、remove、contains、size 性能开销是常数时间。这个类非线程安全的,如果多线程并发访问,并且至少一个线程在做修改操作,那么必须转载 2018-05-02 23:31:37 · 113 阅读 · 0 评论 -
JDK 源码解析 —— Semaphore
零. 简介这是一个用来对并发计数的信号量,并发量超过一定数值则只能等待。从概念上来说,semaphore 维持着一组许可证。获取锁的时候,需要先获得 semaphore 的许可才行。一. 从 Demo 解析源码[java] view plain copypackage com.wen转载 2018-05-02 23:30:41 · 164 阅读 · 0 评论 -
JDK 源码解析 —— ArrayBlockingQueue
零. 简介ArrayBlockingQueue 是一个由数组作为基础数据结构的有界阻塞队列。出队入队使用先进先出算法,即 FIFO (first in first out)。head 是停留在队列中最长的节点,tail 停留在队列中最短的节点。从 head 出队列,从 tail 入队列。这是一个典型的「有界缓冲区」,一个固定大小的数组持有从生产者(producers转载 2018-05-02 23:28:54 · 120 阅读 · 0 评论 -
JDK 源码解析 —— Integer
零. 简介对于 Integer 这个 Java 程序员几乎天天使用的类, 使用上却可以看出普通程序员和优秀程序员区别。一. 深入代码在创建数字 1 的对象时, 大多数人会使用 new Integer(1), 而使用 Integer.valueOf(1) 可以使用系统缓存,既减少可能的内存占用,也省去了频繁创建对象的开销转载 2018-05-02 23:27:52 · 177 阅读 · 0 评论 -
JDK 源码解析 —— ConcurrentHashMap
零. 概述ConcurrentHashMap 是将锁的范围细化来实现高效并发的。 基本策略是将数据结构分为一个一个 Segment(每一个都是一个并发可读的 hash table, 即分段锁)作为一个并发单元。 为了减少开销, 除了一处 Segment 是在构造器初始化的, 其他都延迟初始化(详见 ensureSegment)。 并使用 volatile 关键字来保证 Segment 延迟转载 2018-05-02 23:26:19 · 152 阅读 · 0 评论 -
JDK 源码解析 —— AtomicInteger
零. 前言JDK 里面提供的以 Atomic* 开头的类基本原理都是一致的, 都是借助了底层硬件级别的 Lock 来实现原子操作的。 本文以 AtomicInteger 为例进行讲述, 其他的类似。阅读本文前建议先阅读基础篇:Java 内存模型一. 处理器原子操作: 3种加锁方式关于 CPU 的锁有如下 3 种:转载 2018-05-02 23:25:16 · 157 阅读 · 0 评论 -
JDK 源码解析 —— Java 内存模型
零. 为什么需要 Java 内存模型为了让程序员忽略掉各种硬件和操作系统的内存访问差异, 也既无需关心不同架构上内存模型的差异, Java 在代码和硬件内存模型间又提供了一个 Java 内存模型。一. 并发模型的分类在并发编程中,需要处理两个关键问题:线程之间如何通信(线程之间以何种机制来交换信息, 有两种方式:共享内存和转载 2018-05-02 23:23:59 · 140 阅读 · 0 评论