【问题标题】:Casting performance in JavaJava中的铸造性能
【发布时间】:2010-10-11 18:05:39
【问题描述】:

我有一个 Servlet 过滤器,它执行以下类型转换:

HttpServletRequest httpRequest = (HttpServletRequest) req;

目前我的过滤器负责两个任务,最好将它们分成两个过滤器。如果我将逻辑拆分为两个过滤器,我需要进行两次强制转换。

这样的演员阵容对性能有何影响?为了更好的架构,是否值得接受这种性能下降?

【问题讨论】:

  • 始终避免使用 tostring 或类似方式
  • 如果我需要调用 HttpServletRequest 上的方法,字符串将无济于事。为什么更喜欢 toString 之类的而不是强制转换?
  • @deamon:看这篇帖子stackoverflow.com/questions/2170872/…Tom Hawtin 的回答。

标签: java performance casting


【解决方案1】:

这样的性能影响是什么 演员表?

处理 HTTP 请求相比?绝对没有。如果您是在一个深度嵌套的循环中执行此操作,它几乎没有其他作用,但对于涉及实际工作量数百万倍的任务(例如执行 DB 请求)完成一次则无关紧要或访问硬盘)。

【讨论】:

    【解决方案2】:

    性能影响可以忽略不计(与完成的总工作量相比)。 Java 做了很多转换,就像在集合框架中一样,因此工程师已经对其进行了很好的优化。额外的转换不会有太大变化,此外,可读性(可维护性?)更重要。

    【讨论】:

    • 请问您有链接和/或参考吗?
    • @DerMike 我忘了,抱歉。与此同时,请随意投反对票。
    【解决方案3】:

    演员阵容几乎没有性能影响。 (已编辑,感谢评论者)

    只要您没有真正的性能问题,请始终寻求更好的架构。

    【讨论】:

    • 你的第一个陈述是绝对错误的。 Java 中的强制转换涉及运行时工作 - 至少 JVM 必须检查对象是否实际上是所需类型,以便在不是时抛出 ClassCastException。
    • Java 中的强制转换可以在特殊情况下被编译器优化掉——但在大多数情况下,例如这种情况,它确实涉及运行时工作。因此,即使在这种情况下不是特别相关,也会对性能产生影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多