相关疑难解决方法(0)

Java异常有多慢?

问题:Java中的异常处理实际上是否很慢?

传统观念以及许多谷歌搜索结果表明,不应将特殊逻辑用于Java中的正常程序流程.通常有两个原因,

  1. 它确实很慢 - 甚至比常规代码慢一个数量级(给出的原因各不相同),

  1. 它很混乱,因为人们只希望在特殊代码中处理错误.

这个问题是关于#1.

例如,这个页面将Java异常处理描述为"非常慢",并将缓慢与异常消息字符串的创建联系起来 - "然后将此字符串用于创建抛出的异常对象.这并不快." Java中的有效异常处理这篇文章说"其原因在于异常处理的对象创建方面,从而使异常本身变得缓慢".另一个原因是堆栈跟踪生成减慢了它的速度.

我的测试(使用Java 1.6.0_07,Java HotSpot 10.0,在32位Linux上)表明异常处理并不比常规代码慢.我尝试在循环中运行一个执行一些代码的方法.在方法结束时,我使用布尔值来指示是返回还是抛出.这样实际处理是一样的.我尝试以不同的顺序运行方法并平均我的测试时间,认为它可能是JVM升温.在我的所有测试中,投掷至少与返回一样快,如果不是更快(最多快3.1%).我对我的测试错误的可能性持开放态度,但我没有看到代码示例,测试比较或过去一两年中显示Java中的异常处理的结果慢.

让我沿着这条路走下去的是我需要使用的API,它将异常作为正常控制逻辑的一部分.我想在他们的使用中纠正它们,但现在我可能无法做到.相反,我是否必须赞美他们的前瞻性思维?

即时编译中的高效Java异常处理文章中,作者建议单独存在异常处理程序,即使没有抛出异常,也足以阻止JIT编译器正确优化代码,从而减慢它的速度.我还没有测试过这个理论.

java performance exception-handling

471
推荐指数
10
解决办法
7万
查看次数

instanceof和Class.isAssignableFrom(...)有什么区别?

以下哪项更好?

a instanceof B
Run Code Online (Sandbox Code Playgroud)

要么

B.class.isAssignableFrom(a.getClass())
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一区别是,当'a'为null时,第一个返回false,而第二个抛出异常.除此之外,他们总是给出相同的结果吗?

java reflection instanceof

441
推荐指数
9
解决办法
25万
查看次数

在Java中捕获instanceof

在我的应用程序中,我有一个2d实体数组来表示网格.网格中的每个位置都可以为空或由实体占用(在这种情况下,它只是一个人或墙).现在我instanceof用来检查一个实体是一个人还是一堵墙.

我正在考虑为每个实体提供一个方法,该方法返回一个enum说明其类型的方法,即墙实体将返回EntityType.WALL.我想知道这是否是最好的想法,删除使用instanceofinstanceof适合在这种情况下?

java enums instanceof

22
推荐指数
3
解决办法
1617
查看次数

哪些Scala功能是使用反射在内部实现的?

众所周知,结构类型是通过反射实现的.是否有任何其他语言结构使用反射?

reflection scala

18
推荐指数
4
解决办法
927
查看次数

java optimization nitpick:在投射之前调用instanceof进行检查是否更快投出一些东西并让它抛出异常?

在任何人说什么之前我只是出于好奇而问这个问题; 我不打算根据这个答案做任何过早的优化.

我的问题是关于使用反射和铸造的速度.标准的说法是"反思很慢".我的问题是哪个部分确实很慢,为什么; 特别是在比较某事物是否是另一个实例的父母时.

我非常有信心只是将对象的类与另一个Class对象进行比较的速度与任何比较一样快,大概只是直接比较已经存储在Object状态中的单例对象; 但如果一个班级是另一个班级的父母呢?

我通常认为instanceof它与普通班级检查一样快,但今天我想到了它,似乎有些反思必须在"幕后" instanceof才能发挥作用.我在网上查了一下,发现有人说的instanceof很慢; 大概是因为比较物体的父母所需的反射?

