Toggle navigation
hang.li Blog
Home
About
Archive
hang.li Blog
「离开世界之前 一切都是过程」
判断对象是否存活算法
引用计数算法 对象每当被引用一次在其头部计数器加一,引用失效,头部减一,计数器为0时代表该对象没有任何引用,视为垃圾。 缺点:无法解决循环引用问题。 可达性分析(java使用) 通过GC Roots沿引用开始搜索,没有被扫描到的即视为垃圾。 GC时常说的标记过程就是应用可达性分析算法进行标记;注,标记标记到的都是存活的对象。 java中的GC Root...
Posted by hang.li on November 20, 2022
创建对象时的内存分配算法
判断空闲内存 根据内存是否规整使用不同的方法 内存规整:指针碰撞 在空闲区域,按照分配顺序一个接着一个往后排。常用于自带内存整理的垃圾收集器。 内存不规整:空闲列表 虚拟机会维护一个空闲内存列表,会把对象分配到空闲的内存上。 空闲列表的优化 在CMS的实现里面,为了能在多数情况下分配得更快,设计了一个叫作Linear Allocation Buffer的分配缓冲区,通过空闲列表拿到一大块分配...
Posted by hang.li on November 20, 2022
synchronized锁
锁升级过程 无锁状态 偏向锁: 一旦有线程对该对象加锁,markword区前54位指向当前线程指针 自旋锁(无锁,轻量级): CAS一旦有多个线程竞争锁,在每个线程栈帧内生成Lock Record, 前62位保存拿到当前执行权限的线程的Lock Record Lock Record中保存之前对象头中被替换掉的内容 重量级: 自旋10次,升级为重量级锁, 其他线程不再自旋,进...
Posted by hang.li on November 20, 2022
java中的引用类型
强引用(strong references) 如果有该引用关系,gc就不会回收该对象. 常见的赋值操作都是强引用 软引用(soft reference) 当内存不足时,会打破该引用,将对象回收 可用于缓存 弱引用(weak reference) 下次gc时就会打破该引用,将对象回收 虚引用(phantom reference) ...
Posted by hang.li on November 20, 2022
object在内存
测试代码 引入maven环境 1 2 3 4 5 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>...
Posted by hang.li on November 20, 2022
java运行时数据区内存
程序计数器 每一个线程独享一个程序计数器,在运行时数据区唯一不会发生内存溢出的区域。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地 址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。 虚拟机栈 每一个线程独占一个虚拟机栈。每当一个线程执行,jvm都会创建一个对应的栈帧。 1)...
Posted by hang.li on November 20, 2022
java自动装箱,拆箱
装箱: 在操作数栈顶压入常量值5 调用Integer.valueOf的静态方法,得到Integer的对象到操作数栈顶 将操作数栈顶赋给局部变量表的1号位置(因为是静态方法,局部变量表不存在this,所以形参args占0号位,i占1号位) 拆箱: 将刚才生成1号位的i对象压入操作数栈 调用对象i的intValue方法得到常量放在操作数栈顶 将操作数栈顶的值赋值给...
Posted by hang.li on November 20, 2022
HashMap关键方法
1. 类介绍 官方api地址 该类是基于哈希表对Map接口进行的实现。该实现提供了所有可重写的map操作,并允许null值和null键。(HashMap与Hashtable大致相同,区别是Hashtable是同步的,并且Hashtable的key和value都不允许为null。)这个类不能保证map的顺序;不同时间相同的键值对也可能顺序不一样。 2.成员变量含义 1 2 3 4 5 6 7...
Posted by hang.li on November 20, 2022
HashMap中树的相关操作
1.数据模型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /** * hashMap超长时的数据模型,红黑树 * 并且在树中维护了一个潜在的双向链表(原链表的关系) */ static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V>...
Posted by hang.li on November 20, 2022
ClassPathXmlApplicationContext加载过程
ClassPathXmlApplicationContext创建过程 调用父类中的方法创建一个上下文对象 1 org.springframework.context.support.AbstractApplicationContext#AbstractApplicationContext(org.springframework.context.ApplicationContext...
Posted by hang.li on November 20, 2022
← Newer Posts
Older Posts →
FEATURED TAGS
spring
java
gc
data
design
OS
hashmap
list
redis
working
ABOUT ME