什么网站做免单衣服郴州在哪里

张小明 2026/1/11 12:19:22
什么网站做免单衣服,郴州在哪里,着陆页设计网站国内,龙岗营销网站建设公司JVM 内存模型详解#xff08;运行时数据区 Java Memory Model#xff09;在中文语境里#xff0c;“JVM 内存模型”有两种常见指代#xff1a; 1#xff09;JVM 运行时数据区#xff08;HotSpot 里的堆、栈、元空间等#xff09;#xff0c;偏“内存结构”#xff1b…JVM 内存模型详解运行时数据区 Java Memory Model在中文语境里“JVM 内存模型”有两种常见指代1JVM 运行时数据区HotSpot 里的堆、栈、元空间等偏“内存结构”2Java Memory ModelJMM可见性/有序性/原子性规则偏“并发语义”。这份文档把两者都讲清楚并给出排障与调优落地方法。1. 一张图先建立整体视角┌─────────────── 线程私有 ────────────────┐ Java 线程 ───▶ │ 程序计数器 PC │ 虚拟机栈 │ 本地方法栈 │ └────────────────────────────────────────┘ │ ▼ ┌────────────── 线程共享 ───────────────┐ │ 堆 Heap │ │ (新生代/老年代/对象分配/GC 等) │ └───────────────────────────────────────┘ │ ▼ ┌────────────── 线程共享 ───────────────┐ │ 方法区 / 元空间 Metaspace │ │ (类元数据、常量池、方法字节码等) │ └───────────────────────────────────────┘ 另外直接内存 Direct MemoryNIO/堆外不属于运行时数据区但非常重要。2. JVM 运行时数据区HotSpot 视角2.1 程序计数器PC Register——线程私有作用记录当前线程执行到哪一条字节码指令解释器/即时编译器都需要。特点线程私有每个线程一份切换线程后能恢复到正确位置。几乎是 JVM 中唯一不会 OOM的区域。注意执行 Native 方法时PC 的值是未定义不指向字节码。2.2 虚拟机栈Java Virtual Machine Stack——线程私有组成单位栈帧Stack Frame每次方法调用入栈返回出栈。栈帧主要包含局部变量表Local Variables操作数栈Operand Stack动态链接指向运行时常量池中的符号引用解析结果方法返回地址等常见问题StackOverflowError递归太深/栈帧过大导致栈空间耗尽。OutOfMemoryError: unable to create new native thread线程太多或单个线程栈太大导致无法再创建线程本质是 OS 资源/地址空间不足。调参-Xss控制每个线程栈大小栈大单线程递归更深、但线程数上限变低栈小线程数上限高、但更易 SOE实战经验线上“线程爆炸”时盲目把-Xss调太大很容易把问题放大因为每个线程占用更多内存。2.3 本地方法栈Native Method Stack——线程私有作用执行 JNI/Native 方法时使用的栈。问题类型同样可能StackOverflowError或 OOM不同 JVM 实现表现略有差异。2.4 堆Heap——线程共享堆是 GC 主要工作区域也是对象的主要分配地。2.4.1 分代结构经典 HotSpot新生代 YoungEden S0 S1Survivor老年代 Old存放存活时间长/体积大/晋升的对象大对象/特殊对象可能直接进入老年代取决于收集器和配置JDK 21或不同 GC分代实现细节有差异但“短命对象多、长命对象少”的假设仍然成立。2.4.2 对象分配的典型路径绝大多数对象先分配在EdenMinor GC 后存活对象进入 Survivor并增加“年龄”年龄达到阈值或 Survivor 放不下 → 晋升到 OldOld 不够 → Full GC / Mixed GC / 触发 OOM取决于 GC2.4.3 TLAB线程本地分配缓冲为了减少多线程在堆上分配对象时的锁竞争JVM 给每个线程划一小块 TLAB。大多数小对象在 TLAB 内“指针碰撞”即可分配速度非常快。2.5 方法区 / 元空间Method Area / Metaspace——线程共享方法区是 JVM 规范概念HotSpot 在 JDK 8 之后用 **元空间Metaspace**实现。主要内容类元数据Class Metadata运行时常量池Runtime Constant Pool方法字节码、字段信息等JDK 7/8 时代对比JDK 7 及以前HotSpot 有永久代 PermGen在堆里的一块区域常见OutOfMemoryError: PermGen spaceJDK 8移除 PermGen改为Metaspace使用本地内存常见OutOfMemoryError: Metaspace常见 OOM 场景动态生成大量类CGLIB、Javassist、ByteBuddy、脚本引擎等且类卸载条件不满足调参-XX:MaxMetaspaceSize上限-XX:MetaspaceSize触发 GC 的阈值之一2.6 直接内存Direct Memory / Off-Heap不属于 JVM 规范的运行时数据区但在 HotSpot 中非常关键。典型来源NIOByteBuffer.allocateDirectNetty 堆外内存mmap 文件映射等风险堆看起来不大但进程 RSS 飙升最终被 OS 杀死或出现OutOfMemoryError: Direct buffer memory相关参数-XX:MaxDirectMemorySize若未设置通常与-Xmx相关联具体行为依 JVM 实现而定3. 对象在内存中的样子理解 GC 与锁很有用3.1 对象的基本布局HotSpot 常见对象头Mark Word哈希、锁状态、GC 年龄等Klass Pointer指向类元数据实例数据字段内容对齐填充按 8 字节对齐常见这也是为什么“加一个 boolean 字段不一定只多 1 字节”的原因对齐与对象头占比会影响最终大小。3.2 引用类型强/软/弱/虚强引用默认引用GC 不会回收软引用内存紧张时回收缓存场景弱引用下一次 GC 就可能回收虚引用配合引用队列做资源回收通知4. 垃圾回收GC你至少需要知道这些4.1 何为可达性分析GC Roots常见 GC Roots线程栈中的局部变量引用静态字段引用类变量JNI 引用活跃线程、锁对象等对象从 Roots 可达 → 存活不可达 → 可回收可能经历一次 finalize 复活但不建议依赖。4.2 常见 GC 事件概念层Minor GC主要回收新生代Major/Old GC回收老年代不同收集器定义略不同Full GC通常指全堆 方法区/元空间相关回收代价高4.3 你会在日志里看到什么吞吐量Throughput应用时间 / 总时间停顿时间PauseSTW 时长用户更敏感晋升失败、并发失败、空间不足等关键字建议生产环境至少打开 GC 日志并把日志输出到文件避免 STDOUT 影响容器/日志采集。5. Java Memory ModelJMM——并发的“内存规则”JMM 解决的问题不是“内存怎么分区”而是一个线程写入的变量另一个线程什么时候能看见可见性指令会不会乱序导致诡异结果有序性某些操作是不是不可分割原子性5.1 主内存与工作内存抽象模型主内存所有线程共享的变量存储工作内存每个线程对共享变量的副本寄存器/缓存/编译器优化的抽象这解释了为什么“你在一个线程里改了变量另一个线程不一定马上看到”。5.2 三大核心性质原子性单次读/写如int赋值通常是原子的i不是原子操作读-改-写三步可见性volatile、synchronized、final正确发布可以提供可见性保障有序性编译器/CPU 可能重排序只要不改变单线程语义但多线程下可能出现“先看见结果后看见原因”的诡异现象5.3 happens-before 规则非常重要理解为如果 A happens-before B那么 A 的结果对 B 可见且 A 的执行顺序排在 B 之前在 JMM 意义上。常用规则程序顺序规则同一线程内前面的操作 hb 后面的操作监视器锁规则解锁 hb 之后对同一锁的加锁volatile 变量规则对 volatile 的写 hb 之后对它的读线程启动/终止规则Thread.start()hb 线程内动作线程内动作 hbThread.join()返回传递性A hb B 且 B hb C ⇒ A hb C5.4 volatile轻量但“不是万能”volatile 提供对该变量的读写可见性对 volatile 写-读建立happens-before禁止某些重排序插入内存屏障volatile 不提供复合操作的原子性count仍然不安全适用场景状态标记如停止标志单例双重检查DCL中配合volatile避免重排序导致半初始化对象可见5.5 synchronized / Locksynchronized进入/退出监视器带来内存语义可见性 有序性同时提供互斥原子性java.util.concurrent.locks同样有 happens-before 保障基于 AQS/volatile/CAS6. 把两者串起来为什么“并发 Bug”经常像“内存问题”一个经典例子发布逸出unsafe publication线程 A new 了对象但对象内部字段还没完全写完由于重排序/缓存线程 B 可能拿到“非 null 引用”但字段仍是默认值解决正确的发布方式final字段、静态初始化、volatile 引用、加锁发布等。7. 线上排障速查非常实用7.1 判断是“堆”还是“非堆/堆外”堆 OOMOutOfMemoryError: Java heap space元空间 OOMOutOfMemoryError: Metaspace直接内存 OOMOutOfMemoryError: Direct buffer memory线程创建失败unable to create new native thread7.2 常用工具链按“上手快”排序jcmd pid VM.flags/VM.system_propertiesjcmd pid GC.heap_info/GC.class_histogramjstat -gcutil pid 1sjmap -dump:formatb,fileheap.hprof pid大堆会卡顿慎用jstack pid线程死锁/阻塞/线程爆炸JFRJava Flight Recorder低开销、强烈建议7.3 一套“先不动代码”的定位流程看错误类型heap/metaspace/direct/native thread看 GC 日志是否频繁 Full GC、晋升失败、停顿是否异常拉一次类直方图class histogram是不是某类对象激增若怀疑泄漏dump heap → MAT / VisualVM 分析 dominator tree、引用链若怀疑堆外看进程 RSS 与堆大小差异、排查 direct buffer/Netty/ mmap8. 参数与实践建议别迷信“调大内存”先明确目标低延迟还是高吞吐先收集证据GC 日志 指标停顿、吞吐、分配速率、Old 占用趋势再做改变一次只改一组参数并记录效果容器环境要特别小心确认 JVM 是否正确识别 cgroup 限制关注“堆外 元空间 线程栈 代码缓存”总和避免 OOMKilled9. 面试/工作里经常被问的点快速复习堆、栈、方法区分别存什么为什么栈线程私有i为什么不是原子volatile 的语义是什么为什么不能保证counthappens-before 有哪些规则举例说明Metaspace OOM 常见原因如何避免动态类泄漏Direct Memory 为什么会把你“阴死”如何限制与观测10. 参考阅读建议《Java 虚拟机规范》运行时数据区章节JLSJava Language Specification关于内存模型章节OpenJDK/HotSpot 源码与 JEP了解不同 GC 的演进
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