这导致了下一个问题,如何只是铸造.如果我把某事物作为一个物体,那我就得不到了ClassCastException.但是如果将对象转换为自身的父对象,则不会发生这种情况.基本上我正在做一个instanceof电话,或逻辑到那个效果,当我在运行时进行演员表明我不是吗?我从来没有听到过任何人暗示过投射物体之前可能会很慢.不可否认,并非所有演员都是提供对象的父级,但很多演员都是父类.然而,从来没有人暗示这可能会很慢.

那是哪个呢.是instanceof真的没有那么慢?两者都instanceof投射到父类有点慢吗?或者有什么理由可以比instanceof电话更快地完成演员表?

java optimization casting instanceof

14
推荐指数
2
解决办法
3109
查看次数

在javascript中使用instanceof运算符是一个性能问题?

我听说java中的instanceof运算符是一个性能问题,

是否也适用于Javascript(IE6,IE7,IE8,FF,Chrome,Safari等)?任何真实文件的链接都会有所帮助.

javascript browser optimization performance

11
推荐指数
2
解决办法
6450
查看次数

Java中的铸造成本是多少?避免它是一个好主意吗?

我知道有两种类型的转换是隐式显式转换.我在StackOverflow上阅读了不同的问题,例如this,thisthis,但我仍然想知道在Java中投射的成本是多少,避免它是个好主意?它的最佳实践是什么?

铸造有两种类型:

String s = "Cast";
Object o = s; // implicit casting

Object o = someObject;
String s = (String) o; // explicit casting
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,运行时会产生开销,因为必须检查这两种类型,并且如果转换不可行,JVM必须抛出一个ClassCastException.

有人说最好对应用程序进行分析,以确保铸造是否有用.

java casting

9
推荐指数
3
解决办法
1万
查看次数

Scala - TypeTags,ClassTags和WeakTypeTags的运行时性能

简介:

... TypeTag[T]封装某些编译时类型的运行时类型表示T....
... TypeTags的总是由编译器生成....... [1]

TypeTags位于scala.reflect.**包装中.另一个SO回答提到使用java反射会在应用程序中产生运行时性能开销.

问题:s,s和s在运行时使用java反射的
程度如何?它们是在编译时生成的,但它们在使用时是否会导致运行时性能开销?TypeTagClassTagWeakTypeTag

示例:

def isOfType[A : ClassTag : TypeTag, E : ClassTag : TypeTag](actual: A, expected: E): Boolean = {
  actual match {
    case _ : E if typeOf[A] =:= typeOf[E] => true
    case _ => false
  }
}

assert( isOfType(List.empty[Int], List.empty[Int]))
assert(!isOfType(List.empty[String], List.empty[Int]))
Run Code Online (Sandbox Code Playgroud)

虽然标签是在编译时生成的,但我可以在运行时感受到延迟.类型比较是否使用了引擎盖下不那么高效的java反射?

reflection scala scala-reflect

7
推荐指数
1
解决办法
1253
查看次数

如何在Scala中完全避免运行时反射?

请注意,这是一个社区帖子,应根据需要添加示例.如果您无法直接编辑添加示例(问题示例或解决方案)的答案,请在评论中发布带有要点(或类似内容)的链接或添加单独的答案,以便稍后进行集成.

Scala 3可能根本不包含scala.reflect.runtime(Dotty目前没有,并且计划这样做不确定).虽然适用于Scala 2和Dotty的答案可能是转换目的和立即改进性能的首选,但也欢迎Dotty特定的解决方案.

参考

https://www.cakesolutions.net/teamblogs/ways-to-pattern-match-generic-types-in-scala

scala dotty

6
推荐指数
1
解决办法
445
查看次数

instanceof运算符是否会产生大量开销?为什么?

我的项目中有一位同事,他深深反对instanceof运营商的使用,因为它"产生了大量的开销",原因是什么?这是真的吗?

有没有其他方法来检查对象的类型而不是使用它?

因为我发现它在某些场合非常有用.

java optimization casting

5
推荐指数
1
解决办法
6134
查看次数