【问题标题】:In Java, how to improve performance of object creation?在Java中,如何提高对象创建的性能?
【发布时间】:2012-04-01 15:13:52
【问题描述】:

对象创建是我的应用程序中的一个瓶颈。

我认为为对象创建添加更多线程会使情况变得更糟,因为对象创建是一项 CPU 密集型任务,对吧?

那么,如何提高性能呢?

【问题讨论】:

  • 什么表明对象创建是开销?是否有一些性能分析来支持这个假设?如果没有分析,那么停止尝试“修复”未显示为问题的问题 :-)(现代 JVM/机器可以创建 [和 GC] 数亿 每秒新对象。)
  • 如果对象创建确实是一个问题(我同意@pst,您应该使用某种措施来断言这一点),那么添加更多线程并不能解决问题。您应该考虑创建更少的对象或简化它们的创建。
  • 除非您使用 JVM v1.1 和/或每秒创建数千个对象,否则我真的怀疑对象创建对您来说是一个瓶颈,因为这是最优化的功能之一JVM。如果这确实给您带来了问题,请使用对象池。
  • 感谢您的建议。它的过程很简单。整个过程只是从网络中获取线路并将每条线路转换为包括近百个对象的对象。每秒行数为 10,000。这让我有了结论。根据你的意见,我错了。我必须在其他地方找到瓶颈。再次感谢:-)
  • @JohnnyLim 我会想象瓶颈与 IO(或解析)相关。不过,请务必从基准/性能分析开始——然后可以确定可以改进的部分(以对整个系统进行改进的方式):)

标签: java multithreading performance object


【解决方案1】:

通常问题不是对象创建本身,而是重复的对象创建和垃圾生成。这会导致两个性能损失:创建所有这些对象和额外的垃圾收集停顿。

首先,您应该使用分析工具来验证过多的对象创建是性能问题的根源。假设您已验证这是问题所在,则需要寻找各种方法并尝试各种策略。这一切都取决于您的代码是如何编写的,因此没有一个可行的建议。 Java performance guidelines from IBM 的这份名单绝对值得申请。它指出了如何避免许多最常见的错误:不要在循环内创建对象;使用 StringBuilder 代替一系列字符串连接表达式;使用原始类型并尽可能避免自动装箱/拆箱;缓存常用对象;分配具有明确容量的集合类,而不是允许它们增长;等等

另一个不错的资源是 Java Performance Tuning 一书的第 4 章。 (大家可以在线阅读here。)

如果您在网上搜索excessive object creation java,您可以找到很多其他建议。

【讨论】:

    【解决方案2】:

    当您的应用在具有多个处理器的机器上运行时,您仍然可以通过多线程 CPU 密集型任务获得显着的性能提升。

    【讨论】:

      【解决方案3】:

      正如@Pst 所说 - 你确定这是瓶颈吗?因为这些天它不是一个常见的。

      但是考虑到这一点。您可以尝试的一件事是通过缓存和重用实例来避免创建。但这完全取决于你的程序做什么。

      【讨论】:

      • 合并和重用对象听起来不错,虽然我无法判断我的对象是否值得重用:-)
      • @JohnnyLim 知道的唯一方法是分析您的应用程序。如果有疑问,我会做您认为最清晰和最简单的方法,这通常意味着不回收。
      【解决方案4】:

      Java 对中小型对象使用 TLAB(线程本地分配缓冲区)。这意味着每个线程可以同时分配对象。也就是说,您不会因为使用多个线程而减慢速度。

      一般来说,更多的 CPU 可以改善 CPU 密集型问题。它的 IO 绑定任务,其中一个 cpu 可以使用所有可用带宽,例如磁盘访问,当您使用多个 CPU 时,这些任务不会更快。

      降低对象创建成本的最简单方法是创建/丢弃更少的对象。一个普遍的假设是对象创建是不可避免的,但在过去的 2.5 年里,我一直在处理每天 GC 少于一次的应用程序,即使在生产负载下也是如此。

      大多数应用程序不会以这种方式工作,因为它们不需要这样做。但是,如果您需要尽量减少对象创建,则可以。

      【讨论】:

        猜你喜欢
        • 2013-07-31
        • 1970-01-01
        • 2014-08-24
        • 2014-06-10
        • 2020-06-22
        • 2015-04-27
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多