JVM调优中,压缩类空间(Compressed Class space)怎样理解,有多重要
在Java8以前,有一个选项是UseCompressedOops。所谓OOPS是指“ordinary object pointers“,就是原始指针。Java Runtime可以用这个指针直接访问指针对应的内存,做相应的操作(比如发起GC时做copy and sweep)。
那么Compressed是啥意思?64bit的JVM出现后,OOPS的尺寸也变成了64bit,比之前的大了一倍。这会引入性能损耗——占的内存double了,并且同尺寸的CPU Cache要少存一倍的OOPS。
于是就有了UseCompressedOops这个选项。打开后,OOPS变成了32bit。但32bit的base是8,所以能引用的空间是32GB——这远大于目前经常给jvm进程内存分配的空间。
一般建议不要给JVM太大的内存,因为Heap太大,GC停顿实在是太久了。所以很多开发者喜欢在大内存机器上开多个JVM进程,每个给比如最大8G以下的内存。从JDK6_u23开始UseCompressedOops被默认打开了。因此既能享受64bit带来的好处,又避免了64bit带来的性能损耗。当然,如果你有机会使用超过32G的堆内存,记得把这个选项关了。
到了Java8,永久代被干掉了,有了“meta space”的概念,存储jvm中的元数据,包括byte code,class等信息。Java8在UseCompressedOops之外,额外增加了一个新选项叫做UseCompressedClassPointer。这个选项打开后,class信息中的指针也用32bit的Compressed版本。而这些指针指向的空间被称作“Compressed Class Space”。默认大小是1G,但可以通过“CompressedClassSpaceSize”调整。
如果你的java程序引用了太多的包,有可能会造成这个空间不够用,于是会看到java.lang.OutOfMemoryError: Compressed class space 【JVM调优中,压缩类空间(Compressed Class space)怎样理解,有多重要】 这时,一般调大CompreseedClassSpaceSize就可以了。
推荐阅读
- 张春成提供的压缩技术咋样
- 咋才能将视频文件压缩到最小
- 丰田|根本不给对手机会,丰田“亚洲狮”全球首发,高压缩比,定位高于卡罗拉!
- 欧阳谈汽车|英菲尼迪QX60新一代来了!双色车身,搭2.0T可变压缩比引擎
- 压缩机|市区新港花苑:油坊压缩机装门前噪声扰民何时整改
- 怎样打开初音未来(V3 Original)软件下载、打开压缩包后出现的vvd,ddi,ddb文件
- 车图腾|热效率达43%,压缩比超15.5!解密比亚迪DM-i超级混动
- 为啥普通压缩软件压缩率非常低,压缩前和压缩后文件大小几乎没有区别,那这样的压缩有啥意义
- 为啥腾讯空间上传的图片都压缩那么厉害,同样的照片上传到微博就明显清晰很多
- 小帅侃车|新一代奇骏曝光,或提供2.0T可变压缩比发动机,预计明年中旬下线
