小研究 - Java虚拟机性能及关键技术分析

利用specJVM98和Java Grande Forum Benchmark suite Benchmark集合对SJVM、IntelORP,Kaffe3种Java虚拟机进行系统测试。在对测试结果进行系统分析的基础上,比较了不同JVM实现对性能的影响和JVM中关键模块对JVM性能的影响,并提出了提高JVM性能的一些展望。

目录

1  Java虚拟机的关键技术

1.1  字节码执行方式

1.2  自动内存管理

2 JVM 性能的分析和比较

2.1 JVM 的选择

2.2 JVM 性能测试

2.3 JVM 性能的分析和比较

3  结语


Java语言的平台无关性、安全性、自动内存管理等特性,使Java语言得到广泛的应用。Java虚拟机JVM)是 Java平台的核心,JVM读入Java 类文件并执行类文件中的字节码。在一个平台只要有1 个Java虚拟机就可执行Java程序,实现Java语言的平台无关性。Java的字节码中无影响系统安全的指令,同时,JVM读入类文件时,需要预验证类文件,这两点保证了Java语言的安全性。自动内存管理减轻了Java程序员的负担,提高了应用程序的可靠性。但这些特性,使Java的性能受到了一定的影响。字节码执行方式(Execute Engine)和自动内存管理是影响 Java 虚拟机性能的关键模块。本文通过比较几种有代表性的 Java 虚拟机的实现,分析了JVM 中的这2 个关键技术。

1  Java虚拟机的关键技术

1.1  字节码执行方式

最早的Java虚拟机采用的是解释(Interpreter)执行的方式,这种方式效率极低,但JVM的可移植性较好。目前主流的 Java 虚拟机基本采用即时 JIT,Just—In-Time) 编译的方法执行字节码,即将 Java的字节码动态编译为本地的机器码,效率较高,好的JIT 编译效果可以接近 C 语言静态编译的效果。但JIT在执行任何一个方法时,都需要先将该方法编译为本地代码,需要额外的内存存放编译后的本地代码。对于程序中执行频度较低的方法,由于增加了编译的时间,其效率不如解释执行的情况。衡量一个JIT好坏的标准包括编译的代码质量、编译的代码大小以及编译的时间这3个方面。自适应优化(Adap-tive Optimization)是字节码执行的第3 种方式,其实质是混合执行(Mixed code execute)。自适应优化在第1次调用一个方法时,先采用解释执行的方式,当这个方法的调用达到一定的频度而成为“热点”(Hot spot 的方法后,将该方法编译为本地代码,以后对该方法的调用,直接执行编译后的本地代码。

1.2  自动内存管理

自动内存管理也称为垃圾收集(GC,Garbage Collection) ,其作用是自动回收无用单元的内存空间,释放内存的工作由Java虚拟机自动管理,减轻了应用程序员的负担,避免了Java应用程序的内存泄漏。垃圾收集算法的主要评价标准为吞吐量(Throughput)和停顿时间(Pause time) 2个方面。吞吐量指在程序运行中,非垃圾收集的时间与整个应用程序运行时间的比值,比值越高,垃圾收集算法的整体效率越高。

2 JVM 性能的分析和比较

2.1 JVM 的选择

在本测试中,选择了3 个有代表性的虚拟机实现作为研究的对象。

1) Sun Hotspot Client VM 1.4.1 (SJVM) 【1.是Sun公司提供的针对J2SE平台的虚拟机,采用了自适应优化的字节码执行方式、基于代(Generation)的垃圾收集机制、标记-清除(Mark-Sweep)算法和拷贝算法结合的算法。

2) Intel Open Runtime Platform 1.0.10 (Intel ORP 2.是Intel公司提供的Java 虚拟机,提供了针对IA32架构优化的JIT编译器,采用增量式的Train垃圾收集算法。

3)Kaffe 1.0.73.是开放源代码的Java虚拟机实现,它支持的平台较多,垃圾收集机制采用了不分代的保守的标记一清除算法,并提供了 JIT 的编译器。

2.2 JVM 性能测试

通过Benchmark集合的测试,能够有效的比较和分析不同JVM实现对性能的影响以及JVM中关键模块对JVM性能的影响。在本测试中,测试用的Benchmark集合为specJVM98【4】和Java Grande Forum Benchmark suite5.specJVM98采用的是接近真实的应用程序,主要包括Db、Compress、Jess、Javac、Mep-gaudio、Mtrt、Jack7个应用程序。Java Grande Forum Benchmark (以下简称JGF)包括3个部分的测试,第1部分为基本的底层操作,包括算术、赋值、方法调用、异常处理等;第2部分为核心的操作,包括加密、堆排序、矩阵相乘等算法;第3部分为大规模的应用程序,包括了Alpha-beta剪枝搜索、RayTracer等算法。本测试采用的操作系统为Red Hat Linux 7.3.硬件平台为AMD Athlon 1700+,内存256M。图1为specJVM98的测试结果,图2 至图4为JGF3个部分的测试结果。

