首页
JVM
并发编程
设计模式
消息队列
数据库
项目场景
开发工具
分布式
微服务
spring
搜索
第3页
JVM
0
CMS垃圾回收器
2024.10.11 |
cuithink
| 40次围观
回收流程:初始标记(STW,标记GC Root直接关联对象)->并发标记(标记GC Root 所有关联对象)->重新标记(STW)->并发清除(清除不可达对象回收空间,浮动垃圾)后面还一步,是并发重置。CMS的两种模式和一种策略:Backgroud CMS:在并发标记之后,重新标记之前多了两步:并发预处理和可中止的预处理:Eden空间使用超过2M的时候启动可中断的并发预清理(CMS-concurrent-abortable-preclean),到Eden空间...
JVM
0
三色标记
2024.10.11 |
cuithink
| 3次围观
在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。这里引入“三色标记”来给大家解释下,把Gc roots可达性分析遍历对象过程中遇到的对象, 按照“是否访问过”这个条件标记成以下三种颜色:黑色:表示对象已经被垃圾收集器访问过, 且这个对象的所有引用都已经扫描过。 黑色的对象代表已经扫描过, 它是安全存活的, 如果有其他对象引用指向了黑色对象, 无须重新扫描一遍。&nbs...
JVM
0
垃圾收集算法
2024.10.11 |
cuithink
| 23次围观
已经能够确定一个对象为垃圾之后,接下来要考虑的就是回收,怎么回收呢?得要有对应的算法,下面介绍常见的垃圾回收算法。高效 健壮标记-清除(Mark-Sweep)标记找出内存中所有的存活对象,并且把它们标记出来清除清除掉被标记需要回收的对象,释放出对应的内存空间缺点标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程 序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。 (1)标记和清除两个过程都比较耗时,...
JVM
0
如何确定一个对象是垃圾
2024.10.11 |
cuithink
| 37次围观
要想进行垃圾回收,得先知道什么样的对象是垃圾。引用计数法 循环引用对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针对其引用,它就是垃圾。弊端:如果AB相互持有引用,导致永远不能被回收。 循环引用 内存泄露 -->内存溢出可达性分析/根搜索算法通过GC Root的引用,开始向下寻找,看某个对象是否可达能作为GC Root:类加载器、Thread、虚拟机栈的本...
JVM
0
对象的生命周期
2024.10.11 |
cuithink
| 54次围观
创建阶段(1)为对象分配存储空间(2)开始构造对象(3)从超类到子类对static成员进行初始化(4)超类成员变量按顺序初始化,递归调用超类的构造方法(5)子类成员变量按顺序初始化,子类构造方法调用,并且一旦对象被创建,并被分派给某些变量赋值,这个对象的状态就切换到了应用阶段应用阶段(1)系统至少维护着对象的一个强引用(Strong Reference)(2)所有对该对象的引用全部是强引用(除非我们显式地使用了:软引用(Soft Reference)、弱引用(Weak Ref...
JVM
0
jvm 内存分布图
2024.10.11 |
cuithink
| 43次围观
jvm 内存共分为5个部分:方法区,堆区(最大内存块),本地方法栈,Java虚拟机栈,程序计数器。方法区和堆区是所有线程公用的。每个Java虚拟机栈由多个栈帧组成,每个栈帧就是一个方法,每个栈帧包括5个内容:操作数栈,局部变量表,动态链接,返回地址,附加信息,其中,后三项又叫做栈帧信息。//堆中元素指向方法区(方法区中会存放静态变量,常量等数据): private static Object obj=new Object();...
JVM
0
类加载器有哪些
2024.10.11 |
cuithink
| 88次围观
类加载器ClassLoader在装载(Load)阶段,其中第(1)步:通过类的全限定名获取其定义的二进制字节流,需要借助类装载器完成,顾名思义,就是用来装载Class文件的。图解:1)Bootstrap ClassLoader 负责加载 JAVA_HOME中 jre/lib/rt.jar 里所有的class或Xbootclassoath选项指定的jar包。由C++实现,不是ClassLoader子类。2)Extension ClassLoader 负责加载java平台中扩展功...
并发编程
0
ConcurrentHashMap
2024.10.11 |
cuithink
| 64次围观
1. ConcurrenHashMap存储结构?HashMap和ConcurrenHashMap在存储结构上是一模一样的。数组 + 链表 + 红黑树。存储结构 红黑树出现的原因 链表何时转换为红黑树 为什么链表长度为8才转红黑树 红黑树结构情况下,如果删除元素,导致红黑树元素个数小于等于6,会退化为链表。数组扩容触发的两种情况2. ConcurrentHashMap保证写操作线程安全的方式数组上扔数据,CAS保证安全。 没有哈希冲突的情况。链表/红黑树扔数据,synchron...
并发编程
0
ReentrantLock解析
2024.10.11 |
cuithink
| 77次围观
AQS概述AQS就是AbstractQueuedSynchronizer抽象类,AQS其实就是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor,阻塞队列,CountDownLatch,Semaphore,CyclicBarrier等等都是基于AQS实现。首先AQS中提供了一个由volatile修饰,并且采用CAS方式修改的int类型的state变量。其次AQS中维护了一个双向链表,有he...
并发编程
0
ReentrantLock和synchronized的区别
2024.10.11 |
cuithink
| 9次围观
核心区别:ReentrantLock是个类,synchronized是关键字,当然都是在JVM层面实现互斥锁的方式效率区别:如果竞争比较激烈,推荐ReentrantLock去实现,不存在锁升级概念。而synchronized是存在锁升级概念的,如果升级到重量级锁,是不存在锁降级的。底层实现区别:实现原理是不一样,ReentrantLock基于AQS实现的,synchronized是基于ObjectMonitor功能向的区别:ReentrantLock的功能比synchroni...
首页
上一页
1
2
3
4
5
6
7
8
9
下一页
尾页
热门文章
1
MVCC多版本并发控制(一)
2
redis 简图
3
idea快捷键
4
适配器模式
5
线程的创建
6
mysql之Change Buffer
7
建造者模式(Builder)
8
G1垃圾回收器介绍
9
分库分表相关的问题
随机文章
设计模式-基本概念
服务注册中心
分布式事务-seata XA模式
策略模式
分布式幂等性如何设计
idea快捷键
分布式锁
mysql之Tablespace结构
redis 简图
最近发表
spring循环依赖
SpringBoot启动流程
分布式事务-TCC&Saga模式
分布式事务-seata XA模式
分布式事务-seata AT模式
分布式事务
分布式幂等性如何设计
分布式ID生成有几种方案
分布式锁(二)
分布式锁
网站分类
未分类
JVM
并发编程
设计模式
消息队列
kafka
rabbitmq
数据库
redis
mysql
项目场景
开发工具
分布式
微服务
spring
文章归档
2024年10月 (57)
2024年9月 (14)
2024年8月 (6)
2024年7月 (4)
友情链接
阿里云主机
pdai大神