- 博客(13)
- 问答 (1)
- 收藏
- 关注
原创 JVM的三色标记
三色标记 简述 在之前说过的G1和CMS中,在标记的时候都可能出现两种问题,一种是浮动垃圾,一种是漏标的问题,在这里主要就是说一下如何解决这两个问题 这里首先介绍三色标记的的标记方法 白色:对象未被收集器访问 灰色:对象被访问过,但对应至少还有一个引用没有扫描过,还要继续扫描 黑色:本对象已访问过,而且本对象引用到的其他对象也全部访问过了 执行过程 首先将所有对象标记为白色,在扫描到AD之后,将他们置为灰色,然后继续扫描,AD置为黑色,E置为灰色,之后继续扫描,E置为黑色,GF置为灰色,最后GF
2021-08-16 16:00:22
245
原创 常见垃圾收集器介绍及内存分配回收策略(本章无G1以及ZGC)
常见垃圾收集器介绍及内存分配回收策略 前言 这里会为大家简单介绍市面上比较主流的垃圾收集器以及内存分配回收的一些策略,对于单个垃圾收集器的介绍,会放在之后单独写文章详细分析,有说的不严谨的地方希望大家留言批评指正 垃圾收集器组合示意图 各种垃圾收集器可以两两配合搭配使用,一个作为新生代垃圾回收,一个作为老年代垃圾回收 Serial垃圾收集器(新生代) 首先为大家用一张图来表示Serial收集器的执行流程,默认使用的是标记-复制算法,很明显的可以看出这个垃圾收集器的执行会在所有用户线
2021-08-10 15:35:36
233
原创 JVM内存区域解析(TLAB分配,逃逸分析)
JVM内存区域解析(TLAB分配,逃逸分析) 前言 这是我写的第一篇介绍JVM的文章,有一些不对之处,希望大家可以留言互相交流,在交流探讨之中共同进步。 在这一篇文章中主要会尽量详细明白的介绍JVM的内存布局,以及在对象分配的时候流程和JDK1.6之后出现的逃逸分析 JVM的内存布局 这里用一张图首先让大家对JVM有个清晰地认知,今天我们主要介绍的是运行时数据区 程序计数器 就是一块比较小的内存空间,存储的是线程执行字节码的行号指示器,整个线程的分支,循环,异常等等都通过这个会进行下去,
2021-08-06 18:07:01
444
原创 并发工具和默认线程池解析(以及FutureTask解析)
并发工具和默认线程池解析 前言 前面和大家分析了下自定义线程池的具体实现,这里在和大家讨论下自定义的线程池,和内置的一些并发工具的知识 FixedThreadPool public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, T
2021-08-03 11:38:18
231
原创 线程池创建参数详解
线程池创建参数详解 引言 上一篇文章讲了下线程池的主要执行逻辑分析了下源码,但是发现并没有对线程池创建时的参数进行讲解,可能会有刚看线程池的摸不到头脑,现在补充一篇来讲一下线程池的参数设置,这里大家重点可以放在后三个参数上,前面四个理解起来还是不难的 源码对照 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
2021-08-02 11:59:23
370
原创 浅谈线程池(ThreadPoolExecutor源码分析)
浅谈线程池(ThreadPoolExecutor源码分析) 线程池的概念和优点 一个对线程统一管理资源类似于组件 优点就是降低了资源的消耗,通过重复利用已创建的线程,来减少创建销毁线程的消耗 提高了响应的速度,任务到了之后可以不等到线程创建之后才能执行 提高线程的可管理性,对线程进行统一管理 源码分析 //首先我们来分析线程池的构造方法 //核心线程数 public ThreadPoolExecutor(int corePoolSize, //最大线程数
2021-07-30 11:21:47
102
原创 浅谈Lock锁(AQS,独占锁情况下ReentrantLock源码分析)
浅谈Lock锁(AQS,独占锁情况下ReentrantLock源码分析) Lock锁的介绍 在Lock接口出现之前,java是使用synchronized来实现锁的功能的,但是在JDK5之后,JUC包提供了Lock锁的接口,以供显式的获取锁和释放锁,拥有了锁获取和释放的可操作性,可中断性,超时获取锁等多种同步特性 通过这种方式来获取锁和释放锁 Lock接口下的功能 //获得锁 void lock(); //可中断的获取锁,这个方法可以响应中断,锁获取中可以中断当前线程 void lockInt
2021-07-26 17:50:56
145
原创 浅谈Synchronized关键字
浅谈Synchronized synchronized简介 synchronized可以说是并发编程的元老级角色,大部分时候被称为重量级锁,但是在1.6之后的为了减弱这种重量级的影响,对其进行了各种优化,像是在1.6的优化中引入了偏向锁和轻量级锁以及锁的消除和锁的升级 synchronized锁的范围 可以这样说,java中任何一个对象都可以作为锁,具体可以表现为下面三种形式 对于普通的同步方法,锁的是当前实例对象 对于静态同步方法,锁的是当前类的CLASS对象 对于同步的方法块,锁的是括号内
2021-07-21 18:23:42
151
原创 浅谈Volatile关键字
浅谈Volatile关键字 volatile的定义 在并发编程中,volatile和synchronized都是非常重要的组成,可以这样定义volatile,它是轻量级的synchronized,像是synchronized保证了原子性,可见性,有序性,但是volatile只保证了可见性和有序性,并不能保证原子性 保证可见性的意思是指,在多线程的情况下,一个线程修改被volatile修饰的共享变量时,另一个线程可以读到修改的这个值 volatile解析 这里可以带入两行代码 instence
2021-07-19 16:22:59
187
原创 浅谈ConcurrentHashMap(基于JDK1.8)
浅谈ConcurrentHashMap(基于JDK1.8) 原理简介 在JDK1.8的的升级中,ConcurrentHashMap沿用了HashMap的结构,使用了数组+链表+红黑树的结构,并且在1.8之后取消了1.7时的Segment数组加锁的形式,而是使用了CAS+Node数组加synchronized 锁的形式,粒度相较于1.7时更细,支持的并发成都更高 在1.8之后key和value都不可以为null 结构示意图 ConcurrentHashMap在1.8的数据结构 2.源码解析 一些
2021-07-16 17:16:46
494
原创 浅谈ConcurrentHashMap(基于JDK1.7)
浅谈ConcurrentHashMap(基于JDK1.7) ConcurrentHashMap简介 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现 ConcurrentHashMap在并发编程的情况下使用率非常高 相较于HashTable每次添加的重量级锁synchronized,锁的粒度更细 1.7的ConcurrentHashMap的value是不支持为null的,这与添加是对值进行非空校验有关 ConcurrentHashMap的数据结构
2021-07-15 16:46:28
298
原创 浅谈HashMap(基于JDK1.8)
浅析HashMap(基于JDK1.8) HashMap基于JDK1.8的类定义 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable 基本原理 HashMap是一个基于map实现的散列表,key允许为空值,但因为key不允许重复,所以只允许一个key为null HashMap的查询和存储都是依赖于Hash算法 在1.
2021-07-15 11:39:44
172
原创 浅谈HashMap(基于JDK1.7)
浅析HashMap(基于JDK1.7) HashMap基于JDK1.7的类定义 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap的数据结构 HashMap才用的数据结构是数组+链表的组合方式 为了解决hash冲突使用的是拉链法,即遇到hash冲突的时候通过在数组上挂载
2021-07-14 17:54:36
175
空空如也
这个sql该怎么写,急用
2019-11-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人