当前位置: 首页 > 面试题库 >

Java代码内部基准测试

狄钧
2023-03-14
问题内容

我最近一直在研究基准测试,我一直对记录程序数据等感兴趣。我想知道我们是否可以在程序内部实现我们自己的内存使用代码并有效地实现自己的时间消耗代码。我知道如何检查代码运行所需的时间:

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();

此后,他打电话System.gc();(4 * 4)= 16次。然后再次重复该过程。这还不占用内存吗?

因此,总而言之,是否可以在Java程序中实现有效的基准测试代码?


问题答案:

是的,可以在Java代码中有效地实现性能基准。一个重要的问题是,任何一种性能基准都将增加其自身的开销以及您想要多少开销。System.currentMill
..()是性能良好的基准,在大多数情况下,nanoTime()太过强大了。

对于内存,System.gc将为您显示不同运行的不同结果(因为从未保证过gc运行)。我通常使用Visual
VM进行内存分析(免费),然后使用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
    }
}


 类似资料:
  • 本文向大家介绍java内部测试类代码详解,包括了java内部测试类代码详解的使用技巧和注意事项,需要的朋友参考一下 我们一般使用的java内部类有4种形式:一般内部类、局部内部类、匿名内部类、静态内部类。以下是我作的一个测试,以说明各种内部类的特性。 有关内部类的特性,代码中有详细说明,如下。 再分享一则实例: 总结 以上就是本文关于java内部测试类代码详解的全部内容,希望对大家有所帮助。感兴趣

  • 我决定要对一个特定的函数进行基准测试,所以我天真地编写了这样的代码: 一位同事指出,我应该将和变量声明为,以避免代码重新排序。例如,他建议优化器可以像这样有效地重新排序代码: 起初,我怀疑这种极端的重新排序是允许的,但经过一些研究和实验,我知道是允许的。 但volatile感觉不是正确的解决方案;volatile真的只是用于内存映射I/O吗? 然而,我添加了< code>volatile,发现不仅

  • 问题内容: 我已经编写了一个小型Java应用程序,我需要为其获取性能指标,例如内存使用率,运行时间等。有没有简单易用的性能衡量工具? 问题答案: Yourkit非常好(30天免费试用)。Eclipse还内置了TPTP工具。

  • 我试图弄清楚为什么Java的BigInteger乘法基准比使用从BigInteger.java源代码复制到我的项目中的实例要快3倍。使用jmh运行基准测试。下面是一个示例输出,注意加法的运行大致相同。

  • 问题内容: 除了以下内容之外,是否有其他方法/软件可以给出执行用Swift编写的代码块所需的准确时间? 问题答案: 如果您只想为代码块提供独立的计时功能,则可以使用以下Swift助手功能: 前者将注销给定代码段所需的时间,后者将返回该时间作为浮点数。作为第一个变体的示例: 将注销类似: map()经过的时间:0.0617449879646301 s 请注意,Swift基准测试会根据您选择的优化级别