【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

Java 基准所面临的挑战

  • 2008-08-11
  • 本文字数:1051 字

    阅读完需:约 3 分钟

Brent Boyer 是 Elliptic Group 的一名程序员,他在 IBM 开发者网站上发表了一篇名为“健壮的Java 基准(Robust Java Benchmarking)”的文章。这篇文章包含两个部分,主要探究了如何实现有效的Java 基准。首先,他论述了当前编译器下不同JVM 有着不同的特性和优化,而这些特性或是优化有可能会对性能测试产生负面影响。举例来说,假如有一段复杂的代码段,最后计算得到的是一个从未使用的值,那么强势编译器就会对这段代码进行优化,基准则会忽略这段计算。为了说明这一点,他在他哦个一台计算机上连续运行了很多次相同的代码段,结果运行时都是4.9 秒,但当他删除了打印结果的println 语句之后,运行时间则缩短到0.08 秒。他还指出,时间度量的粒度在不同的操作系统下是不一样的,因此在基准测试的时候,一定要弄清楚当前系统的时间度量粒度。他说,和System.nanoTime() 相比,System.currentTimeMillis() 就不是一个度量运行时间的好方法(),因为它在Windows XP 上只有15ms 的精度(但在具有2.6 内核的Linux 上却可以达到1ms 的精度)。

在阐述了这些特别的行为之后,Boyer 提到了一些在做典型的基准测试时容易忽略的一些问题,比如JVM 缓存、资源回收(如垃圾收集、对象清理)。他认为避免这些问题的唯一有效方式是“预热(warm up)”代码直到代码达到一个稳定态。“预热”过程很耗时间并且很具挑战,因为有些JVM 在其触发编译之前可能已经将一个函数执行了10,000 次(但在编译触发前,代码还处于解析状态)。代码达到稳定状态之后,基准必须对这段代码运行多次,然后才能对结果做出有效的统计分析。

此外,Boyer 还建议采用基准框架来做基准测试,他本人就编写了这样一个框架。该框架能够展示以不同数目的元素来访问数据结构(原生数组、 ArrayLists、Vectors、HashMap、TreeMap 等等)中的数据的差异。Boyer 向大家展示了两个有趣的分析结果:(1)即使运行时短暂到以纳秒计数,其基准框架仍能计算出平均访问时间。(2)不同负载下,某些数据结构的反应令人非常吃惊。其中一个特别的例子是 ConcurrentHashMaps 与TreeMap 的比较:在同样拥有1024 个元素时,CurrentHashMaps 的表现要远远好于 TreeMap,但当元素数量上升到1024x1024 的时候,两者表现就相差不大。这很出乎意料,因为hash map 的搜索时间是常量,但trees 的搜索时间却是log(n)。除却这些令人吃惊的奇怪的结果,这篇文章还是非常值得一读的,尤其是在对Java 代码进行基准评测时,Boyer 提出的建议还是值得参考的。

查看英文原文: The Challenges in Java Benchmarking

2008-08-11 17:25272
用户头像

发布了 88 篇内容, 共 257.7 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

外贸企业如何搭建适合自己的B2C外贸出口独立站

tbapi

淘宝代购系统 淘宝代购 淘宝代采系统 华人代购 华人代购系统

Tmall API 丨Tmall commodity list data interface丨Tmall commodity details data interface

tbapi

天猫商品详情数据接口 天猫API接口 天猫商品数据接口 tmall api

大型媒体网站霸占86.1% Google首位排名:普通网站如何突围?

九凌网络

Taobao api丨Taobao API interface丨 Taobao product data interface丨Taobao product details interface

tbapi

淘宝商品详情数据接口 淘宝API接口 淘宝商品数据接口 淘宝数据采集

Taobao purchasing system丨Taobao purchasing system丨Chinese purchasing system丨Chinese goods purchasing

tbapi

taobao agent taobao agent system 1688 agent 1688 agent system taobao buyer

MySQL运维6-Mycat垂直分库

快乐非自愿限量之名

矩阵起源荣获"深圳企业创新(国际)纪录"殊荣

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

突破!金淑杰成功研发中空纤维纳滤膜技术,助力全民健康饮水!

科技热闻

外贸各个大洲客户的特点

九凌网络

IPQ6010 vs IPQ9574 Platform Comparison|Achieve 1588 TSN in WiFi6 WiFi7Hardware

wallyslilly

IPQ6010

4种Python中基于字段的不使用元类的ORM实现方法

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟

MatrixOne 通过中国信通院 “可信数据库” HTAP 基础能力专项测试

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

测试开发 | AI在人工和服务领域的崭新角色

测吧(北京)科技有限公司

测试

测试开发 | 智能农业引领农业革新,人工智能携手农业改写未来

测吧(北京)科技有限公司

测试

聊聊kube-scheduler如何完成调度和调整调度权重

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟

软件测试/测试开发/人工智能丨模型通过什么原理帮助业务解决问题

测试人

人工智能 软件测试

数云100|神州数码X浙江联通:以算力支撑面向“互联网+”的隐私保护系统,保护用户的隐私数据安全

科技热闻

神州数码(Digital China)与跬智信息(Kyligence)签署合作协议

Kyligence

数字分析 数智驱动

企业如何通过全面预算管理优化业务流程

智达方通

业务流程优化 业务流程 全面预算管理

Google SEO服务的常见坑人套路

九凌网络

Python在人工智能领域的应用案例分析

技术冰糖葫芦

API

Pinduoduo API丨Pinduoduo commodity details data interface丨Pinduoduo commodity data interface

tbapi

拼多多API接口 pinduoduo API 拼多多商品详情数据接口

低代码助力全栈开发

这我可不懂

低代码 全栈开发

软件测试/测试开发/人工智能丨分类,二分类和回归问题的对应场景与区别

测试人

人工智能 软件测试

多家公司荣获Autodesk Design & Make大中华区杰出贡献奖

E科讯

交大安泰行研五周年,“第六届中国行业发展高峰论坛”成功举行

科技热闻

前端框架如何帮助开发者构建应用程序?

互联网工科生

软件开发 前端框架 应用开发 JNPF

理解 Paimon changelog producer

不在线第一只蜗牛

大数据 Data

手把手入门MO | 如何通过通过 FineBI 实现 MatrixOne 的可视化报表

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

GO编程语言:简洁、高效、强大的开源编程语言

EquatorCoco

Go 编程语言 架构编程

Curve 文件系统为 AI 业务降本增效

OpenCurve

云计算 大数据 AI 分布式 文件存储

Java基准所面临的挑战_Java_Steven Haines_InfoQ精选文章