Scala 使用“private[this]lazy val”有意义吗?

Scala 使用“private[this]lazy val”有意义吗?,scala,Scala,我明白为什么这样做很有用 私有[此]值xx=3 如上所述 这同样适用于懒惰的val吗? 问题1。是 private[this]lazy val xx=3 快于 私人val xx=3 问题2。def-fi:Int=i 是私有的[this]懒惰val xx=f3 快于 private val xx=f3?否-惰性val始终被编码为带有支持字段的方法,因此,如果将值设置为惰性,则无论是否为private[this],您都将始终使用它。JIT编译器可能会在第一次加载后识别出它可以内联支持字段访问,但是您

我明白为什么这样做很有用 私有[此]值xx=3 如上所述

这同样适用于懒惰的val吗? 问题1。是 private[this]lazy val xx=3 快于 私人val xx=3

问题2。def-fi:Int=i 是私有的[this]懒惰val xx=f3 快于
private val xx=f3?

否-惰性val始终被编码为带有支持字段的方法,因此,如果将值设置为惰性,则无论是否为private[this],您都将始终使用它。JIT编译器可能会在第一次加载后识别出它可以内联支持字段访问,但是您引用的样式指南似乎专注于性能保证,而这种内联现在似乎没有得到保证。

否-延迟val始终被编码为带有支持字段的方法,因此是私有的[此]或者,如果您使值变为惰性,那么您将永远不会这样做。JIT编译器稍后可能会认识到,它可以在第一次加载后内联后备字段访问,但您引用的样式指南似乎侧重于性能保证,而这种内联现在似乎没有保证。

否。 为private lazy val x=3和private[this]lazy val=3的类生成的类是相同的,解释如下

私家车

使用private和private[this]val生成的类略有不同

私人val

二等兵[这个]瓦尔

没有。 为private lazy val x=3和private[this]lazy val=3的类生成的类是相同的,解释如下

私家车

使用private和private[this]val生成的类略有不同

私人val

二等兵[这个]瓦尔


你说的更快是什么意思?只是不同而已。你真的认为将val声明为public会降低应用程序的性能吗?@4lex1v:不,只是好奇而已。Bdw两者都是私有的。我觉得使用private[this]而不是private的最初建议有点奇怪,因为两者在语义上并不等价:同一类的其他实例可以访问private val,而private[this]val只能在该实例中访问。@csgero:请参见此处的示例:,我在这里的例子中寻找答案。你说的更快是什么意思?只是不同而已。你真的认为将val声明为public会降低应用程序的性能吗?@4lex1v:不,只是好奇而已。Bdw两者都是私有的。我觉得使用private[this]而不是private的最初建议有点奇怪,因为两者在语义上并不等价:同一类的其他实例可以访问private val,而private[this]val只能在该实例中访问。@csgero:请参见此处的示例:,我在这里的示例行中寻找答案。链接文章明确指出,对于性能敏感的代码,更喜欢private[this]而不是private。所以我认为这是一篇快速链接的文章,它明确规定了对性能敏感的代码,更倾向于私有(this)而不是私有(private)。所以我认为它说它更快
public class LazyValTest
{
  private int bar;
  private volatile boolean bitmap$0;

  private int bar$lzycompute()
  {
    synchronized (this) { if (!this.bitmap$0) { this.bar = 3; this.bitmap$0 = true; } return this.bar; }  } 
  private int bar() { return this.bitmap$0 ? this.bar : bar$lzycompute();
  }
}
public class PrivateValTest
{
  private final int bar = 3;

  private int bar() { return this.bar; }
}
public class PrivateThisValTest
{
  private final int bar = 3;
}