当前位置: 首页 > news >正文

说说JVM的常见问题

一、JVM内存结构

  1. JVM的内存模型(运行时数据区)

JVM运行时数据区包括:

  • 程序计数器:当前线程所执行的字节码的行号指示器。每个线程都有一个独立的程序计数器。

  • Java虚拟机栈:每个线程私有,生命周期与线程相同。每个方法执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法返回地址等。局部变量表存放编译期可知的基本数据类型、对象引用和returnAddress类型。

  • 本地方法栈:与虚拟机栈类似,但为Native方法服务。

  • Java堆:被所有线程共享,在虚拟机启动时创建,用于存放对象实例。是垃圾收集器管理的主要区域。

  • 方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。在HotSpot中,方法区也被称为“永久代”(JDK8之前)和“元空间”(JDK8及之后)。

  • 运行时常量池:方法区的一部分,用于存放编译期生成的各种字面量和符号引用。

2. Java堆的结构?什么是新生代和老年代?

Java堆是垃圾收集的主要区域,从分代回收的角度,分为新生代和老年代。

  • 新生代:新创建的对象首先放在新生代。新生代又分为Eden区和两个Survivor区(通常称为S0和S1,或者from和to)。大多数对象在Eden区中创建,当Eden区满时,触发Minor GC,将存活的对象移动到Survivor区。对象在Survivor区中经过多次GC后,年龄达到阈值(默认15)则进入老年代。

  • 老年代:存放长期存活的对象和大对象(比如大数组)。当老年代空间不足时,触发Major GC(或Full GC)。

  • 另外,还有一部分空间是永久代/元空间,但不在堆内,而是方法区的实现。

二、垃圾回收

http://www.gsyq.cn/news/1388753.html

相关文章:

  • 机器学习势函数揭秘Cu/TaN界面力学:原子掺杂如何突破性能瓶颈
  • Qt Creator里那个烦人的QML调试警告,到底要不要管?手把手教你三种关闭方法
  • Unity本地化实战:XUnity.AutoTranslator深度原理与工程落地
  • 虚幻5程序化植被阴影失效的3步修复方案
  • 从Go转向Rust迁移指南:靠自觉 vs. 靠编译器
  • OpenClaw技能安装失败排查指南:从网络到权限的完整解决方案
  • 钙钛矿太阳能电池工艺优化:环境变量耦合效应与可解释机器学习分析
  • 超高分子量聚乙烯板头部企业质量维度综合排行盘点 - 奔跑123
  • 戴尔G15散热控制终极指南:免费开源工具替代AWCC的完整解决方案
  • Magento扩展安全扫描实践:AI辅助静态分析发现XSS与SQL注入风险
  • AI代理成本控制:从预算失控到智能治理的工程实践
  • 大模型选型实战:GPT-4、Claude 3、Llama 3成本与性能深度评测
  • 构建AI代码质量层:从风险到实践的自动化质检体系
  • 机器学习集成方法在强引力透镜搜索中的性能评估与优化实践
  • AzurLaneAutoScript:解放双手的碧蓝航线智能助手
  • 机器学习模型集成策略在强引力透镜搜索中的性能优化研究
  • RePKG完全指南:3分钟解锁Wallpaper Engine壁纸资源宝库
  • Unity游戏开发启动 checklist:项目创建、资源管理与构建避坑指南
  • Unity手写轻量UI框架设计与实践
  • 基于Ollama与Whisper构建本地语音AI代理:从原理到实践
  • AWS CDK Python实战:从基础设施即代码到可审计的工程化交付
  • 干货指南:低压电缆选哪家?新疆畅峰线缆靠谱 - 工业品牌热点
  • Lenovo Legion Toolkit完整使用指南:拯救者笔记本终极控制方案
  • AI编程协作:从代码执行到意图对齐的范式转变
  • 前端技术债治理:从“代码屎山“到“AI驱动“的系统性破局指南
  • 语音交互系统工程实践:可控链路、低延迟与声学一致性
  • UE5蓝图执行机制:编译层、实例层与执行层深度解析
  • 探索Zotero-Style:重新定义文献管理的美学体验
  • 如何彻底解决Windows系统卡顿:开源优化工具的完整技术方案
  • ARMv8 AArch32 RAS扩展与ERXADDR2寄存器详解