2.3 JVM 性能的分析和比较

在Java虚拟机中影响性能的模块主要是即时编译和垃圾收集这两个模块。即时编译模块的性能包括编译时间和编译后代码质量两方面。垃圾收集模块主要从吞吐量和停顿时间2 个方面来衡量。

从图1可以看出,Kaffe虚拟机的性能较差,除了第一项测试compress接近SJVM和Intel ORP的性能外,其它测试中的性能表现低于另2个虚拟机的一半。Intel ORP在Compress, Mepgaudio2项测试中要略高于SJVM,而SJVM的性能在其他测试中表现最好。因此,从specJVM98的测试结果来看,SJVM的虚拟机表现最好,Intel ORP的性能较接近SJVM, Kaffe的性能与这两者间有一定的差距。

从图2、图3、图4可以看出:对于JGF基本底层和核心部分的测试,Intel ORP和SJVM的性能相差不大,Kaffe 的性能都低于前两者;对于大规模应用程序的测试,SJVM 的性能远好于 Intel ORP 和Kaffe,而Intel ORP的性能好于Kaffe,这个程序的详细运行结果见表1。

从表1可以看出:Kaffe 的 GC 时间为Intel ORP 的4.79 倍,非GC (大部分为JIT) 时间为Intel ORP的27.87%,非GC时间占整个运行时间的6.40%; Kaffe与Intel ORP相比,大部分的时间花费在JIT编译上; Intel ORP的GC时间为SJVM的25.77倍,非GC时间为SJVM的1.26倍;GC时间占整个运行时间的45.95%。

从以上分析可以看出:

1) SJVM的整体性能是最好的,大部分的性能高于Kaffe和Intel ORP,尤其是在JGF大规模应用程序的测试部分,它的性能远远高于Kaffe和Intel ORP。这是由于字节码执行方式采用了自适应优化的算法,只编译最常用的“热点”方法,同时编译的代码质量较高。

2) SJVM垃圾收集机制较好,也是其性能高于其它两个JVM的关键原因。Intel ORP的即时编译较好,接近SJVM采用的自适应优化的算法,但垃圾收集表现较差,在测试中,一些Benchmark的程序未能正确运行,其语言支持不好。

3) Kaffe的性能表现比较差,主要原因是由于即时编译较差,同时垃圾收集机制的算法也较粗糙。

3  结语

JIT 编译和垃圾收集模块是 JVM 中影响性能的关键模块。JIT 编译的实现与体系结构的关系密切,实现时应充分考虑体系结构的影响,针对目标平台优化。垃圾收集机制的平台相关性较小,实现垃圾收集时,考虑较多的是算法上的提高。当然,不同平台上的内存管理机制还是有差别的,如不同平台上实现虚拟内存的方式、实现cache的方式都有可能不同,这也是提高一个特定平台上垃圾收集机制时需要考虑的因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/106437.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单shell脚本的编写

shell脚本就是将命令写入文本中,文本可以被执行。 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序&#xff0c…

【Android】 No matching variant of com.android.tools.build:gradle:[版本号] was found

项目报错 No matching variant of com.android.tools.build:gradle:8.1.1 was found. The consumer was configured to find a library for use during runtime, compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute …

PlantUML文本绘制类图

记录下文本绘制类图的语法 参考 https://juejin.cn/post/6844903731293585421 类的UML表示 使用UML表示一个类,主要由三部分组成。类名、属性、方法。其中属性和方法的访问修饰符用 - 、# 、 表示 private、protected、public。 如图所示,表示A类有一个…

【力扣】59. 螺旋矩阵 II <模拟>

