聊聊jvm的CompressedClassSpace
时间: 2023-07-19 14:54:22 浏览: 60
JVM的CompressedClassSpace是JVM用于存储类元数据的一块内存区域。在JDK 8之前,Java虚拟机中类元数据的存储是非常浪费空间的,因为类元数据中包含了很多的指针和引用,而这些指针和引用都需要占用4个字节或8个字节的空间,这会导致类元数据占用的空间非常大。
为了解决这个问题,JDK 8引入了CompressedClassSpace来优化类元数据的存储。它采用了一种称为“指针压缩”的技术,将原本占用4个字节或8个字节的指针压缩成占用1个字节或2个字节的指针,从而大大减少了类元数据占用的空间。这样一来,可以将更多的类元数据存储在CompressedClassSpace中,从而减少了堆内存的使用,提高了应用程序的性能。
需要注意的是,CompressedClassSpace只能在64位的JVM中使用,因为32位的JVM地址空间只有4GB,无法满足指针压缩的需求。同时,CompressedClassSpace的大小是有限制的,它的最大大小取决于操作系统和JVM的配置。在默认情况下,CompressedClassSpace的最大大小是1GB,但是可以通过JVM参数进行调整。
相关问题
java jvm 的class 的结构
Java虚拟机中的Class结构主要包含以下几个部分:
1. 魔数(Magic Number):一个固定的标识,用于标识文件是否为Java Class文件,固定值为0xCAFEBABE。
2. 版本号(Version):Class文件的版本号,包括一个主版本号和一个次版本号。
3. 常量池(Constant Pool):存储Class文件中所有常量的信息,包括数字、字符串、类和接口等。
4. 访问标志(Access Flags):用于表示Class或者接口的访问修饰符,例如public、private、abstract等。
5. 类索引(This Class):指向当前Class或者接口的全限定名。
6. 父类索引(Super Class):指向父类的全限定名。
7. 接口索引集合(Interfaces):包含当前Class直接实现的接口的全限定名。
8. 字段表集合(Fields):包含当前Class中的所有字段信息,包括访问修饰符、名称、类型、属性等。
9. 方法表集合(Methods):包含当前Class中的所有方法信息,包括访问修饰符、名称、参数、返回值、属性等。
10. 属性表集合(Attributes):包含当前Class中的所有属性信息,包括Code属性、Exceptions属性等等。
JVM Class Count TOP
我不确定你的问题是什么,但如果你想知道JVM中加载的类的数量排名,可以通过以下命令来查看:
1. 打开JVisualVM,选择本地应用程序,并查看“类”选项卡,即可查看当前JVM中加载的类的数量。
2. 在命令行中运行以下命令:
```
$ jmap -clstats <pid>
```
其中,`<pid>`是Java进程的进程ID。该命令将显示当前JVM中加载的类的数量、数量排名以及每个类所占的空间等信息。