Java:抛出已检查异常的*能力*是否会降低速度?

Java:抛出已检查异常的*能力*是否会降低速度?,java,performance,exception,Java,Performance,Exception,…或者必须抛出异常才能影响性能 参考已接受的答案。这是我想要实现的,如果以这种方式创建实例不会严重减慢速度的话。(我每秒要创建数千个对象、粒子系统等。因此,考虑到在Java中使用检查异常时存在的性能影响,这不是过早的优化。谢谢。)您可以每秒创建数千万个对象。对于数千人来说,除非你在分析器中看到问题,否则我不会担心性能。我还担心首先要使代码清晰和正确,然后考虑分析它。 在代码中出现异常几乎没有影响(除了使代码稍微大一点之外),抛出异常的代价很高,但您可以每秒抛出数千个异常,但仍然不会严重影响应用程

…或者必须抛出异常才能影响性能


参考已接受的答案。这是我想要实现的,如果以这种方式创建实例不会严重减慢速度的话。(我每秒要创建数千个对象、粒子系统等。因此,考虑到在Java中使用检查异常时存在的性能影响,这不是过早的优化。谢谢。)

您可以每秒创建数千万个对象。对于数千人来说,除非你在分析器中看到问题,否则我不会担心性能。我还担心首先要使代码清晰和正确,然后考虑分析它。

在代码中出现异常几乎没有影响(除了使代码稍微大一点之外),抛出异常的代价很高,但您可以每秒抛出数千个异常,但仍然不会严重影响应用程序性能。(错误代码并不是一件好事)


每秒可以创建数千万个对象。对于数千人来说,除非你在分析器中看到问题,否则我不会担心性能。我还担心首先要使代码清晰和正确,然后考虑分析它。

在代码中出现异常几乎没有影响(除了使代码稍微大一点之外),抛出异常的代价很高,但您可以每秒抛出数千个异常,但仍然不会严重影响应用程序性能。(错误代码并不是一件好事)


试试看,挡块的作用可以忽略不计。抛出异常的代价很小(可能可以忽略不计,但在一些旧的或功能不足的硬件上可能不会)

如果GC是一个问题,并且您出于流控制的原因希望抛出异常,但对异常的详细信息(除了其类型)不感兴趣,那么您可以重用异常对象。将它们作为常量创建一次,然后随时抛出它们


但说到这里,我会等到你知道你有一个性能问题,然后再考虑如何解决它。通常情况下,它并不是你认为会发生的事情。

试试看。捕捉块的作用可以忽略不计。抛出异常的代价很小(可能可以忽略不计,但在一些旧的或功能不足的硬件上可能不会)

如果GC是一个问题,并且您出于流控制的原因希望抛出异常,但对异常的详细信息(除了其类型)不感兴趣,那么您可以重用异常对象。将它们作为常量创建一次,然后随时抛出它们


但说到这里,我会等到你知道你有一个性能问题,然后再考虑如何解决它。通常情况下,它并不是你所想象的那样。

与什么相比,速度会慢一些,确切地说?在现代JVM上不是这样,不。进入一个try{}过去会有一些有意义的代价,但自从hotspot之后,这几乎被调整掉了。不是答案,因为我现在没有时间查找引用,抱歉:(与什么相比,速度慢了一些,确切地说?在现代JVM上不是这样,不。输入try{}过去会有一些有意义的成本,但自从hotspot以来,这几乎被调离了。不是答案,因为我现在没有时间查找引用,抱歉:(Peter,这里的问题不只是构造,而是GC。我在使用对象池,但我想这只会缓解问题。在手机上,启动。在手机上,即使资源有限,每秒千次也不太可能成为问题。Peter,这里的问题不只是构造,而是GC。我在使用对象池,但我想不会hat只会缓解一些问题。在手机上,启动时也是如此。在手机上,即使资源有限,每秒千次也不太可能是个问题。对于将来的参考,异常的重用很有趣--谢谢。对于将来的参考,异常的重用很有趣--谢谢。
public static void main(String... args) {
    long start = System.nanoTime();
    int runs = 10000000;
    for (int i = 0; i < runs; i++) {
        try {
            throwsException();
        } catch (Exception ignored) {
        }
    }
    long time = System.nanoTime() - start;
    System.out.printf("Took an average of %.3f micro-second per exception%n", time / runs / 1e3);
}

private static void throwsException() throws Exception {
    throw new Exception("Ignored");
}
Took an average of 0.744 micro-second per exception