随笔分类 -  JVM

摘要:强引用、软引用、弱引用、虚引用 强引用,使用根可达法未找到的对象,被认为是强引用。GC会定期随机删除 软引用,通过SoftReference类创建的对象,被认为是软引用。在GC异常前必然回收。 // Worker实例 Worker a = new Worker 0 ; // a 为强引用 // 使用 阅读全文 »
posted @ 2024-02-06 11:38 之士咖啡 阅读(16) 评论(0) 推荐(0) 编辑
摘要:面试题:初始化创建的对象有多大? 答案: 16字节 Object a = new Object(); 16字节 String[] b = new String[2](); 16字节 / 24字节 对象的内存布局 主体内容包括: 对象头: MarkWord、指针、数字长度(数组对象才有) 数据体: 对 阅读全文 »
posted @ 2024-02-05 18:40 之士咖啡 阅读(22) 评论(0) 推荐(0) 编辑
摘要:系统运行中,对象创建过程 依据逃逸分析,判断是否能栈上分配? 如果不存在逃逸,该对象就可以通过标量替换分解成成员标量分配在栈内存中,和方法的生命周期一致,随着栈帧出栈时销毁,减少了 GC 压力,提高了应用程序性能。 否则,继续下一步。 判断是否大对象? 如果是,直接分配到堆上 Old Generat 阅读全文 »
posted @ 2023-10-13 17:01 之士咖啡 阅读(7) 评论(0) 推荐(0) 编辑
摘要:Java运行时数据区域 众所周知,Java 虚拟机有自动内存管理机制,如果出现内存泄漏和溢出方面的问题,排查错误就必须要了解虚拟机是怎样使用内存的。 包含:程序计数器(PC)、堆、本地方法栈、虚拟机栈、元空间 下图是 JDK8 之后的 JVM 内存布局。 程序计数器(PC) 内存中一块较小的空间,每 阅读全文 »
posted @ 2023-10-13 14:59 之士咖啡 阅读(13) 评论(0) 推荐(0) 编辑
摘要:内存模型与内存区域 很多时候,二者会混淆,所以咱们先做区分:内存模型与内存区域 内存区域是指JVM运行时将数据分区域存储,强调的是对空间的分配 内存模型(JMM)是定义了线程和主内存之间的抽象关系。即定义了 JVM 在计算机内存中的工作方式 内存模型 抽象关系定义 线程之间的共享区间为主内存,也就是 阅读全文 »
posted @ 2023-10-13 11:48 之士咖啡 阅读(16) 评论(0) 推荐(0) 编辑
摘要:锁升级 锁升级,是JDK1.6版本中对于synchronized的优化。调查发现一般情况下锁的使用都是为了处理一些极端情况,但多时间,并不会出现并发争强的情况,直接是有synchronized比较重,会影响系统性能。 升级步骤: 无锁/匿名偏向锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 升级特 阅读全文 »
posted @ 2023-10-10 11:12 之士咖啡 阅读(126) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示