• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 實體類變量 private public 性能測試

    發表于:2016-08-08來源:技術學習小組作者:莊業隆點擊數: 標簽:性能測試
    本文起因是團隊在確定 Android 實體類變量的訪問修飾符(private | public)時,存在不同的建議。

    前言

    本文起因是團隊在確定 Android 實體類變量的訪問修飾符(private | public)時,存在不同的建議。
    原因如下文,結果在最后:

    WHY YOU SHOULDN’T USE GETTERS AND SETTERS ON ANDROID

    也就是在 Android 手機中,調用 getter/setter 方法會比直接訪問變量耗費更多的性能。

    而在 Android Developers 的 Performance Tips 中是這么說的:

    Avoid Internal Getters/Setters

    However, this is a bad idea on Android. Virtual method calls are expensive, much more so than instance field lookups. It’s reasonable to follow common object-oriented programming practices and have getters and setters in the public interface, but within a class you should always access fields directly.

    Note that if you’re using ProGuard, you can have the best of both worlds because ProGuard can inline accessors for you.

    Google 的意思呢就是,對外提供 getter/setter,對內直接訪問。使用 proguard 可以兼具性能和規范。

    測試工具

    手機

    三星SM-G9006W 高通 驍龍801,2.5GHz,2GB

    代碼

    使用原文中的 DeltaExample 進行測試,部分代碼如下:

     

     

    訪問速度測試結果

    原文結果

    Low-end device (Samsung i5500):

    • BenchmarkGetSet: average of 1635,164792 nanoseconds per task;
    • BenchmarkPojo: average of 782,650153 nanoseconds per task.

    High-end device (LG Nexus 4):

    • BenchmarkGetSet: average of 72.501145 nanoseconds per task;
    • BenchmarkPojo: average of 46.659301 nanoseconds per task.

    不混淆的 private 變量

    測試結果如下圖,可直接看最后一項,Task 平均執行時間

    不混淆的 public 變量

    直接訪問變量:

    直接混淆后的 private 變量

    開啟混淆:

    發現并沒有性能提升,原因是較新的 Android SDK 默認關閉了優化:

    Android Proguard does not inline

    直接混淆后的 public 變量

    與混淆前速度相同

    優化混淆后的 private 變量

     

     

    optimize 之后,速度與 public 直接訪問變量一致

    優化混淆后的 public 變量

    與混淆前和直接混淆速度相同,此處就不多放圖片了

    總結

    1. 隨手機性能上升,兩者訪問速度都有明顯提高
    2. public 直接訪問變量的速度比 getter/setter 快約 1.5 倍
    3. 使用 proguard-android-optimize.txt 進行混淆后,兩者訪問速度相同

    原文轉自: http://blog.qiji.tech/archives/14577

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>