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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip
- (源码)基于Java的DVD管理系统.zip