高端个性化网站建设网站及系统建设维护

作为一名MapleStory游戏爱好者,你是否曾经梦想过亲手打造属于自己的游戏地图?🤔 当你面对复杂的WZ文件格式和繁琐的编辑流程时,是否感到无从下手?别担心,Harepacker-resurrected正是为你量身打造的专业级地…

张小明 2026/1/10 12:59:58 网站建设

网站销售系统怎么做百度推广开户需要多少钱

如何快速安装Boltz:生物分子结构预测的完整指南 【免费下载链接】boltz Official repository for the Boltz-1 biomolecular interaction model 项目地址: https://gitcode.com/GitHub_Trending/bo/boltz Boltz是一款先进的生物分子结构预测工具,…

张小明 2026/1/7 17:17:28 网站建设

怎样做科技小制作视频网站如何做实验室网站

百度网盘秒传工具终极使用手册:快速掌握文件转存技巧 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘下载速度慢而苦恼&a…

张小明 2025/12/31 22:03:42 网站建设

东营企业网站建设网站建设可行性分析

测试从业者面临的三大挑战漏洞滞后性:传统测试中安全环节后置,75%漏洞在投产前未被发现工具孤岛:SAST/DAST/IAST工具独立运行,扫描覆盖盲区达32%协作断层:开发/测试/安全团队需求理解偏差率超40%四维策略框架构建graph…

张小明 2026/1/8 15:12:57 网站建设

普宁17网站一起做淘宝韶关新闻最新消息

探索Linux系统中的图像与音频处理工具 图像管理与处理工具 在图像管理方面,Shotwell是一款实用的工具。利用标签搜索图像比添加标签更为便捷。例如,若想找出所有标记为“Europe”的图像,只需点击左侧面板中的“Europe”,相关图像就会在右侧面板显示。 除了Ubuntu自带的图…

张小明 2026/1/1 19:13:24 网站建设

网站提交入口链接视频剪辑教程自学网站

如何用外部SDRAM让STM32上的LVGL“飞”起来?你有没有遇到过这样的情况:在STM32上跑LVGL,界面稍微复杂一点,动画就开始卡顿?按钮一多就malloc失败?滑动列表像幻灯片一样一顿一顿的?别急&#xff…

张小明 2026/1/2 8:56:30 网站建设