- 博客(30)
- 收藏
- 关注
原创 每天分享一个小知识——JVM之CMS的缺点
处理器资源敏感并发阶段占用CPU资源,默认线程数为(核心数+3)/4,核心数不足时(如4核以下)可能导致应用吞吐量显著下降,尤其在CPU密集型应用中更为明显。浮动垃圾与并发模式失败(Concurrent Mode Failure)并发清理阶段用户线程产生的新垃圾(浮动垃圾)无法被本次回收处理,可能占满老年代空间,触发Full GC(Serial Old),导致长时间STW停顿。内存碎片化使用标记-清除算法,长期运行后老年代内存碎片增多,大对象分配失败时会触发Full GC进行压缩,增加不可控停顿风险。
2025-05-06 11:54:13
469
原创 每天分享一个小知识——JVM之Parallel Old收集器
这个收集器是直到JDK 6时才开始提供的,在此之前,新生代的Parallel Scavenge收集器一直处于相 当尴尬的状态,原因是如果新生代选择了Parallel Scavenge收集器,老年代除了Serial Old(PS MarkSweep)收集器以外别无选择,其他表现良好的老年代收集器,如CMS无法与它配合工作。由于 老年代Serial Old收集器在服务端应用性能上的“拖累”,使用Parallel Scavenge收集器也未必能在整体上 获得吞吐量最大化的效果。
2025-04-30 11:41:24
269
原创 每天分享一个小知识——JVM之Parallel Scavenge收集器
而 ParNew 更适合“用户随时盯着,不能卡顿太久”的场景(比如在线商城)。:每次打扫只用5分钟,但每隔1小时打扫一次(适合不能接受长时间卡顿的实时服务)。如果你在写一个“不需要哄用户开心,只求赶紧干完活”的程序(比如半夜跑数据),:比如生成报表、跑数据分析,不怕卡顿,但要求任务总时间最短。默认是99,即回收时间不超过1%(1/(1+99))。,适合后台闷头干活的任务(比如数据分析、批量处理)。比如把新生代内存调小,回收更快,但回收次数变多。→ 数字越大,允许的回收时间越少,吞吐量越高。
2025-04-30 11:07:07
485
原创 每天分享一个小知识——JVM之ParNew收集器
回收时,把存活对象从活动区复制到闲置区,然后清空原活动区(就像把有用的文件整理到新文件夹,然后删掉旧文件夹的垃圾)。:ParNew 通常和 CMS(负责老年代回收)组队工作,一个管“年轻对象”,一个管“长寿对象”,适合对系统响应速度敏感的应用(比如网页服务)。它的核心任务就是快速回收那些“用完就丢”的临时对象,避免内存堆积。:虽然用多线程加速,但回收时仍需暂停所有用户线程(想象扫地时所有人暂停工作,但清洁工越多,暂停时间越短)。,用多线程缩短垃圾回收导致的系统卡顿,是多核时代的高效选择。
2025-04-30 10:52:24
479
原创 每天分享一个小知识——JVM之Serial 收集器
你在写作业,妈妈在收拾书桌。如果妈妈收拾的时候你还继续从书桌拿书、放书,桌子就永远收拾不干净。你的个人电脑跑一个小程序,Java 默认用 Serial 收集器,因为。(单线程),打扫时所有人必须停下手中的活(STW),但它的好处是。(单线程),干活时必须让所有人停下(STW),但它在。,短时间的 GC 暂停你根本感觉不到。,但它们的内存开销更大、实现更复杂。Serial(串行)收集器是。,让用户线程和 GC 线程。Serial 收集器就像。Serial 收集器就像。,因为有些场景它最适合。
2025-04-27 18:02:51
450
原创 每天分享一个小知识——JVM之三种垃圾回收算法
房间分成 8:1:1(比如 80% 放新东西,10% 做备用区),只浪费 10% 空间。:平时用标记-清除,碎片太多时才整理(类似平时乱放书,实在找不到空间再大扫除)。:清理后房间角落可能有零星小空间,虽然总量够,但放不下一个大沙发(大对象)。(对象长存):用标记-清除(减少移动开销)或标记-整理(解决碎片问题)。:老年代的东西长期存在(像经典书籍),移动次数少,整理一次管很久。:如果备用区不够,直接“贷款”把东西存到老年代(类似找担保人)。(对象短命):用复制算法(快速清理,容忍少量空间浪费)。
2025-04-27 10:53:32
494
原创 每天分享一个小知识———jvm之finalize自救
可以把 finalize() 比作“死刑犯的最后一次上诉机会”:如果能在“上诉”( finalize() )中证明自己“不该死”(重新建立引用),就能暂时存活;若对象在 finalize() 中成功“复活”(例如将 this 赋值给某个静态变量),则会被移出回收集合;第一次标记:当垃圾回收器通过可达性分析发现对象不可达时,会进行第一次标记,并检查是否需要执行 finalize() 方法。如果对象未覆盖 finalize() 方法,或该方法已被执行过,则直接判定为“无需执行”,对象会被回收。
2025-04-23 19:38:47
695
原创 每天分享一个小知识———JVM之引用计数与可达性算法分析
场景引用计数(图书馆模型)可达性分析(社交网络模型)实时性立即下架归还的书定期批量清理僵尸账号循环引用处理❌ 互相引用的书无法下架✅ 孤立圈子直接清除性能代价管理员频繁更新计数器(琐碎操作)定期全面排查(短时集中资源)适用场景小规模、实时性要求高的系统(如嵌入式)大规模、健壮性优先的系统(如 Java)Java 的设计哲学牺牲实时性,换取健壮性:Java 面向企业级应用,内存泄漏的代价远高于短暂停顿。自动化内存管理:开发者无需手动处理对象生命周期,专注业务逻辑。高效处理复杂引用关系。
2025-04-22 00:37:56
1201
原创 每天分享一个小知识——JVM之直接内存溢出原理分析
直接内存溢出常见于高频I/O或框架隐式分配场景,特征为堆内存正常但进程总内存高。通过合理配置、监控工具及代码审查,可有效预防。例如,Netty应用中需结合业务负载调整内存参数,并及时清理无用的ByteBuffer💡 你的每个关注,都是我们共同进步的燃料!⬇️ 下期预告:《每天分享一个小知识——垃圾收集器与内存分配策略。
2025-04-21 00:50:21
690
原创 每天分享一个小知识——JVM之方法区和运行时常量池溢出
String str1 = new StringBuilder("计算机").append("软件").toString();监控元空间使用(如JConsole、VisualVM),警惕动态类生成框架(如Spring AOP、Groovy)。→ 按需租用的云存储(容量灵活,但需警惕无限扩张)。:字符串常量池在堆中,需限制堆大小才能触发OOM。方法区从永久代(堆内)演变为元空间(本地内存)。:移除永久代中的字符串常量池,将其移至堆内存。:同一类被不同类加载器加载,视为多个类。:永久代容量有限,直接OOM。
2025-04-20 11:50:26
1793
原创 每天分享一个小知识————JVM之虚拟机栈内存异常
32位系统进程内存上限约2GB,假设堆内存占1.5GB,剩余500MB只能创建约500个线程。每次递归调用都会压入一个栈帧,栈容量固定(比如默认1MB),最终栈被“塞满”,触发。:内存限制更大,但线程数仍受系统配置影响(如 Linux 默认线程数限制为几千)。// 无限递归,栈帧不断叠加。变量(占 800 字节),导致单个栈帧巨大,栈容量更快耗尽。:线程数严格受限于进程内存(约2GB),容易触发。:栈被“塞满”,问题在代码逻辑(递归、大栈帧)。:过小容易栈溢出,过大会减少可创建的线程数。
2025-04-20 11:04:26
1980
原创 每天分享一个小知识————JVM对象之对象的访问定位
某些高级垃圾回收器(如 Shenandoah)在移动对象时,会偷偷在旧地址留一个「转发指针」(类似纸条:“房间已搬到 250”),但这属于特殊优化。│ p → 200 │─────────→│ 对象头 (类型指针 → 300) │。│ 实例数据 (name等) │。:如果酒店调整房间(垃圾回收时移动对象),只需更新登记表里的门牌号,你的房卡(│ p → 100 │ │ 句柄池 (地址100) │。:存放所有房间的登记信息(对象的类型数据,比如房间类型、床型等)。
2025-04-18 23:59:19
759
原创 每天分享一个小知识————JVM对象之对象的内存布局
比如对象总大小是 18 字节,HotSpot 会偷偷加 6 字节的“空气砖”,凑成 24 字节(因为 24 是 8 的倍数)。如果是数组,对象头还要额外存数组长度(因为普通对象的大小可以通过类元数据推断,但数组长度不确定)。(默认开),子类的窄字段可能插到父类字段的“缝隙”里省空间(类似行李箱塞袜子)。(3字节):让总大小 12 + 9 + 3 = 24 字节(8 的倍数)。指向对象的“户口”(类元数据),告诉虚拟机这个对象是哪个类的实例。对齐填充(4字节):让对象头凑满 12 字节(假设需要对齐)
2025-04-18 22:51:58
680
原创 每天分享一个小知识————虚拟机对象之对象创建
先学图纸 → 腾地方 → 防抢材料 → 清空 → 贴标签 → 最后组装。这样你就能得到一个完整的 Java 对象啦!
2025-04-18 22:01:53
372
原创 每天分享一个小知识————JVM内存区域之直接内存
直接内存就是Java程序的"外部工作室",用好了效率飞起,但要注意别把工作室和家里面积加一起超了房东(操作系统)给的限额。
2025-04-18 10:15:59
313
原创 每天分享一个小知识————JVM内存区域之运行时常量池的一些概念
/ 字符串常量(final修饰)// 显式驻留到运行时常量池。// 基本类型final常量。// 字符串final常量。// 字符串常量(final修饰):字面量"Hello"存入运行时常量池。// 动态生成字符串,显式调用intern()后存入运行时常量池。存储字面量、解析后的符号引用(直接引用)、以及运行时动态添加的常量(如。// 符号引用:Object类在类加载时解析为直接引用。// final常量(基本类型):编译期替换为100。// 字面量"World"存入运行时常量池。
2025-04-18 00:15:40
682
原创 每天分享一个小知识————JVM内存区域之运行中常量池
/ "World"通过intern()动态加入运行时常量池。// 将"Hello"加入常量池(如果不存在)// false(s1在堆,s2指向常量池):像一本随时可以补充笔记的课本——既有原本印刷的内容(编译期常量),也能手写添加新内容(运行期常量)。类加载时,JVM把符号引用解析为直接引用(把“XX小区1号楼”翻译成具体坐标),并存到运行时常量池。:编译时写入(从Class文件的常量池加载) + 运行时动态添加(如通过。
2025-04-18 00:02:46
629
原创 每天分享一个小知识————JVM内存区域之方法区
存类信息、常量的“图书馆”,JDK 8前叫永久代(堆内),JDK 8后叫元空间(本地内存)。:规范说它是堆的一部分,但实际叫“非堆”(类似档案室在公司大楼里,但有独立管理规则)。// 每次调用生成一个新代理类。:热点代码(频繁执行的方法)编译后的机器码(类似常用书籍的速记版)。:元空间耗尽本地内存(如动态生成大量类,如反射、CGLib代理)。:类的所有实例被回收,且类加载器被回收(条件苛刻,极少发生)。:类的名字、字段、方法、父类、接口等(类似书的目录和内容)。
2025-04-17 23:47:57
625
原创 每天分享一个小知识————JVM内存区域之本地方法栈
公司为了节省成本,让同一团队既处理内部邮件(Java方法)又处理外语邮件(本地方法),但内部依然区分两类邮件的处理流程。:管理外语(如C/C++)方法的“翻译笔记”,两者协作让Java既能处理内部逻辑,又能调用外部功能。JVM通过本地方法栈管理这个C/C++方法的执行(分配内存、记录调用状态等)。:大量创建线程并调用本地方法(每个线程的本地方法栈占用内存)。:处理海外客户的邮件(本地方法,用外语如C/C++编写)。本地方法栈 → 本地方法(如C/C++写的JNI方法)。
2025-04-17 23:21:06
573
原创 每天学一个小知识——JVM内存区域之程序计数器
假设一个办公室(处理器)有多个员工(线程),每个员工同时处理不同的任务。为了不互相干扰,每个员工都有自己的书签(程序计数器),记录自己任务当前的进度。程序计数器是线程私有的“代码执行进度条”,确保多线程环境下每个线程能独立记录自己的执行位置,且永远不会因内存不足而崩溃。程序计数器的作用类似,:程序计数器只存储一个指令地址(或空值),占用的内存极小,且每个线程独立分配,不需要动态扩容。:当线程被切换(比如时间片用完),程序计数器会记住当前执行的位置,下次回来时能无缝继续工作。(字节码指令的位置)。
2025-04-17 23:05:44
278
原创 12306高并发抢票系统-网关模块
6.加了上面的jvm参数后,会打印网关调用日志。3. properties文件配置。5.网关启动类jvm参数配置。1,新建module。2. pom文件配置。
2023-07-17 00:37:36
163
原创 12306-高并发抢票系统-第四章-3--代码关联git远程仓库
5、个人设置里配置ssh密钥,从git中复制过来。7、在idea的git控制台执行命令。6、在阿里云代码管理中新建代码库。4、登录阿里云的 云效代码管理。2、配置git邮箱和用户名。3、idea上提交到本地库。
2023-07-17 00:23:29
151
原创 JVM内核调优(一)
这个阶段也好理解,我们上面的字节码解读时,知道字节码里有的是直接 引用,有的是指向了其他的字节码地址。而符号引用验证的就是,这些引用的对应的内容是否合法。:到java语法级别了。1)类的加载就是将class文件中的二进制数据读取到内存中,然后将该字节流 所代表的静态数据结构转化为方法区中运行的数据结构,并且在堆内存中生成 一个java.lang.Class对象作为访问方法区数据结构的入口。加载到内存的过程是类加载器完成的,涉及到的加载器从上往下有 系统类加载器,扩展类加载器,应用类加载器,自定义加载器。
2022-12-19 11:16:38
103
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1