跳到主要内容

JVM上篇:内存与垃圾回收篇

📄️ 3. 运行时数据区概述及线程

运行时数据区(Runtime Data Areas)是指在程序在运行过程中,由Java虚拟机(JVM)管理的各种内存空间。这些数据区域主要用于存储程序运行时所需的数据,包括程序的字节码、类信息、对象实例、方法等。在Java虚拟机规范中,主要的运行时数据区包括以下几个部分:**程序计数器(Program Counter)、Java虚拟机栈(JVM Stacks)、堆(Heap)、方法区(Method Area)、运行时常量池(Runtime Constant Pool)、本地方法栈(Native Method Stack)**。

📄️ 6. 本地方法接口

本地方法接口(Native Method Interface,JNI)是 Java 提供的一种机制,允许 Java 代码与本地(非 Java)代码进行交互。通过 JNI,Java 程序可以调用 C、C++ 等编写的本地代码,也可以让本地代码调用 Java 代码。JNI 提供了一组标准的接口和约定,用于在 Java 虚拟机中动态加载和调用本地方法。这种能力使得 Java 在需要与操作系统、硬件或其他非 Java 代码交互的场景下更为灵活和强大,同时需要注意 JNI 使用时需要小心管理内存和确保跨语言调用的正确性。

📄️ 9. 方法区

JVM的方法区是Java虚拟机中用于存储类元数据的特殊内存区域。在Java 8之前,方法区通常通过永久代(PermGen)实现,但在Java 8及之后的版本中,它被元空间(Metaspace)所取代,这一改革是为了解决原有永久代大小固定的问题,并且将方法区的存储位置从Java堆移动到本地内存。本文主要介绍方法区的结构、方法区内存大小的设置、方法区的垃圾回收以及常量池等内容。

笔记

3~10:主要为运行时数据区

13:StringTable应对属于运行时数据区,但是因为面试的时候经常问,所以单独成章,单独讲解一下。

13~16:主要是垃圾回收相关内容

相关资料

这部分对应虚拟机规范中的第二部分:

其他官方资料