自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 问答 (1)
  • 收藏
  • 关注

原创 JVM的三色标记

三色标记简述在之前说过的G1和CMS中,在标记的时候都可能出现两种问题,一种是浮动垃圾,一种是漏标的问题,在这里主要就是说一下如何解决这两个问题这里首先介绍三色标记的的标记方法白色:对象未被收集器访问灰色:对象被访问过,但对应至少还有一个引用没有扫描过,还要继续扫描黑色:本对象已访问过,而且本对象引用到的其他对象也全部访问过了执行过程首先将所有对象标记为白色,在扫描到AD之后,将他们置为灰色,然后继续扫描,AD置为黑色,E置为灰色,之后继续扫描,E置为黑色,GF置为灰色,最后GF

2021-08-16 16:00:22 163

原创 常见垃圾收集器介绍及内存分配回收策略(本章无G1以及ZGC)

常见垃圾收集器介绍及内存分配回收策略前言这里会为大家简单介绍市面上比较主流的垃圾收集器以及内存分配回收的一些策略,对于单个垃圾收集器的介绍,会放在之后单独写文章详细分析,有说的不严谨的地方希望大家留言批评指正垃圾收集器组合示意图各种垃圾收集器可以两两配合搭配使用,一个作为新生代垃圾回收,一个作为老年代垃圾回收Serial垃圾收集器(新生代)首先为大家用一张图来表示Serial收集器的执行流程,默认使用的是标记-复制算法,很明显的可以看出这个垃圾收集器的执行会在所有用户线

2021-08-10 15:35:36 136

原创 JVM内存区域解析(TLAB分配,逃逸分析)

JVM内存区域解析(TLAB分配,逃逸分析)前言这是我写的第一篇介绍JVM的文章,有一些不对之处,希望大家可以留言互相交流,在交流探讨之中共同进步。在这一篇文章中主要会尽量详细明白的介绍JVM的内存布局,以及在对象分配的时候流程和JDK1.6之后出现的逃逸分析JVM的内存布局这里用一张图首先让大家对JVM有个清晰地认知,今天我们主要介绍的是运行时数据区程序计数器就是一块比较小的内存空间,存储的是线程执行字节码的行号指示器,整个线程的分支,循环,异常等等都通过这个会进行下去,

2021-08-06 18:07:01 330

原创 并发工具和默认线程池解析(以及FutureTask解析)

并发工具和默认线程池解析前言前面和大家分析了下自定义线程池的具体实现,这里在和大家讨论下自定义的线程池,和内置的一些并发工具的知识FixedThreadPoolpublic static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, T

2021-08-03 11:38:18 153

原创 线程池创建参数详解

线程池创建参数详解引言上一篇文章讲了下线程池的主要执行逻辑分析了下源码,但是发现并没有对线程池创建时的参数进行讲解,可能会有刚看线程池的摸不到头脑,现在补充一篇来讲一下线程池的参数设置,这里大家重点可以放在后三个参数上,前面四个理解起来还是不难的源码对照 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

2021-08-02 11:59:23 276

原创 浅谈线程池(ThreadPoolExecutor源码分析)

浅谈线程池(ThreadPoolExecutor源码分析)线程池的概念和优点一个对线程统一管理资源类似于组件优点就是降低了资源的消耗,通过重复利用已创建的线程,来减少创建销毁线程的消耗提高了响应的速度,任务到了之后可以不等到线程创建之后才能执行提高线程的可管理性,对线程进行统一管理源码分析//首先我们来分析线程池的构造方法 //核心线程数 public ThreadPoolExecutor(int corePoolSize, //最大线程数

2021-07-30 11:21:47 52

原创 浅谈Lock锁(AQS,独占锁情况下ReentrantLock源码分析)

浅谈Lock锁(AQS,独占锁情况下ReentrantLock源码分析)Lock锁的介绍在Lock接口出现之前,java是使用synchronized来实现锁的功能的,但是在JDK5之后,JUC包提供了Lock锁的接口,以供显式的获取锁和释放锁,拥有了锁获取和释放的可操作性,可中断性,超时获取锁等多种同步特性通过这种方式来获取锁和释放锁Lock接口下的功能//获得锁void lock();//可中断的获取锁,这个方法可以响应中断,锁获取中可以中断当前线程void lockInt

2021-07-26 17:50:56 102

原创 浅谈Synchronized关键字

浅谈Synchronizedsynchronized简介synchronized可以说是并发编程的元老级角色,大部分时候被称为重量级锁,但是在1.6之后的为了减弱这种重量级的影响,对其进行了各种优化,像是在1.6的优化中引入了偏向锁和轻量级锁以及锁的消除和锁的升级synchronized锁的范围可以这样说,java中任何一个对象都可以作为锁,具体可以表现为下面三种形式对于普通的同步方法,锁的是当前实例对象对于静态同步方法,锁的是当前类的CLASS对象对于同步的方法块,锁的是括号内

2021-07-21 18:23:42 95

原创 浅谈Volatile关键字

浅谈Volatile关键字volatile的定义在并发编程中,volatile和synchronized都是非常重要的组成,可以这样定义volatile,它是轻量级的synchronized,像是synchronized保证了原子性,可见性,有序性,但是volatile只保证了可见性和有序性,并不能保证原子性保证可见性的意思是指,在多线程的情况下,一个线程修改被volatile修饰的共享变量时,另一个线程可以读到修改的这个值volatile解析这里可以带入两行代码instence

2021-07-19 16:22:59 124

原创 浅谈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 405

原创 浅谈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 221

原创 浅谈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为nullHashMap的查询和存储都是依赖于Hash算法在1.

2021-07-15 11:39:44 121

原创 浅谈HashMap(基于JDK1.7)

浅析HashMap(基于JDK1.7)HashMap基于JDK1.7的类定义public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, SerializableHashMap的数据结构HashMap才用的数据结构是数组+链表的组合方式为了解决hash冲突使用的是拉链法,即遇到hash冲突的时候通过在数组上挂载

2021-07-14 17:54:36 117

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除