java监控数据库性能_Java:GraalVM数据库流性能

java监控数据库性能

GraalVM是JVM块的新成员。 它是一个开源虚拟机,能够同时运行多种编程语言,例如Java,Rust和JavaScript。 GraalVM还具有一个新的内部代码优化器管道,与某些条件下的其他JVM相比,它可以显着提高性能。 了解如何获得GraalVM的好处并无需修改代码即可更快地执行代码。

GraalVM数据库

什么是GraalVM?

以前的JVM,例如Oracle JVM和OpenJDK JVM(均称为“ HotSpot”),已经存在了很长时间。 随着时间的推移,它们已经有了很大的发展,并且在过去的几十年中,与Java 1.0 JVM相比,我们看到了性能飞速增长。 JVM的重大改进包括即时编译(JIT),C2编译器,转义分析等,这些都为这一积极的发展做出了贡献。 但是,与所有技术一样,它们将在某个时候开始达到平稳状态。

GraalVM是一个崭新的开始,由此从头开始开发新的内部架构。 特别是,已对称为Gaal的JIT编译器进行了重新设计。 毫不奇怪,就像所有其他GraalVM组件一样,JIT编译器本身是用Java编写的。 事实证明,与某些现有的JVM相比,Graal有时能够更好地优化代码。 特别是,某些Stream类型似乎受益于在Graal下运行。

数据库流性能

有许多方法可以编写Java流。 最明显的方法是使用内置的Java函数Stream::ofCollection::stream方法之一。 但是,这些方法要求Stream中的元素以Java对象的形式先验存在。 这意味着编译器无法在大多数情况下优化它们。

因此,我选择使用基于流的ORM工具Speedment。 该工具与一项技术结合使用,该技术可将数据库内容提取到JVM内存中的快照中,并直接从RAM中创建Java流。 因此,数据库表是堆外存储的,从而有可能避免创建Java对象。 因为Graal具有改进的性能优化管道,所以它可以更好地优化临时中间流对象。 从理论上讲,Speedment和Graal将是一个完美的选择。 因此,我非常渴望测试
在GraalVM下而不是在HotSpot下运行时,Speedement的极端性能已经受到影响。

以下Speedment数据库流用于测试性能。 在我的上一篇文章中可以找到更多关于这些流及其工作方式的信息,您可以在这里找到。

private static final Predicate RATING_EQUALS_PG_13 =Film.RATING.equal(GeneratedFilm.Rating.PG13);private static final Comparator LENGTH_DESCENDING = Film.LENGTH.reversed();@Benchmark
public long filterAndCount() {return films.stream().filter(RATING_EQUALS_PG_13).count();
}@Benchmark
public IntSummaryStatistics Complex() {return films.stream().sorted(LENGTH_DESCENDING).skip(745).limit(5).mapToInt(Film.RENTAL_DURATION.asInt()).summaryStatistics();
}

分别在GraalVM和HotSpot下运行时获得以下JMH输出:

Graal:
Benchmark              Mode  Cnt         Score        Error  Units
Bench.Complex         thrpt    5   8453285.715 ± 383634.200  ops/s
Bench.filterAndCount  thrpt    5  29755350.558 ± 674240.743  ops/sHotSpot:
Benchmark              Mode  Cnt         Score        Error  Units
Bench.Complex         thrpt    5   5334041.755 ± 176368.317  ops/s
Bench.filterAndCount  thrpt    5  20809826.960 ± 963757.357  ops/s

拥有4个CPU内核的笔记本电脑上的GraalVM / Speedment能够每秒产生和消耗超过3000万个数据库流,这真是令人惊讶。 想象一下在具有24或32个CPU内核的服务器级节点上的性能。

这是它在图表中的外观(越高越好):

GraalVM数据库

普通流性能

