<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                先來看如何使用SamplingProfilerIntegration進行性能統計。系統中有很多重要進程都需要對性能進行分析,比如Zygote,其相關代碼如下: **zygoteInit.java** ~~~ public static void main(String argv[]) { try { //啟動性能統計 SamplingProfilerIntegration.start(); ......//Zygote做自己的工作 //結束統計并生成結果文件 SamplingProfilerIntegration.writeZygoteSnapshot(); ...... } ~~~ 先看start函數,代碼如下: **SamplingProfilerIntegration.java** ~~~ public static void start() { if(!enabled) {//判斷是否開啟性能統計。enable由誰控制? return; } ...... ThreadGroup group = Thread.currentThread().getThreadGroup(); SamplingProfiler.ThreadSet threadSet = SamplingProfiler.newThreadGroupTheadSet(group); //創建一個dalvik的SamplingProfiler,我們暫時不會對它進行分析 samplingProfiler= new SamplingProfiler(samplingProfilerDepth, threadSet); //啟動統計 samplingProfiler.start(samplingProfilerMilliseconds); startMillis = System.currentTimeMillis(); } ~~~ 上邊代碼中提出了一個問題,即用于判斷是否啟動性能統計的enable變量由誰控制,答案在該類的static語句中,其代碼如下: **SamplingProfilerIntegration.java** ~~~ static { samplingProfilerMilliseconds = //取系統屬性,默認值為0,即禁止性能統計 SystemProperties.getInt("persist.sys.profiler_ms", 0); samplingProfilerDepth = SystemProperties.getInt("persist.sys.profiler_depth", 4); //如果samplingProfilerMilliseconds的值大于零,則允許性能統計 if(samplingProfilerMilliseconds > 0) { File dir = new File(SNAPSHOT_DIR); ......//創建/data/snapshots目錄,并使其可寫 if (dir.isDirectory()) { snapshotWriter = Executors.newSingleThreadExecutor( new ThreadFactory() { public ThreadnewThread(Runnable r) { return newThread(r, TAG);//創建用于輸出統計文件的工作線程 } }); enabled = true; } ...... }else { snapshotWriter = null; enabled = false; Log.i(TAG, "Profiling disabled."); } } ~~~ enable的控制竟然放在static語句中,這表明要使用性能統計,就必須重新啟動要統計的進程。 啟動性能統計后,需要輸出統計文件,這項工作由writeZygoteSnapshot函數完成,其代碼如下: **SamplingProfilerIntegration.java** ~~~ public static void writeZygoteSnapshot() { ...... //調用writeSnapshotFile函數,注意第一個參數為“zygote”,用于表示進程名 writeSnapshotFile("zygote", null); samplingProfiler.shutdown();//關閉統計 samplingProfiler = null; startMillis = 0; } ~~~ writeSnapshotFile函數比較簡單,功能就是在shots目錄下生成一個統計文件,統計文件的名稱由兩部分組成,合起來就是“進程名_開始性能統計的時刻.snapshot”。另外,writeSnapshotfile內部會調用generateSnapshotHeader函數在該統計文件文件頭部寫一些特定的信息,例如版本號、編譯信息等。 SamplingProfilerIntegration的核心是SamplingProfiler,這個類定義在libcore/dalvik/src/main/java/dalvik/system/profiler/SamplingProfiler.java文件中。感興趣的讀者可以研究一下該類的用法。在實際開發中,我一般使用Debug類提供的方法進行性能統計。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看