Effective Kotlin. part 1

Local functions

fun someMath(a: Int): Int {
    fun sumSquare(b: Int) = (a + b) * (a + b)

    return sumSquare(1) + sumSquare(2)
}

以上local funtion編譯為java后其實(shí)是由匿名內(nèi)部類實(shí)現(xiàn)的,每次調(diào)用local function就會(huì)創(chuàng)建一個(gè)Function對(duì)象胳泉,同時(shí)涉及到參數(shù)的box和unbox

public static final int someMath(final int a) {
   Function1 sumSquare$ = new Function1(1) {
      // $FF: synthetic method
      // $FF: bridge method
      public Object invoke(Object var1) {
         return Integer.valueOf(this.invoke(((Number)var1).intValue()));
      }

      public final int invoke(int b) {
         return (a + b) * (a + b);
      }
   };
   return sumSquare$.invoke(1) + sumSquare$.invoke(2);
}

解決方法:使用non-capture local function雷激。每次調(diào)用會(huì)重用同一Function璧疗,并且沒有參數(shù)box和unbox

Null safety

fun sayHello(who: String) {
    println("Hello $who")
}

kotlin public 方法中non-null參數(shù)編譯為Java后有一個(gè)Intrinsics的靜態(tài)方法調(diào)用(overhead很薪缘摹)悲敷。(private 方法沒有究恤,因?yàn)橛蒶otlin編譯器保障)

public static final void sayHello(@NotNull String who) {
   Intrinsics.checkParameterIsNotNull(who, "who");
   String var1 = "Hello " + who;
   System.out.println(var1);
}

要想去掉這些靜態(tài)方法,使用編譯器選項(xiàng)-Xno-param-assertions或者在proguard文件中使用rule:

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

Nullable primitive types

a nullable type is always a reference type

primitive type變量定義為nullable type會(huì)進(jìn)行box后德。使用non-nullable type則可以避免box, 直接使用primitive type

About arrays

如果要?jiǎng)?chuàng)建primitive type的數(shù)組丁溅,總是使用IntArray, FloatArray等探遵,不要使用泛型Array<T>窟赏,因?yàn)闀?huì)導(dǎo)致box

Varargs

當(dāng)調(diào)用vararg參數(shù)的函數(shù)時(shí),會(huì)創(chuàng)建一個(gè)新的數(shù)組箱季,這樣會(huì)產(chǎn)生性能損耗涯穷。

fun printDouble(vararg values: Int) {
    values.forEach { println(it * 2) }
}

printDouble(1, 2, 3)

printDouble(new int[]{1, 2, 3});

盡量避免使用vararg,而是將參數(shù)聲明為Array

Refer:

https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-2-324a4a50b70

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藏雏,一起剝皮案震驚了整個(gè)濱河市拷况,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掘殴,老刑警劉巖赚瘦,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奏寨,居然都是意外死亡起意,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門病瞳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揽咕,“玉大人,你說我怎么就攤上這事套菜∏咨疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵逗柴,是天一觀的道長(zhǎng)蛹头。 經(jīng)常有香客問我,道長(zhǎng)戏溺,這世上最難降的妖魔是什么渣蜗? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮于购,結(jié)果婚禮上袍睡,老公的妹妹穿的比我還像新娘。我一直安慰自己肋僧,他們只是感情好斑胜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嫌吠,像睡著了一般止潘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辫诅,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天凭戴,我揣著相機(jī)與錄音,去河邊找鬼炕矮。 笑死么夫,一個(gè)胖子當(dāng)著我的面吹牛者冤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播档痪,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涉枫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了腐螟?” 一聲冷哼從身側(cè)響起愿汰,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乐纸,沒想到半個(gè)月后衬廷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汽绢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吗跋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶喜。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡小腊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出久窟,到底是詐尸還是另有隱情秩冈,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布斥扛,位于F島的核電站入问,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稀颁。R本人自食惡果不足惜芬失,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匾灶。 院中可真熱鬧棱烂,春花似錦、人聲如沸阶女。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秃踩。三九已至衬鱼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憔杨,已是汗流浹背鸟赫。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抛蚤。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓台谢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親霉颠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子对碌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容