JVM 是否会内联对象的实例变量和方法?

发布于 2024-11-13 11:46:17 字数 649 浏览 4 评论 0原文

假设我有一个非常紧密的内部循环,每次迭代都会访问和改变一个簿记对象,该对象存储一些有关算法的简单数据,并具有简单的操作逻辑

。簿记对象是私有的和最终的,并且它的所有方法都是私有的,最终和@inline。下面是一个示例(使用 Scala 语法):

object Frobnicate {
  private class DataRemaining(val start: Int, val end: Int) {
    @inline private def nextChunk = ....
  }

  def frobnicate {
    // ...
    val bookkeeper = new DataRemaining(0, 1000)
    while( bookeeper.hasData ) {
      val data = bookkeeper.nextChunk
      // ......
    }
  }
 }

JVM 是否会将整个 DataRemaining 对象内联到 Frobnicate.frobnicate 中?也就是说,它会将 startend 视为局部变量,并将 nextChunk 代码直接内联到 frobnicate 中吗?

Suppose I have a very tight inner loop, each iteration of which accesses and mutates a single bookkeeping object that stores some simple data about the algorithm and has simple logic for manipulating it

The bookkeeping object is private and final and all of its methods are private, final and @inline. Here's an example (in Scala syntax):

object Frobnicate {
  private class DataRemaining(val start: Int, val end: Int) {
    @inline private def nextChunk = ....
  }

  def frobnicate {
    // ...
    val bookkeeper = new DataRemaining(0, 1000)
    while( bookeeper.hasData ) {
      val data = bookkeeper.nextChunk
      // ......
    }
  }
 }

Will the JVM ever inline the whole DataRemaining object into Frobnicate.frobnicate? That is, will it treat start and end as local variables and inline the nextChunk code directly into frobnicate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨小墨 2024-11-20 11:46:17

在 Java 中,它可以在您所遇到的情况下内联字段和方法。它并没有完全消除对象,但已经接近了。我认为 Scala 也会以类似的方式工作。

In Java it can inline fields and methods in a situation as you have. It does not eliminate the Object completely, but gets close. I assume Scala would work similarly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文