| 
                    
        
            
    【JVM】垃圾回收相关算法(十六)
    
            
摘要:1、标记阶段:引用计数器 1.1、标记阶段的目的 垃圾标记阶段:判断对象是否存活 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。 只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我
        阅读全文
            
    【JVM】垃圾回收概述(十五)
    
            
摘要:一、关于垃圾收集 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什
        阅读全文
            
    【Java多线程】Disruptor源码分析(三十四) 
    
            
摘要:Disruptor类图 Disruptor执行过程 Disruptor源码分析 1 // 环形缓冲区 2 private final RingBuffer<T> ringBuffer; 3 // 实现者 4 private final Executor executor; 5 // 消费仓库 6 p
        阅读全文
            
    【Java多线程】Disruptor高性能队列(三十三)  
    
            
摘要:背景 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Mar
        阅读全文
            
    【Java多线程】ConcurrentLinkedQueue实现原理(三十二)
    
            
摘要:一、介绍 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,下
        阅读全文
            
    【Java多线程】Fork/Join 源码分析(三十一)
    
            
摘要:一、Fork/Join 基本介绍和使用 参考:【Java多线程】 Fork/Join框架(三十) 二、线程池结构 及 调用图 1、线程池结构图 2、线程池调用图 3、线程池ctl属性变化图 4、WorkQueue的scanState属性变化图 三、示例代码 1 public class CountT
        阅读全文
            
    【Java多线程】Fork/Join 框架(三十)
    
            
摘要:一、什么是Fork/Join 框架 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把一个大任务切分为若干子任务
        阅读全文
            
    【Java】 Iterator(迭代器) 
    
            
摘要:一、Iterator介绍 Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。 Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 
        阅读全文
            
    【Java多线程】ScheduledThreadPoolExecutor实现原理(二十九)   
    
            
摘要:ScheduledThreadPoolExecutor,它是一个计划任务线程池,可以执行定时任务或者是计划任务。 ScheduledThreadPoolExecutor 继承了ThreadPoolExecutor,需要了解 ThreadPoolExecutor 的原理,参考:【Java多线程】线程池
        阅读全文
            
    【Java多线程】ScheduledThreadPoolExecutor详解(二十八)    
    
            
摘要:ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。它主要用来在给定的延迟之后运行任务,或者定期执行任务。ScheduledThreadPoolExecutor的功能与Timer类似,但ScheduledThreadPoolExecutor功能更强大、更
        阅读全文
            
    【Java多线程】Executor框架 (二十七)
    
            
摘要:一、Executor框架 在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。 Java的线程既是工作单
        阅读全文
            
    【Java多线程】DelayQueue源码分析 (二十六)   
    
            
摘要:阅读本文,请先了解PriorityQueue的使用(【Java】PriorityQueue 源码分析 ),以及AQS等 一、DelayQueue介绍 一个无限制的blocking queue的Delayed元素,其中元素只能在其延迟到期时才被使用。 队列的头是Delayed元素,其延迟期满后保存时间
        阅读全文
            
    【Java多线程】PriorityBlockingQueue源码分析 (二十五)
    
            
摘要:阅读本文前,请先了解AQS,阻塞队列,优先级队列,最小堆数据结构 参考:【Java多线程】队列同步器AQS(十一),【Java多线程】ArrayBlockingQueue阻塞队列原理分析(十六),【Java】PriorityQueue 的实现原理 一、PriorityBlockingQueue介绍 
        阅读全文
            
    【Java】PriorityQueue 源码分析 
    
            
摘要:一、PriorityQueue介绍 PriorityQueue 是基于优先级堆的无限优先级queue 。 优先级队列的元素根据它们的有序natural ordering ,或由一个Comparator在队列构造的时候提供,这取决于所使用的构造方法。 优先队列不允许null元素。 依靠自然排序的优先级
        阅读全文
            
    【Java多线程】SynchronousQueue源码分析(二十四)
    
            
摘要:原文连接:SynchronousQueue原理解析 源码解析 1、SynchronousQueue.java 1 public class SynchronousQueue<E> extends AbstractQueue<E> 2 implements BlockingQueue<E>, java
        阅读全文
            
    【Java多线程】线程最快累加方案(二十三)
    
            
摘要:线程最快累加方案 学习多线程期间,想了一个问题,多个线程累计时,怎样才能使计算又快又安全? 问题:一个初始值为0的变量,10个线程对其进行累计,一个线程对其累加 100_000_000 次,每次加2,请求结果及耗时短的方案? 四种方案,如下: 1 import java.util.concurren
        阅读全文
            
    【Java多线程】线程池ThreadPoolExecutor实现原理(二十二)    
    
            
摘要:一、Java中的线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到
        阅读全文
            
    【Java多线程】读写锁(ReadWriteLock)(二十一)  
    
            
摘要:一、ReadWriteLock 读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交
        阅读全文
            
    【Java多线程】ConcurrentHashMap 的实现原理(二十)
    
            
摘要:一、概述 本章使用的是JDK8。 阅读本章请先了解HashMap的实现原理【Java】HashMap 的实现原理 1.1 ConcurrentHashMap跟HashMap,HashTable的对比 1. HashMap不是线程安全: 在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百
        阅读全文
            
    【Java】HashMap 的实现原理
    
            
摘要:一、概述 本章使用的是JDK8。 二话不说,一上来就点开源码,发现里面有一段介绍如下: Hash table based implementation of the Map interface. This implementation provides all of the optional map
        阅读全文 
    
   |