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

Java性能评估

陈正业
2023-03-14
问题内容

我正在类之间进行一些Java性能比较,并想知道是否存在某种Java Performance Framework可以简化编写性能测量代码的过程?

即,我现在正在尝试测量与使用AtomicInteger作为我的“同步器”相比,使用PseudoRandomUsingSynch.nextInt()中的“同步”方法具有什么效果。

因此,我尝试使用3个线程访问10000次同步方法循环来测量生成随机整数所需的时间。

我相信有更好的方法可以做到这一点。你能开导我吗?:)

public static void main( String [] args ) throws InterruptedException, ExecutionException {
    PseudoRandomUsingSynch rand1 = new PseudoRandomUsingSynch((int)System.currentTimeMillis());
    int n = 3;
    ExecutorService execService = Executors.newFixedThreadPool(n);

    long timeBefore = System.currentTimeMillis();
    for(int idx=0; idx<100000; ++idx) {
        Future<Integer> future = execService.submit(rand1);
        Future<Integer> future1 = execService.submit(rand1);
        Future<Integer> future2 = execService.submit(rand1);

        int random1 = future.get();
        int random2 = future1.get();
        int random3 = future2.get();

    }
    long timeAfter = System.currentTimeMillis();
    long elapsed = timeAfter - timeBefore;
    out.println("elapsed:" + elapsed);
}

班上

public class PseudoRandomUsingSynch implements Callable<Integer> {
private int seed;

public PseudoRandomUsingSynch(int s) { seed = s; }

public synchronized int nextInt(int n) {
    byte [] s = DonsUtil.intToByteArray(seed);
    SecureRandom secureRandom = new SecureRandom(s);
    return ( secureRandom.nextInt() % n );
}

@Override
public Integer call() throws Exception {
    return nextInt((int)System.currentTimeMillis());
}
}

问候


问题答案:

忽略微基准测试在您的情况下是否有用的问题(斯蒂芬·C的观点 非常 有效),我要指出:

首先,不要听别人说“没那么难”。是的,使用JIT编译在虚拟机上进行微基准测试非常困难。从微基准测试中获取有意义和有用的数据实际上确实很困难,任何声称不难的人要么是天才,要么就是做错了。:)

其次,是的,周围有一些这样的框架。一个值得看的(认为它在非常早期的预发布阶段)的显卡,由凯文·Bourrillion和谷歌的杰西·威尔逊。从一些早期的观察来看,看起来确实令人印象深刻。



 类似资料:
  • 使用方法 性能评估模块提供了一系列用于模型性能评估的函数,这些函数在模型编译时由metrics关键字设置 性能评估函数类似与目标函数, 只不过该性能的评估结果讲不会用于训练. 可以通过字符串来使用域定义的性能评估函数 model.compile(loss='mean_squared_error', optimizer='sgd', metri

  • 使用方法 性能评估模块提供了一系列用于模型性能评估的函数,这些函数在模型编译时由metrics关键字设置 性能评估函数类似与目标函数, 只不过该性能的评估结果讲不会用于训练. 可以通过字符串来使用域定义的性能评估函数,也可以自定义一个Theano/TensorFlow函数并使用之 参数 y_true:真实标签,theano/tensorflow张量 y_pred:预测值, 与y_true形式相同的

  • 过早优化,往往引来各种麻烦。 一项技术究竟能否实用,有两项基本指标十分关键:一是功能的完备;一是性能的达标。 本章将试图对已有区块链技术进行一些评测。所有结果将尽可能保证客观准确,但不保证评测方法是否科学、评测结果是否具备足够参考性。

  • 免责声明:我对反向工程字节码没有太多的经验,所以请不要对我太苛刻,如果这可以“轻松”回答我的问题。

  • 本文转载自 developers.google.com 作者:Meggin Kearney 原文链接:使用 RAIL 模型评估性能 RAIL 是一种以用户为中心的性能模型。每个网络应用均具有与其生命周期有关的四个不同方面,且这些方面以不同的方式影响着性能: TL;DR 以用户为中心;最终目标不是让您的网站在任何特定设备上都能运行很快,而是使用户满意。 立即响应用户;在 100 毫秒以内确认用户输入

  • 问题内容: 我知道Java在这种情况下具有智能/惰性评估: 但是关于: 即使返回true 也被调用? 问题答案: 在Java(和其他类似C的语言)中,这称为 短路评估 。* 是的,在第二个示例中总是被调用。也就是说,除非编译器/ JVM可以确定它没有可观察到的副作用,否则在这种情况下它可以选择进行优化,但是无论如何您都不会注意到它们之间的差异。 两者截然不同; 前者本质上是一种优化技术,而第二种则