java测试性能代码_关于性能:Java代码内部的基准测试
我最近一直在研究基准测试,我一直对记录程序数据等感兴趣。我想知道我们是否可以在程序中有效地实现自己的内存使用代码和实现自己的时间消耗代码。我知道如何检查代码运行所需的时间:
public static void main(String[]args){
long start = System.currentTimeMillis();
// code
System.out.println(System.currentTimeMillis() - start);
}
我还研究了健壮的Java标杆,第1部分:问题,本教程非常全面。显示System.currentTimeMillis();的负面影响。然后,本教程建议我们使用System.nanoTime();(使其更准确?).
我还研究了在Java中使用内存来确定内存使用情况。这个网站展示了你如何实现它。提供的代码看起来无效,因为该人员正在调用
long L = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
之后,他打了16次电话给System.gc();(4*4)=16次。然后再次重复这个过程。这不是也占用了记忆吗?
因此,在你的Java程序中,是否可能实现一个有效的标杆代码?
请参阅此帖子StAppExoal.com /问题/ 4583175 /基准Java程序和ZWNJ;和8203;MS有很好的建议。尤其是你应该读这个。
应该避免使用System.CurrentTimeMillis()测量性能,而使用System.NanoTime(),因为如果NTP服务器将更正计算机的当前时间,则CurrentTimeMillis可能会"返回时间"。
看看这个答案。
是的,可以有效地在Java代码中实现性能基准。重要的问题是,任何一种性能基准都会增加它自己的开销,以及你想要多少开销。system.currentmill..()是性能的足够好的基准,在大多数情况下,nanome()是一种过度杀伤力。
对于内存系统,gc将为不同的运行显示不同的结果(因为gc运行从未得到保证)。我通常使用VisualVM进行内存分析(它是免费的),然后使用TDA进行转储分析。
一种减少入侵的方法是使用面向方面的编程。您可以只创建一个在特定注释或方法集上运行的方面,并编写一个@around建议来收集性能数据。
下面是一个小片段:
public class TestAspect {
@LogPerformance
public void thisMethodNeedsToBeMonitored(){
// Do Something
}
public void thisMethodNeedsToBeMonitoredToo(){
// Do Something
}
}
@interface LogPerformance{}
@Aspect
class PerformanceAspect{
@Around("the pointcut expression to pick up all" +
"the @PerfMonitor annotated methods")
public void logPerformance(){
// log performance here
// Log it to a file
}
}
我不知道NanoTime()需要更长的时间,而且它绝对更准确。在许多情况下,currentTimeMillis()完全不够。总是使用纳米时间()。
如果没有一些海森堡效应,就不可能进行基准测试,也就是说,您的基准测试代码也会被测量。但是,如果您在足够高的粒度上进行测量,效果将可以忽略不计。
目前还不完全清楚海森堡原理能否在这里得到应用。该原理指出,如果增加测量一个属性的精度,例如从currentTimeMillis切换到nanoTime(),第二个属性的精度就会降低。在测量Java方法(方法开始和结束时间之间的增量)的情况下,第二个属性是什么?
任何基准代码的效率都会比没有基准代码的效率低,这仅仅是基于有更多的事情要做。也就是说,JAVA特别是由于JRE感觉到垃圾收集时发生的问题而引起的。即使是system.gc的文档也表示它"尽了最大努力"。
关于您的具体问题:
system.gc不应该占用更多内存,但它将占用处理器资源。
这在某种程度上是有可能的,基于你正在尝试的基准。总会有一些干扰。如果你愿意走出你的代码,有像visualvm这样的工具可以从你的应用程序外部观察内存的使用。
编辑:更正system.gc文档所说的措辞。
java测试性能代码_关于性能:Java代码内部的基准测试相关推荐
- java测试磁盘读写速度_用来测试自己硬盘读写性能的代码勿尝试
1.[文件] Practise3.java ~ 2KB 下载(22) package chapter4; import java.io.BufferedWriter; import java.io.F ...
- 实战java虚拟机 百度云_《实战JAVA虚拟机 JVM故障诊断与性能优化》pdf百度云下载...
内容简介· · · · · · 随着越来越多的第三方语言(Groovy.Scala.JRuby等)在Java虚拟机上运行,Java也俨然成为了一个充满活力的生态圈.<实战Java虚拟机--JVM ...
- java 集成开发工具_最好的Java开发人员测试和集成工具
java 集成开发工具 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 无论您是刚刚起步还是已经从事了一段时间,使用正确的工具进行编程都可 ...
- java 测试内存溢出_浅析软件测试人员如何对JVM进行内存溢出检测
一.什么是JVM,检测JVM的意义 JVM是java virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各 ...
- java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...
今天在看深入理解JAVA虚拟机的9.3节,作者实现了一个远程执行功能.这个功能可以在远程服务器中临时执行一段程序代码,而去不依赖jdk版本,不改变原有服务端程序的部署,不依赖任何第三方库,不入侵原有的 ...
- 用java写ods系统_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...
TableGo是基于数据库的代码自动生成工具,低代码编程技术的实现,可以零代码自动生成SpringBoot项目工程.生成JavaBean.生成前后端分离的CRUD代码.生成MyBaits的Mapper ...
- java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...
TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...
- 红牛农场java代码_实验题目 Java语言概述.doc
实验题目 Java语言概述 实验一 Java语言概述 [实验目的] 1.掌握开发Java应用程序的三个步骤:编写源文件.编译源文件和运行应用程序. 2.熟悉Java应用程序的基本结构,并能联合编译应用 ...
- java实现图片滚动_怎么用Java代码使图片自行滚动浏览
图片循环滚动代码和图片无缝滚动代码 先介绍一下它的实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和demo2,demo1是滚动内容,demo2为demo1的直接克隆,通 ...
最新文章
- Spring中的Spring JSR-250 注释之@Resource
- Hybris Commerce下单时遇到产品库存不足的解决办法
- 课堂上老师不讲的有趣物理知识,才是孩子最感兴趣的!
- anaconda中安装xgboost_Anaconda是什么?Anconda下载安装教程 - python基础入门(16)
- python如何读取tfrecord_tensorflow读取tfrecords格式文件
- Unreal Engine 4 —— 使用ProceduralMeshComponent实现模型实时切割
- word2003怎么做目录与正文的连接
- 【北大知识图谱】知识图谱的关键技术及其智能应用
- VC++6显示行号插件+VC6LineNumberAddin.dll+注册机
- android 半透明背景
- Vue项目实现web端飘窗
- 等保2.0 安全计算环境 ——Windows服务器(三级系统)
- 数字电路专题:FPGA芯片速度等级认识
- 快速消除PDF复制内容里的换行
- windows配置静态路由表
- 向上的路,从来都不好走(好文力荐)
- 阿里云技术大咖分享新内容新交互时代下的新技术、新机会
- AnyviewC编程作业系统——支持程序可视化运行、调试和测评
- 紧急提醒!黑客正利用假 ChatGPT 来推送恶意软件
- matlab fourier变换反变换
热门文章
- 等保安全计算环境之Windows(身份鉴别+访问控制)(二级)
- 计算机地图制图的生产流程包括,2012注册测绘师综合:计算机地图制图生产工艺...
- 简单学JAVA-学好Java能做啥
- 你有旧iPhone吗?快来瓜分苹果1800万赔偿款!
- PHPCMS模块分析之广告模块详解----北冥神功破解法(二)
- 关于若依管理系统配置多数据源的原理分析
- (转)推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器--Jexus
- 云计算场景下,如何快速定位出虚拟机reboot/shutdown引发的故障
- hbuilderx运行支付宝小程序
- java人学生大学生类的继承,java实验报告7.doc