目录

ThasBlog

学无止境

标签: Jvm (4)

JVM GC 有更新!

对象引用 强引用 软引用 OOM 之前回收 弱引用 GC 扫描到就回收 幻象引用 不可使用 对象存活分析 引用计数 可达性分析 GCRoots: 栈上引用 存货的线程 方法区静态变量引用 方法区常量引用 本地方法栈引用 对象晋级原则 MinorGC Eden 区进入 Suvivor 区 Suvivor 区对象年龄 +1 Suvivor 对象年龄达到 15(MaxTenuringThreshold 可以设置, CMS 为 4), 晋级到老年代 Suvivor 对象年龄从小到大计算总和, 到达 50%, 超过的年龄将作为新的年龄上限 大对象无法在新生代分配, 直接分配在老年代 MajorGC 只有 CMS 可以独立执行, 其他回收器都会伴随 MinorGC. 垃圾回收算法 复制 标记清除 标记整理 经典垃圾回收器 Serial/Serial Old 初代 GC, 单线程模式, 必须要 Stop The World SerialOld 是最经典的老年代 GC, 可以与任意的新生代 GC 一同使用 ParNew/ConcurrentMa....

JVM类加载过程

类加载过程包括加载, 验证, 准备, 解析, 初始化.

JVM对象创建与访问 有更新!

对象创建 创建过程 检查加载 检查符号引用, 如未解析, 则类加载 分配内存 内存空间初始化 赋初值 对象头设置 初始化 划分内存方式 指针碰撞(内存整理) 空闲列表(标记清理) 并发安全 TLAB(线程本地缓冲) CAS抢占 对象内存布局 对象访问定位 句柄 间接引用堆上的实例(Hotspot使用) 安全, 方便GC 直接引用 对象分配策略 栈上分配 经过逃逸分析, 无法逃逸的对象可能在栈上直接分配 标量替换, 如果无法逃逸的对象只有标量属性赋值和访问操作, 则不创建对象, 直接拆分成栈上标量 TLAB线程本地分配 正常堆上分配 优先Eden区 大对象直接分配在老年代 分配空间担保原则 新生代垃圾进入老年代前的担保 默认: 当老年代可用空间大于新生代总对象大小, 则可分配; 如不满足, 进入担保策略, 老年代可用空间大于历史进入老年代的垃圾平均值, 则可分配, 如果分配失败, 则FullGC; 如不满足, 直接FullGC 关闭HandlePromotionFailure担保: 当老年代可用空间大于新生代总对象大小, 则可分配; 如不满足....

JAVA 内存区域 有更新!

Java 内存区域包括虚拟机栈, 本地方法栈, 程序计数器, 堆, 方法区。