java
Mrdarin
这个作者很懒,什么都没留下…
展开
-
【Java】Java内存区域
Java相对于C++来说的一个显著的区别就是其内存由虚拟机自动管理、动态分配,因此虚拟机将其管理的内存区域分为一下几大块:一、线程隔离数据区1、程序计数器Java源代码经过编译之后生成字节码,在Java程序运行的过程中,必须知道当前运行的是哪一条指令,并且知道下一条指令的位置或者指令内容,程序计数器就是当前线程用来记录所执行的字节码的行号指示器,如果当前所执行的字节码不是跳转指令,...原创 2019-02-27 14:38:17 · 507 阅读 · 0 评论 -
【并发】AQS源码分析
AQS全称是AbstractQueuedSynchronizer,是JDK提供的一个同步器设计框架,很多并发数据结构如ReentrantLock、ReentrantReadWriteLock、Semaphore等都是基于AQS来实现的,下面来分析一下AQS的原理。一、底层数据结构AQS底层维护了一个state(代表共享资源)和一个CLH队列(代表线程等待队列)state:stat...原创 2019-04-18 12:56:52 · 165 阅读 · 0 评论 -
【并发】Java线程池
线程池顾名思义就是指管理一组同构工作线程的资源池,线程池与工作队列(Work Queue)密切相关,工作队列中保存了所有等待执行的任务。线程池管理的线程的任务就是从工作队列中获取一个任务、执行任务,然后返回线程池并等待下一个任务。一、线程池的优势1、减少线程的创建与销毁所带来的开销,同时任务不需要等待线程创建的时间而可以直接执行,只要有空闲线程的话2、减少空闲活跃线程所带来的CP...原创 2019-04-21 23:21:32 · 190 阅读 · 0 评论 -
【Java】LinkedHashMap及HashSet源码阅读(JDK1.8)
其实LinkedHashMap和HashSet都是基于HashMap来构建的,如果了解HashMap的底层原理的话,这两种数据结构就很好理解了。LinkedHashMap继承自HashMap并实现了Map接口public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map&...原创 2019-03-15 12:58:10 · 115 阅读 · 0 评论 -
【Java】HashMap源码阅读(JDK1.8)
哈希表底层采用数组+链表(红黑树)的数据结构:static class Node<K,V> implements Map.Entry<K,V> { final int hash; //哈希值 final K key; //节点的键 V value; //节点的值 Node<K,V&...原创 2019-03-15 12:32:00 · 107 阅读 · 0 评论 -
【Java】jvm类加载机制
一、类的生命周期类从被加载到虚拟机内存当中,到卸载出内存位置,其生命周期包括七个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、运行(Using)、卸载(Unloading),其中验证、准备、解析三个阶段统称为连接(Linking)阶段。1、加载、验证、准备、初始化...原创 2019-03-10 15:22:36 · 194 阅读 · 0 评论 -
【Java】垃圾回收算法
一、判断对象存活情况1、引用计数算法(非Java所使用的方法)每个对象都维护一个引用计数器,每有一个地方引用这个对象的时候,引用计数器就加1;当引用失效时,引用计数器就减1,当引用计数器的值为0时表示这个对象不可能再被使用了。2、可达性分析算法虚拟机维护一系列称为“GC Roots”的对象作为根节点的树,所有引用了这个“GC Root”的对象都是其子节点,由此可以得到以可引用树,当...原创 2019-03-02 03:11:28 · 191 阅读 · 0 评论 -
【Java】四种引用关系
引用关系在判断对象是否能够存活的过程中起到了关键的作用,但其实引用并不像字面上理解那么简单,在Java语言中引用分为强引用、软引用、弱引用、虚引用四类,其引用强度依次减弱。强引用(Strong Reference):程序代码中普遍存在的,普通对象创建时默认是强引用关系,只要强引用还存在,垃圾收集器就不会收集这些对象。Object obj = new Object(); //强引用对象...原创 2019-03-01 19:56:51 · 2057 阅读 · 0 评论 -
【Java】Java对象详解
名词解释:符号引用:符号引用使用一组符号来描述所引用的目标,可以是任何字面量,只要能够无歧义地定位到该引用目标就行了。由于Java源代码编译成字节码的时候,虚拟机不知道所引用的目标的实际地址,所以需要用一个符号来代替引用的对象。比如说Student类引用了People类,但Student类不知道People类的实际地址,因此用”People“这个字面量来表示这个引用的类,当然实际中并不是...原创 2019-02-27 21:26:45 · 403 阅读 · 0 评论 -
【Java】VarHandle解析
一、VarHandle简介变量句柄(VarHandle)是对于一个变量的强类型引用,或者是一组参数化定义的变量族,包括了静态字段、非静态字段、数组元素等,VarHandle支持不同访问模型下对于变量的访问,包括简单的read/write访问,volatile read/write访问,以及CAS访问。VarHandle相比于传统的对于变量的并发操作具有巨大的优势,在JDK9引入了VarHa...原创 2019-04-19 22:05:55 · 6321 阅读 · 0 评论