
源码
文章平均质量分 87
huangsky001
这个作者很懒,什么都没留下…
展开
-
jvm垃圾回收机制原理读书笔记
可达性分析主要是用来解决哪些对象是不可用的,可以被回收。以一系列称为GC Roots的对象为起点,若对象到GC Roots之间没有任何引用关系,则认为该对象是不可用的,可以被回收.具体可作为GC Roots的对象如下(不是全部):**所有Java线程中当前栈帧的引用(例如局部变量),也就是活着的线程,**这个就是我们通常意义上Java代码new一个对象引用,这个对象引用所在的地方.所有ClassLoader所有全局变量对于classloader和全局变量,因为其一定伴随着应用的整个生命原创 2021-05-11 23:02:02 · 174 阅读 · 0 评论 -
jvm内存区域划分介绍
Java内存划分主要分为以下几块:程序计数器线程私有,可以看做是当前线程所执行的字节码的行号,用于下一次线程切换的时候虚拟机定位到上一次执行的位置。虚拟机栈线程私有,生命周期与线程相同。描述的是方法执行的内存模型。进入方法时对应入栈,方法结束的时候对应出栈。该区域存储着局部变量,操作数,方法出口等信息。方法区线程共享。主要用来存储类的元信息。 在1.7和1.8之后的实现逻辑有所不同。由于该区域大小一般较小,一般不会对该区域进行垃圾回收。所以在1.7之前的版本,有可能会因为字原创 2021-05-09 17:18:11 · 228 阅读 · 0 评论 -
队列同步器AQS原理分析及具体实现
Java中的并发编程很多都是以队列同步器AbstractQueuedSynchronizer为基础的, 例如ReentrantLock,CountDownLatch等。下面介绍其构成以及相应的实现。构成private volatile int state;AbstractQueuedSynchronizer中通过一个int类型的成员变量state来表示同步状态,该变量使用volatile来修饰,保证多线程之间的可见性。以及一个内置的队列来完成资源排队。其中对于state有如下几个操作方法:g原创 2021-04-08 23:16:46 · 247 阅读 · 0 评论 -
Java线程状态流转及部分函数说明
下面这张是Java线程状态改变的图例。下面就其中几点和函数进行说明运行态Java将操作系统中的"运行中running"和"就绪ready"两种状态统称为运行态runnable。runing和ready的切换由操作系统进行调度。join让当前线程等待join线程执行完毕。如果join()方法在一个线程实例上调用,则当前运行着的线程将阻塞直到这个线程实例执行完毕。该方法可以实现一个线程在另一个线程结束后再执行。public class JoinTest { public static原创 2021-04-01 21:52:42 · 266 阅读 · 1 评论 -
synchronized锁介绍
本文主要介绍synchronized的锁实现。锁的存储Java中的每一个对象都可以作为锁。synchronized关键字分为如下三种场景:修饰普通方法时,锁住的是调用该方法的对象实例修饰静态方法时,锁住的死当前类的Class对象修饰代码块时,锁住的是括号里的配置的对象Java对象头内部有一个Mark Word,存储着对象的hashcode、分代年龄、持有偏向锁的线程ID,锁标志位等信息。锁信息就存储在对象头。锁的分类锁按照级别从低到高依次是: 无锁 -> 偏向锁 -> 轻量级原创 2021-03-28 15:50:36 · 155 阅读 · 0 评论 -
HashMap源码分析
基本原理HashMap的数据结构是由数组和链表(或者树)组成。当进行元素的增删改查时,首先要定位到元素所在桶的位置,也就是table数组的下标,之后再从链表或树中定位该元素。定位下标使用 (n - 1) & hash 算法,其中n为数组长度,hash为key的哈希值hashmap是通过一个数组Node<K,V>[] table(该变量是一个类变量)存储所有的数据,每个元素存放元素的下标为putVal()函数中对应的局部变量p,其计算方法为:p = tab[i = (n - 1)原创 2021-03-24 18:19:20 · 100 阅读 · 0 评论 -
HashMap源码分析
基本原理HashMap的数据结构是由数组和链表(或者树)组成。当进行元素的增删改查时,首先要定位到元素所在桶的位置,也就是table数组的下标,之后再从链表或树中定位该元素。定位下标使用 (n - 1) & hash 算法,其中n为数组长度,hash为key的哈希值hashmap是通过一个数组Node<K,V>[] table(该变量是一个类变量)存储所有的数据,每个元素存放元素的下标为putVal()函数中对应的局部变量p,其计算方法为:p = tab[i = (n - 1)原创 2021-03-24 14:59:00 · 84 阅读 · 0 评论