java - JVM 会内联对象的实例变量和方法吗?

标签 java scala jvm jit jvm-hotspot

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

簿记对象是私有(private)的和最终的,它的所有方法都是私有(private)的、最终的和@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 中吗?

最佳答案

在 Java 中,它可以在您遇到的情况下内联字段和方法。它并没有完全消除对象,而是接近了。我假设 Scala 的工作方式类似。

关于java - JVM 会内联对象的实例变量和方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6215138/

相关文章:

带反射的Scala对象引用

java - 您可以使用 JNI 在从 Java 调用的 C++ 函数中创建新的 JVM 吗?

java - 如何在同一个jvm中运行两个或多个应用程序

Java Android : BufferedInputStream to byte Array

java - 使用空字符作为循环条件,程序在应该循环时结束

java - 如何从FTP服务器获取文件并转换为附件文件?

multithreading - 多线程中未知进程的高CPU使用率

java - 将动态参数传递给注释?

r - sparklyr hadoop配置

scaladoc 玩!带有 Scala 模块的框架