jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理内存。在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这部分被元空间(Metaspace)取代。 - **运行时常量池**:是方法区的一部分,存放编译器生成的各种符号引用,包括类和方法的元数据。 - **虚拟机栈**:每个方法执行时创建的栈帧,用于存储局部变量、操作数栈和方法返回信息。栈帧的生命周期与方法同步,线程私有。 - **本地方法栈**:与虚拟机栈相似,但服务于本地(Native)方法。 - **堆**:所有线程共享,存储对象实例和数组。堆被分为新生代和老年代,新生代用于短期对象,老年代用于长期存活对象。新生代进一步分为Eden区和两个Survivor区。 - **程序计数器**:记录当前线程执行的字节码行号,用于控制程序的流程。 2. **垃圾收集算法** - **跟踪收集器**:从GC Roots开始遍历对象,如果对象无法从GC Roots到达,视为可回收。常见的跟踪收集器有串行收集器、并行收集器和并发收集器。 3. **类加载机制** - 类加载过程包括加载、验证、准备、解析和初始化五个阶段。加载是将类的二进制数据读取到内存中;验证确保类的信息符合JVM规范;准备阶段为类的静态变量分配内存并初始化为默认值;解析将符号引用转换为直接引用;初始化执行类的初始化方法。 4. **内存溢出和调整** - 堆内存的大小可以通过-Xms和-Xmx参数设置,-Xmn用于设定新生代大小。JVM会根据内存使用情况动态调整堆大小,通过-XX:MinHeapFreeRation和-XX:MaxHeapFreeRation设定比例。 - 直接内存(Direct Memory)不是JVM内存的一部分,但通过NIO可以使用,不计入堆内存计算。 了解这些概念有助于优化Java应用性能,减少内存泄漏和提高程序效率。在实际开发中,理解JVM的工作原理对于解决内存问题、选择合适的垃圾收集器和调整内存配置都具有重要意义。
剩余17页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G SRM815模组原理框图.jpg
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无刷电机 提供源码,原理图
- Matlab Simulink#直驱永磁风电机组并网仿真模型 基于永磁直驱式风机并网仿真模型 采用背靠背双PWM变流器,先整流,再逆变 不仅实现电机侧的有功、无功功率的解耦控制和转速调节,而且能实
- 157389节奏盒子地狱模式第三阶段7.apk
- 操作系统实验ucore lab3