宋红康老师JVM学习笔记-内存与垃圾回收篇-1. JVM与Java体系结构
本文主要讲述JVM体系结构、Java发展过程中的重大事件、各个厂商的JVM对比、JVM架构模型的特点等内容。
本文主要讲述JVM体系结构、Java发展过程中的重大事件、各个厂商的JVM对比、JVM架构模型的特点等内容。
直接内存概述
12.1 执行引擎概述
13.1 String的基本特性
14.1 什么是垃圾
15.1 标记阶段:引用计数算法
16.1 System.gc()的理解
17.1 GC分类与性能指标
本文主要介绍类加载子系统,其中包括类的加载过程:加载、链接、初始化;以及 ClassLoader 的分类和 ClassLoader 的双亲委派机制等内容。
运行时数据区(Runtime Data Areas)是指在程序在运行过程中,由Java 虚拟机(JVM)管理的各种内存空间。这些数据区域主要用于存储程序运行时所需的数据,包括程序的字节码、类信息、对象实例、方法等。在Java虚拟机规范中,主要的运行时数据区包括以下几个部分:**程序计数器(Program Counter)、Java虚拟机栈(JVM Stacks)、堆(Heap)、方法区(Method Area)、运行时常量池(Runtime Constant Pool)、本地方法栈(Native Method Stack)**。
JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息。CPU 只有把数据装载到寄存器才能够运行。
虚拟机栈是Java虚拟机为每个线程分配的内存区域,用于存储方法的局部变量、部分方法信息以及方法调用和返回的状态。每个方法在执行时都会创建一个栈帧,栈帧随着方法的调用和返回而入栈和出栈。栈的大小可以固定或动态扩展,栈的深度受限于具体的JVM实现。虚拟机栈是线程私有的,保证了线程执行过程中的数据独立性和安全性。
本地方法接口(Native Method Interface,JNI)是 Java 提供的一种机制,允许 Java 代码与本地(非 Java)代码进行交互。通过 JNI,Java 程序可以调用 C、C++ 等编写的本地代码,也可以让本地代码调用 Java 代码。JNI 提供了一组标准的接口和约定,用于在 Java 虚拟机中动态加载 和调用本地方法。这种能力使得 Java 在需要与操作系统、硬件或其他非 Java 代码交互的场景下更为灵活和强大,同时需要注意 JNI 使用时需要小心管理内存和确保跨语言调用的正确性。
- Java 虚拟机栈于管理 Java 方法的调用,而本地方法栈用于管理本地方法的调用。
Java虚拟机(JVM)堆是JVM内存模型的一部分,是用来存储对象实例和数组的内存区域。在Java应用程序运行时,所有的对象实例都在堆上分配。堆是由垃圾收集器管理的,这意味着当对象不再被引用时,垃圾收集器会自动回收这些对象占用的内存。本文的主要内容包括堆空间的内部结构、内存管理(分代)、对象的分配过程、逃逸分析、标量替换等内容。
10.1 对象的实例化
JVM学习,B站宋红康老师的视频,自己跟着手撸的代码及笔记,流程图全部自己又画了一遍。有学习需要的小伙伴可以收藏(Ctrl + D)下,持续更新中。。。。。
本文在整理时参考了以下几位大佬的笔记:
本文对JVM中的字节码指令做了详细的介绍,包括加载与存储指令、算数指令、对象创建与访问指令、方法调用与返回指令、操作数栈管理指令、控制转义指令等。
本文介绍了 Java 类加载过程的七个阶段,包括从 Class 文件到加载到内存中的类,到类卸载出内存位置,以及验证、准备、解析、创建、构造、初始化、反射等操作。还解释了类模型、类模板、类实例、类字段、类方法等概念,以及数组类的加载过程。
类加载器是 JVM 执行类加载机制的前提1. 它负责将 Class 信息的二进制数据流读入 JVM 内部,转换为与目标类对应的 java.lang.Class 对象实例,然后交给 Java 虚拟机进行链接、初始化等操作。ClassLoader 在整个装载阶段只影响类的加载,无法改变类的链接和初始化行为。至于类是否可以运行,由 Execution Engine 决定
尚硅谷Java研究院
1.1 大厂面试题
2.1 概述
3.1 工具概述
内存泄漏的理解与分析
MAT 支持一种类似于 SQL 的查询语言 0QL(Object Query Language)。0QL 使用类 SQL 语法,可以在堆中进行对象的查找和筛选。