初始测试显示了针对不同JVM的内置Java流(如Stream.of(“A”, “B”, “C”)List::stream Stream.of(“A”, “B”, “C”)相对性能数据各不相同,这些List::stream了各种操作。 我希望一旦GraalVM成熟,这些流类型也将全面提高性能。 也许我会在以后的文章中介绍。

建立

以下JMH设置用于GraalVM和HotSpot:

# Detecting actual CPU count: 8 detected
# JMH version: 1.21
# VM version: JDK 1.8.0_172, GraalVM 1.0.0-rc6, 25.71-b01-internal-jvmci-0.48
# *** WARNING: JMH support for this VM is experimental. Be extra careful with the produced data.
# VM invoker: /Applications/graalvm-ce-1.0.0-rc6/Contents/Home/jre/bin/java
# VM options: -Dfile.encoding=UTF-8
# Warmup: 5 iterations, 10 s each
# Measurement: 5 iterations, 10 s each
# Timeout: 10 min per iteration
# Threads: 8 threads, will synchronize iterations
# Benchmark mode: Throughput, ops/time# Detecting actual CPU count: 8 detected
# JMH version: 1.21
# VM version: JDK 1.8.0_171, Java HotSpot(TM) 64-Bit Server VM, 25.171-b11
# VM invoker: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/bin/java
# VM options: -Dfile.encoding=UTF-8
# Warmup: 5 iterations, 10 s each
# Measurement: 5 iterations, 10 s each
# Timeout: 10 min per iteration
# Threads: 8 threads, will synchronize iterations
# Benchmark mode: Throughput, ops/time

上面的测试是在MacBook Pro(视网膜,15英寸,2015年中),2.2 GHz Intel Core i7、16 GB 1600 MHz DDR3(具有4个CPU内核和8个线程)上进行的。 从日志中可以看出,我们应该谨慎地使用JMH的Graal得出结论,因为JMH支持目前处于试验阶段。

旋转一下

使用Speedment初始化程序在此处创建一个Speedment项目模板。

在此处下载最新版本的GraalVM。

基准测试的源代码在此处 。

随时在另一个硬件平台上进行性能测试,并在下面的评论中报告结果。

结论

GraalVM接缝是一种有前途的技术,可以提高某些Java流类型的性能。

GraalVM与Speedment的JVM中内存加速结合使用可以为数据分析应用程序提供显着的流性能。

翻译自: https://www.javacodegeeks.com/2018/10/java-graalvm-database-stream-performance.html

java监控数据库性能

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

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

相关文章

@Param注解注意事项(小的细节)

一、关于dao和UserDao.xml的参数问题 dao接口里是否有Param进行映射,和UserDao.xml的参数的书写格式有关系 多参数类型的时候,使用param 如果dao接口里写了Param(“uid”),UserDao.xml的参数必须要写#{uid} 或者#{p…

jep122_JEP 181不兼容,嵌套类/ 2

jep122JEP 181是基于嵌套的访问控制https://openjdk.java.net/jeps/181 。 它是在Java 11中引入的,它故意引入了与先前版本的不兼容性。 这是一个很好的例子,与Java的早期版本兼容并不是刻板的规则,而是保持语言的一致性和稳定发展。 在本文中…

文档中快速输入日期时间的方法

文章目录word文档excel表格日期输入后固定不变日期输入后会根据系统变化的输入法快速输入日期时间(推荐)word文档 输入 ctrl;,就可以直接输入当前日期 输入 ctrlshift;,就可以直接输入当前时间 如果是输入当前日期和时间&#xf…

=空值返回空值_@ParameterizedTest在@CvsSource中具有空值

空值返回空值在JUnit 4中编写参数化测试非常麻烦。 JUnit 5对框架进行了一些有用的改进,并且使用不同的参数运行相同的测试比以前的版本要简单得多。 但是,在这样的参数中传递空值存在一个小问题。 在本文中,我将向您展示如何在JUnit 5中的P…

MySQL的配置文件_选项文件_参数文件

文章目录WindowsLinux使用命令 locate 查找含有关键词 my.cnf 的文件路径查看是否使用了指定目录下的 my.cnf 文件查看 MySQL 默认读取 my.cnf 文件路径启动时没有读取任何配置文件主要的配置参数类似于 Oracle 的参数文件,MySQL 的选项文件(即配置文件&…

java url参数转换:_提示:通过URL激活并发送参数

java url参数转换:世界上最安全的密码是不存在的密码。 使用完全随机的密钥从等式中删除用户。 公平地说,这有一些缺点,并且密码仍然存在于某处(在您的电话/电子邮件中),但通常这样效果很好... 诀窍很简单&#xff0c…

简单的vue入门案例

一、 简单入门Hello World案例 二、插值表达式 三、点击事件 四、按键事件 1.如果按下不是 0 - 9 则阻止事件执行 2.打印按下什么按键 五、鼠标事件 1.打印绝对坐标 2.打印相对坐标 3.鼠标mousemove 4. 阻止冒泡(阻止事件的传播) 六、事件修饰符 1.阻止跳转页面v-on:submit.…

javafx 调用java_Java,JavaFX的流畅设计风格进度栏

javafx 调用java按照承诺,刚刚发布的Java JavaFX主题JMetro版本4.6为进度栏带来了新样式。 进度栏有两种可能的状态:确定和不确定,新的JMetro版本针对这两种具有不同的样式。 在本文中,我还将详细介绍我在JMetro中遵守的一些API设…

vue基本用法

一、v-text与v-html.html v-html 可以解析标签&#xff0c;解析样式,v-text不能解析&#xff0c;只能原样输出 二、v-bind绑定参数 v-bind简写方式 <!-- 完整语法 --> <a v-bind:href"url">...</a> <!-- 缩写 --> <a :href"url&q…

类Unix系统下,vim各种模式之间的切换

文章目录普通命令模式插入模式&#xff08;编辑模式&#xff09;临时切换到普通命令模式可视模式&#xff08;文本选择模式&#xff09;底行命令模式&#xff08;EX 命令模式&#xff09;普通命令模式 vim 的默认模式就是普通命令模式&#xff0c; 使用 vim 打开文件就进入普通…

jdk12 switch_玩JDK 12的Switch表达式

jdk12 switch在博客文章“操作中的JDK语言功能预览&#xff1a;切换表达式 ”中&#xff0c;我讨论了JEP 325 [“切换表达式&#xff08; 预览 &#xff09;”&#xff09;如何作为指定的“ 预览语言功能 ”的早期应用&#xff0c;如JEP 12所述。预览语言和VM功能”]。 JEP 325…

VueJS生命周期

一、生命周期 vue在生命周期中有这些状态&#xff0c; beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed。Vue 在实例化的过程中&#xff0c;会调用这些生命周期的钩子&#xff0c;给我们提供了执行自定义逻辑的机会。 vue对象初始化过…

Linux的命令之 man -- 查看帮助文档

文章目录浏览文本内容的快捷键向前滚屏向后滚屏跳跃搜索使用这个命令可以查看任何命令的在线帮助文件&#xff0c;例如&#xff0c;查看命令 find 的在线帮助文档&#xff1a; [roothtlwk0001host ~]# man find打开命令的帮助文档后&#xff0c;可以使用鼠标滚轮上下滚动来浏览…

jdk8切换成jdk6_运行中的JDK语言功能预览:切换表达式

jdk8切换成jdk6JEP 12 [“预览语言和VM功能”]在其主页上描述如下&#xff1a; 预览语言或VM功能是Java SE平台的一项新功能&#xff0c;该功能已完全指定&#xff0c;完全实现但不是永久性的。 JDK功能发布中提供了该功能&#xff0c;以根据实际使用情况激发开发人员反馈。 这…

VueJS ajax综合案例

一、目录结构和注意事项 1.目录结构 2.注意事项 &#xff08;1&#xff09;data.html里面的Vue &#xff08;2&#xff09;箭头函数 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0…

Linux 下如何查找 MySQL 数据库的数据根目录呢?

笔者的服务器系统和MySQL版本如下&#xff1a; [roothtlwk0001host ~]# mysql -V mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper [roothtlwk0001host ~]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) MySQL 的配置文件路径…

libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束

libreoffice业务专家向我们&#xff08;开发人员&#xff09;解释业务限制。 但是&#xff0c;如何确保我们正确理解它们呢&#xff1f; 或更糟糕的是&#xff0c;一旦约束条件正式化&#xff0c;我们如何测试他们之间是否同意&#xff1f; 好吧&#xff0c;有一种很棒的方法可…

VueJS ajax综合案例(修改用户信息实现步骤)

修改用户信息 1.过程演示 2.代码实现

MacOS下如何通过命令搜索文件和打开文件

文章目录find 命令查找名称含有指定关键词的文件和目录locate 命令查找以指定字符串结尾的文件路径查看命令 locate 的使用说明mdfind 命令查找名称中含有指定关键词的文件搜索内容中包含指定关键词的文件在指定目录中搜索内容包含指定关键词或者名称含有指定关键词的文件搜索并…