【力扣】59. 螺旋矩阵 II 给你一个正整数 n n n ,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n n n n nn 正方形矩阵 m a t r i x matrix matrix 。 示例 1: 输入:n 3 输出:[[1,…

[C++ 网络协议] 套接字的多种可选项

目录 1. 套接字的可选项 2. 获取/设置套接字可选项 2.1 getsockopt函数(获取套接字可选项) 2.2 setsockopt函数(设置套接字可选项) 3. 常用套接字可选项 3.1 SOL_SOCKET协议层的SO_TYPE可选项 3.2 SOL_SOCKET协议层的SO_SN…

Qt6和Rust结合构建桌面应用

桌面应用程序是原生的、快速的、安全的,并提供Web应用程序无法比拟的体验。 Rust 是一种低级静态类型多范式编程语言,专注于安全性和性能,解决了 C/C 长期以来一直在努力解决的问题,例如内存错误和构建并发程序。 在桌面应用程序开…

AI + Milvus:将时尚应用搭建进行到底

在上一篇文章中,我们学习了如何利用人工智能技术(例如开源 AI 向量数据库 Milvus 和 Hugging Face 模型)寻找与自己穿搭风格相似的明星。在这篇文章中,我们将进一步介绍如何通过对上篇文章中的项目代码稍作修改,获得更…

Oracle数据库快速入门

前言: 我想现在很多人的入门数据库都是mysql,但是由于工作中会接触到Oracle数据库,如果你有MySQL的基础的话,这篇文章能让你很快掌握Oracle。 目录 1.体系结构 2.创建用户和表空间 2.1.创建表空间 2.2.创建用户 3.数据类型…

机器学习基础11-算法比较(基于印第安糖尿病Pima Indians 数据集)

比较不同算法的准确度,选择合适的算法,在处理机器学习的问题时是非常重要的。本节将介绍一种模式,在scikit-learn中可以利用它比较不同的算法,并选择合适的算法。你可以将这种模式作为自己的模板,来处理机器学习的问题…

微服务流程引擎:简单又灵活,实现流程全生命周期管理!

伴随着日益激烈的市场竞争,传统的办公操作已经无法满足发展需要了。如果采用微服务流程引擎加油助力,就可以帮助企业更好地管理数据资源,高效做好各种表单制作,实现高效率办公。流辰信息以市场为导向,用心钻研低代码技…

天翼物联、汕头电信与汕头大学共建新一代信息技术与数字创新(物联网)联合实验室

近日,在工业和信息化部和广东省人民政府共同主办的2023中国数字经济创新发展大会上,天翼物联、汕头电信与汕头大学共建“新一代信息技术与数字创新(物联网)”联合实验室签约仪式举行。汕头大学校长郝志峰、中国电信广东公司总经理…

[MyBatis系列④]核心配置文件

目录 1、简介 2、DTD 3、typeHandlers 3.1、默认类型处理器 3.2、自定义类型处理器 4、plugins ⭐MyBatis系列①:增删改查 ⭐MyBatis系列②:两种Dao开发方式 ⭐MyBatis系列③:动态SQL 1、简介 MyBatis的核心配置文件(通常命…

3D WEB轻量化引擎HOOPS产品助力NAPA打造船舶设计软件平台

NAPA(Naval Architectural PAckage,船舶建筑包),来自芬兰的船舶设计软件供应商,致力于提供世界领先的船舶设计、安全及运营的解决方案和数据分析服务。NAPA拥有超过30年的船舶设计经验,年营业额超过2560万欧…

Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

一、简介 Rspack CLI 官方文档。 rspack.config.js 官方文档。 二、创建 vue 项目 创建项目(文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式,根据需求进行选择) # npm 方式 $ npm create rspacklatest# yarn 方式 $ yarn create…

Linux 终端命令之文件目录操作,对比Dos相关命令

目录 前言 基础命令(文件目录相关的) cd命令 【英文帮助】 【对应Dos命令】 pwd命令 【英文帮助】 【对应Dos命令】 ls命令 【英文帮助】 【对应Dos命令】 tree命令 【英文帮助】 【对应Dos命令】 mkdir命令 【英文帮助】 【对应Dos命令…

718. 最长重复子数组

718. 最长重复子数组 原题链接:完成情况:题解:方法一:动态规划方法二:滑动窗口方法三:二分查找 哈希 原题链接: 718. 最长重复子数组 https://leetcode.cn/problems/maximum-length-of-repe…

二甲医院信息管理系统源码 his系统源码 java+Angular+JavaScript

云HIS系统采用SaaS软件应用服务模式,提供软件应用服务多租户机制,实现一中心部署多机构使用。主要包含收费计费、药品管理、门诊医生工作站、住院医生工作站、护士工作站、数据统计、电子病历、医保接口等功能,能够满足医院及诊所日常业务开展…

人力资源小程序的设计方案与实现

随着互联网的发展,人才招聘已经成为许多企业的一项重要任务。为了提高招聘效率和便利求职者,许多企业开始采用小程序作为招聘平台。本文将为大家介绍一个搭建本地人才招聘网小程序的实用指南。 首先,我们需要登录【乔拓云】制作平台&#xff…

GNU-gcc编译选项-1

include目录 -I ,比如: -I. -I ./Platform/include -I ./Platform/include/prototypes -I ./tpm/include -I ./tpm/include/prototypes -I ./Simulator/include -I ./Simulator/include/prototypes 编译选项 在GCC编译器中,-D是一个编译选项&…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v7.0版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp,服务端基于Netty编写。 工程…