如何在个人电脑用源码做网站空间查看网站

张小明 2026/3/2 14:48:21
如何在个人电脑用源码做网站,空间查看网站,电商网站建设方案100例,沧州网站建设申梦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进行投诉反馈,一经查实,立即删除!

阿里巴巴的电子商务网站建设苏州现代建设公司网站

你现在想弄清楚 Nor Flash 和广义上的 Flash 之间的关系与区别,我会先理清概念层级,再对比核心差异,结合 ESP32-S3 用的 16MB SPI Nor Flash 实例,让你明确两者的定位和实际应用场景。 1. 核心概念:Flash 是“大类”&a…

张小明 2026/1/18 2:50:37 网站建设

手机网站建站步骤论文网站建设设计方案格式

多进程脚本编写与控制 多进程脚本概述 在脚本编写中,使用多进程能实现比简单自动化更强大的功能。可以将多个程序连接起来,或者借助一个程序的功能来增强另一个程序的功能,而且能让运行脚本的人感觉就像在使用一个单独的程序。 spawn_id 变量详解 基本原理 :当执行 s…

张小明 2026/1/18 2:48:36 网站建设

文明网站的建设与管理几点思考wordpress邀请码插件

使用EmotiVoice打造定制化语音机器人全流程详解 在智能客服中听到千篇一律的“您好,请问有什么可以帮您?”时,你是否曾感到一丝冷漠?当虚拟偶像直播时用着毫无起伏的声音念台词,那份沉浸感是不是瞬间被打破&#xff1f…

张小明 2026/1/18 2:46:35 网站建设

餐饮网站网页设计代码wordpress陶哲轩

第一章:开源还是闭源?Open-AutoGLM部署成本差异竟高达70%?在大模型落地实践中,选择开源或闭源方案直接影响部署成本与运维复杂度。以 Open-AutoGLM 为例,其开源版本允许企业自主部署于本地GPU集群,而闭源AP…

张小明 2026/1/18 2:44:34 网站建设

沈阳设计网站公司哪家好电商平台推广

复杂分区布局下的 Ubuntu 根目录无损扩容实践:从引导参数调试到扇区移位 摘要 本文详细记录了在一块 1TB NVMe 固态硬盘(WD_BLACK SN770)上,解决 Ubuntu 根分区(/)空间不足问题的全过程。本次扩容的特殊性在…

张小明 2026/1/18 2:42:33 网站建设

济南营销型网站建设工作室文章博客媒体网站模板

ElectronBot桌面机器人开发实战指南:从入门到精通 【免费下载链接】ElectronBot 项目地址: https://gitcode.com/gh_mirrors/el/ElectronBot ElectronBot是一款基于STM32F405RGT6微控制器的智能桌面机器人,具备6自由度运动控制和圆形屏幕显示功能…

张小明 2026/1/18 2:40:31 网站建设