java监控数据库性能_Java:GraalVM数据库流性能
java监控数据库性能
GraalVM是JVM块的新成员。 它是一个开源虚拟机,能够同时运行多种编程语言,例如Java,Rust和JavaScript。 GraalVM还具有一个新的内部代码优化器管道,与某些条件下的其他JVM相比,它可以显着提高性能。 了解如何获得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::of
或Collection::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内核的服务器级节点上的性能。
这是它在图表中的外观(越高越好):
普通流性能
初始测试显示了针对不同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监控数据库性能
java监控数据库性能_Java:GraalVM数据库流性能相关推荐
- Java 散点图 数据库 代码_java – 来自数据库的jfreechart中的散点图
如何使用java中的jfreechart在mysql数据库表中绘制数据的散点图.我用过swing库. 任何链接都会有所帮助.我搜索谷歌但无法找到理解解决方案. 如果你有代码,请提供给我. 实际上我做了 ...
- java语言数据库编程_JAVA语言数据库编程实例详解
本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...
- java nashorn_在JDK11上GraalVM的JavaScript性能是Nashorn的两倍
GraalVM是一个运行时平台,它支持Java和其他基于Java字节码的语言,但也支持其他语言,如JavaScript,Ruby,Python或LLVM.我们坚信,正如我们目前所知,它是语言虚拟机的未 ...
- java 拼接字符串性能_java字符串拼接与性能分析详解
假设有一个字符串,我们将对这个字符串做大量循环拼接操作,使用"+"的话将得到最低的性能.但是究竟这个性能有多差?如果我们同时也把StringBuffer,StringBuilder ...
- java程序有连接数据库_Java程序连接数据库
/** * 了解: 利用 Driver 接口的 connect 方法获取连接 */ // 第一种实现 /** * 了解: 利用 Driver 接口的 connect 方法获取连接 */ @Test p ...
- java 导出word换行_Java 导出数据库表信息生成Word文档
一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...
- java mysql数据库编程_java JDBC数据库(mysql)编程
什么是JDBC • JDBC(Java Data Base Connectivity,Java数据库连接) • 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问 • 它由一组用 ...
- JAVA生产环境验证_Java生产环境下性能监控与调优详解
本课程将为你讲解如何在生产环境下对Java应用做性能监控与调优:通过本课程,你将掌握多种性能监控工具应用,学会定位并解决诸如内存溢出.cpu负载飙高等问题:学会线上代码调试,Tomcat.Nginx, ...
- java与sql2005连接数据库_Java链接数据库SQl Server2005
Java链接数据库SQL Server2005步骤: 1.到微软官方网站下载2005的jdbc并解压,获得文件sqljdbc.jar.本人使用的是sqljdbc_1.2,解压后即为该文件. sql j ...
- java mysql访问类_java 访问数据库公共类
package com.javaweb.mvc; import java.util.ArrayList; import java.util.List; import java.sql.*;/** * ...
最新文章
- 工业机器人演示码垛和卸垛_浅谈饲料自动码垛机的应用及正确操作方法
- linux检查邮件命令,Linux:mail的邮件收发及查看
- python表白-python3实现表白神器
- java和python的比较-java 和 python的一些对比
- 泛型擦除机制、自定义注解、代理、反射
- Swagger 2——@ApiOperation注解、@ApiModel注解、@ApiImplicitParams注解、@ApiImplicitParam注解无效解决方案
- Apollo客户端读取数据原理
- 基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...
- Lesson Plan 教学计划 翻译
- 网易云推出“音街”APP 入局免费K歌市场
- 详解linux运维工程师入门级必备技能
- [转载]心灵丨愿你早一点发现,你才是自己最重要的粉丝
- Mongo 多语言模糊匹配
- JAVA代码爬虫获取网站信息
- Javase基础思维导图
- 嵌入式系统架构设计师的理解
- 利用python实现外星人入侵大战小游戏(带源代码)
- 机械臂末端执行器汇总
- ckeditor+vue 傻瓜式操作教程
- 家用漏电保护器过流跳闸与漏电跳闸的检查方法
热门文章
- 牛客题霸 [ 求二叉树的层序遍历] C++题解/答案
- 520 钻石争霸赛 题解
- 栈/队列/分块问卷调查反馈——Weak in the Middle,Cutting Plants,最小公倍数
- YBTOJ:数列方案(组合数学)
- nssl1467-U【差分】
- jzoj5354-导弹拦截【dp,最大匹配,最少路径覆盖】
- jzoj1158-荒岛野人【扩欧,gcd,同余方程】
- 【二分】最大均值(ybtoj 二分-1-3)
- Hadoop入门(六)Mapreduce
- Linux运维常用检查网络工具