关于JVM指针压缩性能的研究
关于JVM指针压缩性能的研究
摘要
JVM的内存对消最小是 8bytes
所以32G内存的情况下可以使用 32位的指针就可以了.
32位就是4G 在乘以最小的内存extent 8 bytes
的出来可以指向 32G的内存区域.
如果大于32G, 那么必须使用64位的指针.
理论上会导致非堆区的内存膨胀与性能劣化.
所以本文就想学习与研究一下指针压缩对jvm性能的影响.
工具
SPECJVM2008
注意安装之前总结过主要如下:
第一步安装
java -jar SPECjvm2008_1_01_setup.jar -i console
注意 需要选择 安装目录等. 以及遵守协议.
第二步简单使用
cd /SPECjvm2008/
验证是否可用
export JAVA_HOME=/some/path/to/java/
然后执行
./run-specjvm.sh startup.helloworld -ikv
测试方法
修改 ./run-specjvm.sh
主要是增加如下内从
指定内存. 不使用指针压缩
$JAVA_EXE $EXTRA_BOOTCLASSPATH_ARG $JAVA_OPTS -Xmx30G -Xms30G -XX:-UseCompressedClassPointers -jar SPECjvm2008.jar $*
指定内存. 使用指针压缩
$JAVA_EXE $EXTRA_BOOTCLASSPATH_ARG $JAVA_OPTS -Xmx30G -Xms30G -jar SPECjvm2008.jar $*
测试项目
可以讲测试项目放到list 里面进行循环处理
我这边主要是创建了两个list
startup 是测试单线程的
不带startup 的是测试多线程的
默认是CPU的核心数.
所以内容如下
startup的list 为:
startup.helloworld startup.compiler.compiler startup.compress startup.crypto.aes
startup.crypto.rsa startup.crypto.signverify startup.mpegaudio startup.scimark.fft
startup.scimark.lu startup.scimark.monte_carlo startup.scimark.sor
startup.scimark.sparse startup.serial startup.xml.transform startup.xml.validation
对应的测试命令为:
for i in `cat list.txt` ; do echo $i ; ./run-specjvm.sh $i -ikv > resultwithoutcompress/$i ; done
分析脚本和结果简述
grep -ir "Score on " |awk '{print $4}'
发现内存的影响比较小. 设置内存增加一倍, 比较小内存的影响不超过10%
只有编译的提升比较多
是否开启 内存指针压缩
在同内存的情况下, 开启内存指针有10%左右的性能提升.
测试结果为



关于JVM指针压缩性能的研究的更多相关文章
- 二维指针*(void **)的研究(uC/OS-II案例) 《转载》
uC/OS-II内存管理函数内最难理解的部分就是二维指针,本文以图文并茂的方式对二维指针进行了详细分析与讲解.看完本文,相信对C里面指针的概念又会有进一步的认识. 一.OSMemCreate( ) 函 ...
- JVM源码---教你傻瓜式编译openjdk7(JAVA虚拟机爱好者必看)
LZ经过一个星期断断续续的研究,终于成功的搞定了JDK的成功编译与调试.尽管网络上的教程也有不少,包括源码中也有自带的编译步骤说明,但真正自己动手的话,还是会遇到不少意料之外的错误. 为了方便各位猿友 ...
- 《深入理解C指针》
<深入理解C指针> 基本信息 原书名:Understanding and using C pointers 作者: (美)Richard Reese 译者: 陈晓亮 丛书名: 图灵程序设计 ...
- C语言07指针高级
01内存四区 接口封装和设计思想引导 接口封装设计思想引导 Sckclient客户端api模型设计 第一套api函数 #ifndef _SCK_CLINT_H_ #define _SCK_CLINT_ ...
- C++学习笔记1_ 指针.引用
1.引用的本质struct typeA{ int &a;}struct typeB{ int *a;}int main(void){ cout<<sizeof(struct typ ...
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- 利用FFmpeg玩转Android视频录制与压缩(二)<转>
转载出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个月,身边很多人的女 ...
- Android Jni 调用
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...
- 为什么Java有GC调优而没听说过有CLR的GC调优?
前言 在很多的场合我都遇到过一些群友提这样的一些问题: 为什么Java有GC调优而CLR没有听说过有GC调优呢? 到底是Java的JVM GC比较强还是C#使用的.NET CLR的GC比较强呢? 其实 ...
- Java学习笔记:2022年1月7日
Java学习笔记:2022年1月7日 摘要:今天的这篇笔记主要是通过讲解基本的JVM结构来理解Java中一些行为的运行机制,进而更加的深入理解Java的运行原理. 目录 Java学习笔记:2022年1 ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题
文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题 三.对于一个按升序排列的包含 n 个元素的有序数组 A 来说,HEAPSORT 的时间复杂度是多少?如果 A 是降序 ...
- nacos-config配置中心
依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-clou ...
- 一图看懂CodeArts Release三大特性
本文分享自华为云社区<一图看懂CodeArts Release三大特性,带你玩转发布管理服务>,作者:华为云PaaS服务小智. 华为云发布管理服务Codearts Release,是面向开 ...
- 你眼中的程序员 VS 程序员眼中的自己,是时候打破代沟了
摘要:修电脑?格子衫?脱发?程序员被误解了怎么办?如何一句话向父母说明白你的工作? 有人说,你们程序员工作赚钱真简单,电脑上按按键盘就行了,一点也不辛苦. 有人说,程序员不懂生活,就知道天天对着电脑. ...
- JS的深浅复制,原来如此!
摘要:之所以会出现深浅拷贝的问题,实质上是由于JS对基本类型和引用类型的处理不同. 本文分享自华为云社区<js的深浅复制,一看就明白>,作者: 鑫2020. 浅复制的意思 浅复制是仅仅对数 ...
- 查询速度最高提升50倍!火山引擎ByteHouse在广告投放领域实践分享
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 据QuestMobile报告显示,移动互联网已经进入了下半场,在使用人数和使用时长方面已经没有明显增长,互联 ...
- Linux 创建新用户
添加用户组[root@VipSoft ~]#groupadd admin 添加用户[root@VipSoft ~]#useradd jimmy -m -d /home/jimmy -g admin 修 ...
- MyBatis ORA-01465: 无效的十六进制数字
MyBatis 在插入 Oralce 时报:ORA-01465: 无效的十六进制数字 解决方法: # 插入或更新时 String -> BLOB字段:RAWTOHEX(#{字段名}) Strin ...
- Java 项目工程搭建 --创建子模块(Spring Initializr)
一下篇,常用 Java 项目工程搭建 --创建子模块(依赖父工程) 也不算常用,常用的是 ctrl+c.ctrl+v ,哈哈 Package要手动改下,生成的很丑 选能支持 Alibaba Cl ...
- C#9.0:Top-Level Programs
我们称之为顶级层序 用 C# 编写一个简单的程序需要大量的样板代码,引用,类.方法.结构体等: 1 class Program 2 { 3 static void Main(string[] args ...