2017-08-30 74 views
1

我在阅读Akka教程http://doc.akka.io/docs/akka/2.5.4/scala/guide/tutorial_3.html有没有“最终”的运行成本?

有一行代码final case object ReadTemperature。在final改性剂

用法与object在一起,所以这里已经讨论:What's the point of declaring an object as "final"?,但我想知道是否final也带来了一些运行成本与否。

据我所知,final仅在编译覆盖检查时才有意义,但可能在转换为VM代码时存在一些细微差别。听到意见会很好。

+0

据我所知,至少对所关注的Java,有一个检查一个变量是最终除了被访问,它告诉我final修饰符保留在java字节码中。我认为无论变量是否具有最终值,都会执行此检查,因此性能变化应该可以忽略不计。这似乎是合理的假设同样可以说是斯卡拉,但是,我不是斯卡拉专家。 – Neil

+0

'final',在课堂上,通常设置为声明“这个课程不能,也不会扩展”。当你开发一个框架时,你必须小心你的可扩展点。 –

+0

您可以对其进行基准测试并获得结果。这将有利于社区。 –

回答

3

号这两种情况都编译成相同的输出:

$ echo "case object ReadTemperature" > demo1.scala 
$ scalac demo1.scala 

$ javap -c ReadTemperature.class > demo1.out 
$ javap -c ReadTemperature$.class > demo1$.out 

$ echo "final case object ReadTemperature" > demo2.scala 
$ scalac demo2.scala 

$ javap -c ReadTemperature.class > demo2.out 
$ javap -c ReadTemperature$.class > demo2$.out 

$ diff demo1.out demo2.out 
1c1 
< Compiled from "demo1.scala" 
--- 
> Compiled from "demo2.scala" 

$ diff demo1$.out demo2$.out 
1c1 
< Compiled from "demo1.scala" 
--- 
> Compiled from "demo2.scala" 
+0

这是一种简单而酷的探索方式 –