一、简介
JVM会加载类到内存中,所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息,所以JVM会对内存区域进行划分:

JDK1.8及以后,上图中的方法区变成了Metaspace——元数据区。
我们本章的目的,就是介绍JVM中各块内存区域的功能,其中都是存放的哪些java对象信息。
二、方法区
方法区只存在于JDK1.8以前的版本,主要是存储从”.class“文件里加载进来的类,包括 类的名称 、 方法信息 、 字段信息 、 静态变量 、 常量 以及 编译器编译后的代码 等。从JDK1.8开始,这块区域的名字改成了元数据区(Metaspace),元数据区直接使用本地内存。
默认情况下,元数据区会根据使用情况动态调整,避免了在JDK1.8以前由于加载类过多从而出现 java.lang.OutOfMemoryError: PermGen。但也不能无限扩展,因此可以使用 -XX:MaxMetaspaceSize来控制最大内存。
以上一章的示例来看,Kafka.class和ReplicaManager.class加载到JVM后,会放到方法区中:
public class Kafka {
public static
深入解析JavaJVM内存区域:类加载、对象存储与执行逻辑

最低0.47元/天 解锁文章
630

被折叠的 条评论
为什么被折叠?



