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::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内核的服务器级节点上的性能。

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

普通流性能

初始测试显示了针对不同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数据库流性能相关推荐

  1. Java 散点图 数据库 代码_java – 来自数据库的jfreechart中的散点图

    如何使用java中的jfreechart在mysql数据库表中绘制数据的散点图.我用过swing库. 任何链接都会有所帮助.我搜索谷歌但无法找到理解解决方案. 如果你有代码,请提供给我. 实际上我做了 ...

  2. java语言数据库编程_JAVA语言数据库编程实例详解

    本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...

  3. java nashorn_在JDK11上GraalVM的JavaScript性能是Nashorn的两倍

    GraalVM是一个运行时平台,它支持Java和其他基于Java字节码的语言,但也支持其他语言,如JavaScript,Ruby,Python或LLVM.我们坚信,正如我们目前所知,它是语言虚拟机的未 ...

  4. java 拼接字符串性能_java字符串拼接与性能分析详解

    假设有一个字符串,我们将对这个字符串做大量循环拼接操作,使用"+"的话将得到最低的性能.但是究竟这个性能有多差?如果我们同时也把StringBuffer,StringBuilder ...

  5. java程序有连接数据库_Java程序连接数据库

    /** * 了解: 利用 Driver 接口的 connect 方法获取连接 */ // 第一种实现 /** * 了解: 利用 Driver 接口的 connect 方法获取连接 */ @Test p ...

  6. java 导出word换行_Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  7. java mysql数据库编程_java JDBC数据库(mysql)编程

    什么是JDBC • JDBC(Java Data Base Connectivity,Java数据库连接) • 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问 • 它由一组用 ...

  8. JAVA生产环境验证_Java生产环境下性能监控与调优详解

    本课程将为你讲解如何在生产环境下对Java应用做性能监控与调优:通过本课程,你将掌握多种性能监控工具应用,学会定位并解决诸如内存溢出.cpu负载飙高等问题:学会线上代码调试,Tomcat.Nginx, ...

  9. java与sql2005连接数据库_Java链接数据库SQl Server2005

    Java链接数据库SQL Server2005步骤: 1.到微软官方网站下载2005的jdbc并解压,获得文件sqljdbc.jar.本人使用的是sqljdbc_1.2,解压后即为该文件. sql j ...

  10. java mysql访问类_java 访问数据库公共类

    package com.javaweb.mvc; import java.util.ArrayList; import java.util.List; import java.sql.*;/** * ...

最新文章

  1. 工业机器人演示码垛和卸垛_浅谈饲料自动码垛机的应用及正确操作方法
  2. linux检查邮件命令,Linux:mail的邮件收发及查看
  3. python表白-python3实现表白神器
  4. java和python的比较-java 和 python的一些对比
  5. 泛型擦除机制、自定义注解、代理、反射
  6. Swagger 2——@ApiOperation注解、@ApiModel注解、@ApiImplicitParams注解、@ApiImplicitParam注解无效解决方案
  7. Apollo客户端读取数据原理
  8. 基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...
  9. Lesson Plan 教学计划 翻译
  10. 网易云推出“音街”APP 入局免费K歌市场
  11. 详解linux运维工程师入门级必备技能
  12. [转载]心灵丨愿你早一点发现,你才是自己最重要的粉丝
  13. Mongo 多语言模糊匹配
  14. JAVA代码爬虫获取网站信息
  15. Javase基础思维导图
  16. 嵌入式系统架构设计师的理解
  17. 利用python实现外星人入侵大战小游戏(带源代码)
  18. 机械臂末端执行器汇总
  19. ckeditor+vue 傻瓜式操作教程
  20. 家用漏电保护器过流跳闸与漏电跳闸的检查方法

热门文章

  1. 牛客题霸 [ 求二叉树的层序遍历] C++题解/答案
  2. 520 钻石争霸赛 题解
  3. 栈/队列/分块问卷调查反馈——Weak in the Middle,Cutting Plants,最小公倍数
  4. YBTOJ:数列方案(组合数学)
  5. nssl1467-U【差分】
  6. jzoj5354-导弹拦截【dp,最大匹配,最少路径覆盖】
  7. jzoj1158-荒岛野人【扩欧,gcd,同余方程】
  8. 【二分】最大均值(ybtoj 二分-1-3)
  9. Hadoop入门(六)Mapreduce
  10. Linux运维常用检查网络工具