2017-08-30 35 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

這是一種簡單而酷的探索方式 –