H__D |
|
||
2021年4月7日
摘要:
1、System.gc() 的理解 1、System.gc() 方法 在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免 阅读全文
摘要:
1、标记阶段:引用计数器 1.1、标记阶段的目的 垃圾标记阶段:判断对象是否存活 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。 只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我 阅读全文
2021年4月6日
摘要:
一、关于垃圾收集 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什 阅读全文
2021年4月4日
摘要:
Disruptor类图 Disruptor执行过程 Disruptor源码分析 1 // 环形缓冲区 2 private final RingBuffer<T> ringBuffer; 3 // 实现者 4 private final Executor executor; 5 // 消费仓库 6 p 阅读全文
摘要:
背景 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Mar 阅读全文
2021年4月3日
摘要:
一、介绍 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,下 阅读全文
2021年4月2日
摘要:
一、Fork/Join 基本介绍和使用 参考:【Java多线程】 Fork/Join框架(三十) 二、线程池结构 及 调用图 1、线程池结构图 2、线程池调用图 3、线程池ctl属性变化图 4、WorkQueue的scanState属性变化图 三、示例代码 1 public class CountT 阅读全文
摘要:
一、什么是Fork/Join 框架 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把一个大任务切分为若干子任务 阅读全文
2021年3月31日
摘要:
一、Iterator介绍 Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。 Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 阅读全文
摘要:
ScheduledThreadPoolExecutor,它是一个计划任务线程池,可以执行定时任务或者是计划任务。 ScheduledThreadPoolExecutor 继承了ThreadPoolExecutor,需要了解 ThreadPoolExecutor 的原理,参考:【Java多线程】线程池 阅读全文
|
Copyright © 2024 H__D
Powered by .NET 9.0 on Kubernetes |