先端学習ノートPart 1-2:JS性能最適化、GCアルゴリズム紹介とV 8エンジン
9180 ワード
JavaScript性能の最適化
JavaScriptメモリ管理メモリ管理の紹介 メモリ:読み取り可能な書き込みユニットからなり、動作可能な空間 を表しています.管理:人工的に1つの空間を操作する申請、使用と釈放 メモリ管理:開発者の自発的なアプリケーション空間、使用空間、解放空間 フロー管理:申請–利用–リリース JavaScriptアプリケーションメモリ空間、メモリ空間の使用、メモリ空間の解放 JavaScriptのゴミ回収 JavaScriptの中のごみJavaScriptの中のメモリの管理は自動的な対象がもう引用されない時です.ごみの対象がルートからアクセスできない時です.ごみです. JavaScriptの中の到達可能なオブジェクトは、到達可能なオブジェクト(参照、作用ドメインチェーン)が到達する基準であり、ルートからJava Scriptのルートが見つかったかどうかは、グローバル変数のオブジェクトとして理解できる である. GCアルゴリズム定義 定義:GCはゴミ回収メカニズムです. 作用:メモリの中のごみを見つけて、そして空間GCのごみを釈放して回収することができるのは何ですか?1、プログラムはもう対象を使う必要がなくて、2、プログラムの見つけられない対象は です.アルゴリズムは、作業中の検索と回収に即座に従う規則 である.
一般的なGCアルゴリズム は、カウントアルゴリズムの動作原理を参照する.参照カウントとは、各値が参照された回数を追跡記録することを意味する.変数を宣言して参照型の値を変数に割り当てた場合、この値の参照回数は1です.同じ値が他の変数に割り当てられている場合、その値の参照回数は1を加算します.逆に、この値に対して参照する変数が含まれている場合は、この値の参照回数は1を減算します.この値の参照回数が0になったら、この値にアクセスできないということですので、占有しているメモリ空間を元に戻すことができます.コア思想:参照数を設定し、現在の参照数が0参照カウンタであるかどうかを判断する.引用関係が変更された場合は参照数字を修正し、参照番号が0の場合は直ちに を回収する.カウントアルゴリズムの利点を参照してください.1、ゴミが見つかったらすぐに回収します.2、最大限にプログラムを一時停止します.1、循環参照の対象を回収できません.2、資源の消耗が大きい タグクリアアルゴリズムのコア思想:マークアップとクリアの2つの段階が完了しました.第1段階:すべてのオブジェクトを巡回し、オブジェクトに到達するマークが付けられています.第2段階:マークなしのオブジェクトをすべて巡回してクリアし、第1段階のマークをクリアします.最後に、対応する空間的利点を回収する:オブジェクトの循環参照が回収できない問題点を解決する:アイドルチェーンアドレスが連続していないため、空間的なデブリが発生し、空間が最大化されない を使用することができます.タグの整理アルゴリズムタグの整理アルゴリズムは、マークの明確な強化である.第1段階のマーク作業は完全に同じで、現在のオブジェクトマークに到達する.第2段階は使わず、第2段階のクリア前に整理作業を行い、移動対象の位置を位置に連続的に を生成する.
V 8エンジン認識V 8:1、現在市場で最も主流のJavaScript実行エンジンです.2、インスタントコンパイルを採用しています.スピードが速いです.3、メモリに上限(64ビット1.5 G、32ビット800 M)があります.4、V 8はメモリ空間を2つに分けて(新生代と老生代)、新生代の大きさは(32 M 124 16 M、64ビットと32ビットに対応)、新生代は生存時間が短い対象(局部変数)、老生代の大きさは(1.4 G 1240 M、64ビットと32ビットに対応) です. V 8ゴミ回収戦略 メモリは上限がありますので、世代別回収の思想を採用して、メモリは新生代と老生代に分けられています. V 8でよく使われるGCアルゴリズム:リピート、空間コピー、タグクリア、タグ整理、フラグ増分 V 8新生代のゴミ回収アルゴリズム:複製アルゴリズムとマーク整理アルゴリズムゴミ回収プロセス:新生代メモリは二つの大きな領域に分けられ、使用空間はfrom、空きスペースはto、活動対象はfrom空間に保存され、整理後に活動対象をto空間に拷問し、fromとto空間交換が完了したらfrom空間を解放する.回収の詳細説明:コピープロセスは昇進する可能性があります.(新生代のオブジェクトは老生世代に移動します.GCがまだ生きている新生代のオブジェクトは昇進またはto空間の使用率が25%を超えました.) V 8高齢者の世代のゴミのリサイクルのオブジェクト:古い世代の領域に保存され、古い世代のオブジェクトは、長い時間のオブジェクトの生存を指しています.アルゴリズム:マーククリア+マークの整理+増分マークのゴミの回収プロセス:まずマーククリアアルゴリズムを使用してごみのスペースの回収を完了し、その後、タグの整理アルゴリズムを使用して空間最適化を行います.最後にインクリメンタルマークを採用して効率的に細部の対比を最適化します.新生世代のゴミ回収は空間で時間を変えます.古い年代は標識の増分に適合していません.どのようにゴミの回収を最適化しますか? V 8ゴミ回収まとめ V 8は、現在主流のJavaScript実行エンジン である. V 8内部メモリ設定上限 V 8リサイクル思想に基づいてゴミ回収を実現する. V 8メモリは、新生代と旧世代の に分けられています. V 8ゴミ回収によくあるGCアルゴリズム Performanceツール基本的な紹介 はなぜこのツールを使うのですか?GCの目的はメモリ空間の良性循環を実現するためで、良性循環の基礎は合理的に使うので、いつも注意しなければなりません. メモリ問題の体現 ページに遅延が発生しました. ページでは、持続的に悪い性能を示す ページが表示されます.ページの性能は時間とともにどんどん悪くなります.
メモリを監視するいくつかの方法 3つのメモリ問題の定義メモリ漏れ:メモリ使用の継続的な上昇メモリの膨張:多くのデバイスでのパフォーマンスの問題は、メモリ膨張の頻繁なゴミの回収です.メモリ変化図による分析 監視メモリの方式ブラウザタスクマネージャTimelineタイミングチャート記録ヒープスナップショット検索分離DOMが頻繁にゴミ回収があるかどうか判断する. タスクマネージャ監視メモリshift+escブラウザのタスクマネージャ を起動します. Timeline記録メモリの変化 山のスナップショット機能はDOM作業原理を調べます.現在のJSヒープを見つけて、一つの写真の保存を行い、DOMを分離して、ゴミDOMを削除します.DOMツリーから離れています.DOMツリーから離れていますが、JSコードではまだ を引用されています.はゴミの回収が頻繁に行われるという欠点があるかどうかを判断します.GC作業時にはアプリケーションが停止され、頻繁で長すぎるGCはアプリケーションの仮死を招き、ユーザーが使用中にアプリケーションのカードトンを感知します.2つの方法:1、Timelineでは頻繁に上昇して下降し、2、タスクマネージャではデータが頻繁に増加して を減らす.
Performance総括1、Chromeが提供するツールは、このツールを使用することにより、メモリの使用問題を発見し、プログラム を最適化するためにプログラムのメモリの使用を監視することができます.
コードの最適化
JavaScriptメモリ管理
//
let obj = {}
//
obj.name = 'lg'
//
obj = null
//
let obj = {name: 'xm'}
let ali = obj
obj = null
//
function objGroup(obj1, obj2){
obj1.next = obj2
obj2.prev = obj1
return {
o1: obj1,
o2: obj2
}
}
let obj = objGroup({name: 'obj1'},{name: 'obj2'})
console.log(obj)
GCアルゴリズムの紹介//
const user1 = {age: 11}
const user2 = {age: 22}
const user3 = {age: 33}
const nameList = [user1.age, user2.age, user3.age ]
function fn() {
const num1 = 1
const num2 = 2
}
fn() // num1/num2
//
function fn() {
const obj1 = {}
const obj2 = {}
pbj1.name = obj2
obj2.name = obj1
return 'lg is a code'
}
fn() //obj1 obj2 ,
V 8エンジン
コードの最適化