首页 > 其他分享 >关于JVM指针压缩性能的研究

关于JVM指针压缩性能的研究

时间:2023-05-19 11:23:05浏览次数:39  
标签:JAVA startup 压缩 jar 内存 JVM scimark 指针

关于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%左右的性能提升. 


测试结果为

image



标签:JAVA,startup,压缩,jar,内存,JVM,scimark,指针
From: https://www.cnblogs.com/jinanxiaolaohu/p/17412398.html

相关文章

  • JVM(二)类加载器子系统和类加载过程
    目录类加载器子系统和类加载过程1简介2类的加载过程2.1Loading加载2.2link链接2.3初始化initialization:3类加载器的分类3.1引导类加载器3.2扩展类加载器3.3应用程序、系统类加载器3.4用户自定义加载器4ClassLoader4.1获取ClassLoader的方式5双亲委派机制工作原理双......
  • JVM(一)JVM与Java体系结构
    目录JVM与Java体系结构1前置知识字节码与混合编程虚拟机Java虚拟机JavaVirtualMachineJVM的特点Java虚拟机的作用2JVM的整体结构Java代码的执行流程JVM的架构模型JVM的生命周期虚拟机的种类ClassicVMExactVM☆HotSpotJRockitJ9KVMCDC/CLDCHotSpotAzulVMLiquidVM3内存......
  • JVM(四)虚拟机栈(一)栈帧结构:局部变量表与操作数栈
    JVM(四)虚拟机栈(一)栈帧结构:局部变量表与操作数栈1虚拟机栈1.1简介虚拟机栈出现的背景:由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台的CPU架构不同,所以不能基于寄存器。这样做的优点是跨平台,指令集更小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。......
  • JVM(四)虚拟机栈(二)栈帧结构:动态链接、方法返回地址与附加信息
    JVM(三)虚拟机栈(二)栈帧结构:动态链接、方法返回地址与附加信息1动态链接技术每一个栈帧,都包含着一个指向运行时常量池中该指针所属方法的引用,即方法区中的方法地址,包含该引用的目的就是为了支持当前方法能够实现动态链接。所以动态链接又称为运行时常量池中的方法引用在java源......
  • JVM(三)运行时数据区概述及线程
    目录运行时数据区概述及线程简介线程间共享的说明JVM中的线程说明1程序寄存器ProgramCounterRegister为什么使用PC寄存器记录字节码指令地址?(为什么使用PC寄存器记录当前线程的执行地址)为什么程序计数器被设计成线程私有的运行时数据区概述及线程简介内存是硬盘和CPU的中间......
  • JVM(五)本地方法接口
    JVM(五)本地方法接口和本地方法栈1本地方法一个NativeMethod就是一个Java调用非Java代码的接口。在定义本地方法的时候,不提供实现体标识符native能够和除了abstract的java标识符连用publicclassNativeTest{ publicnativevoidmethod1()throwException; .........
  • JVM(四)虚拟机栈(三)虚拟机栈面试题
    JVM(四)虚拟机栈(三)虚拟机栈面试题1举例栈溢出的情况?当方法调用不停将栈帧压入虚拟机栈导致栈内空间不足而出现StackOverFlowError即是出现了栈溢出可以通过-Xss设置栈的大小,栈的大小可以是固定的也可以是动态变化的,如果固定且超出设定值则就会出现栈溢出;如果是动态变化的,栈空......
  • 指针与constexpr
    一、常量表达式:是指值不会改变并且在编译过程就能得到的计算结果的表达式。定义常量表达式变量:constexpr变量类型变量名;例如:constexprintmf=20;/////20是常量表达式constexprintlimit=mf+1;/////mf+1是常量表达式constexprintsz=size();//////错误:size()只有到运行时才......
  • Kali下压缩解压缩命令大全zip,tar,tar.gz,tar.bz2(转)
    转自http://blog.csdn.net/yangjin_unique/article/details/7824852tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzipFileName.gz解压2:gzip-dFileName.gz压缩:gzipFileName.tar.gz解......
  • C++ 智能指针
    在介绍智能指针之前,先来看原始指针的一些不便之处:它的声明不能指示所指到底是单个对象还是数组。它的声明没有告诉你用完后是否应该销毁它,即指针是否拥有所指之物。如果你决定你应该销毁指针所指对象,没人告诉你该用delete还是其他析构机制(比如将指针传给专门的销毁函数)......