cari
Rumahhujung hadapan webtutorial jsAnalisis mendalam tentang mekanisme kutipan sampah di JS

Analisis mendalam tentang mekanisme kutipan sampah di JS

Mar 02, 2023 pm 07:31 PM
javascriptMekanisme pengumpulan sampah

Jenis asas disimpan pada tindanan, dan jenis rujukan disimpan pada timbunan. JavaScript secara automatik memperuntukkan memori apabila pembolehubah (objek, rentetan, dll.) dicipta dan "secara automatik" mengeluarkannya apabila ia tidak digunakan. Proses pelepasan dipanggil kutipan sampah.

Analisis mendalam tentang mekanisme kutipan sampah di JS

Strategi kutipan sampah

Tugas yang perlu dilakukan oleh semua pemungut sampah

  • Tandai objek aktif (hidup) dan objek tidak aktif (bukan hidup) dalam ruang

  • Kitar semula atau gunakan semula memori yang diduduki oleh objek tidak aktif

  • Organisasi memori untuk mengelakkan berlakunya pemecahan memori

Apakah objek sampah?

Secara umumnya, objek yang tidak dirujuk adalah sampah dan mesti dibersihkan. Melintasi objek bermula dari akar.

Pengecualian
Jika beberapa rujukan objek membentuk cincin dan merujuk antara satu sama lain, tetapi akarnya tidak dapat mengaksesnya, objek ini juga sampah dan mesti dibersihkan.

Apakah objek akar dan objek hidup

Objek akar
mempunyai set asas yang boleh dicapai secara semula jadi nilai , atas sebab yang jelas tidak boleh dipadamkan

  • objek global tetingkap pembolehubah global, objek akar pokok dokumen DOM, dll.

objek hidup
Nilai dianggap boleh diakses jika rujukan atau rantai rujukan boleh mengakses sebarang nilai lain daripada akar

Kaedah kitar semula generasi kitar semula enjin V8

Bagi timbunan kepada generasi baru dan generasi lama.
Generasi baharu menyimpan objek dengan jangka hayat yang pendek, dan generasi lama menyimpan objek dengan jangka hayat yang panjang.

Algoritma penyalinan pengumpul sampah generasi baharu

membahagikan ingatan timbunan kepada dua bahagian, satu ialah penggunaan kawasan , ruang yang digunakan; yang lain ialah kawasan bebas, ruang dalam keadaan terbiar.

  • Objek yang baru ditambah akan disimpan dalam kawasan penggunaan Apabila kawasan penggunaan hampir penuh, sampah perlu Operasi pembersihan.

  • Pengumpul sampah generasi baharu akan menandakan objek aktif dalam kawasan penggunaan Selepas penandaan selesai, akan menyalin objek aktif dalam gunakan kawasan ke kawasan bebas . Menyelesaikan masalah blok memori bertaburan.

  • Bersihkan ruang yang diduduki oleh objek tidak aktif dalam kawasan penggunaan. Akhirnya, peranan diterbalikkan, kawasan penggunaan asal menjadi kawasan bebas baharu, dan kawasan bebas asal menjadi kawasan penggunaan baharu.

Objek dipindahkan ke generasi lama

  • Jika sesuatu objek masih bertahan selepas disalin berkali-kali, ia akan dianggap mempunyai kitaran hayat yang panjang Objek yang panjang kemudiannya dipindahkan ke generasi lama.
  • Apabila menyalin objek ke kawasan bebas dan menduduki lebih daripada 25% kawasan bebas, objek itu akan terus dipromosikan ke ruang generasi lama. Sebabnya ialah kawasan bebas asal akan menjadi kawasan terpakai baharu, dan peruntukan memori objek akan diteruskan Jika nisbah terlalu tinggi, ruang yang tersedia untuk objek baharu akan menjadi terlalu sedikit.

Kitar semula selari pengoptimuman generasi baharu

Masalah jeda penuh
JavaScript ialah satu benang Dijalankan pada utas utama, pelaksanaan skrip JavaScript akan disekat semasa pengumpulan sampah Anda perlu menunggu pengumpulan sampah selesai sebelum meneruskan pelaksanaan skrip.

Jika GC mengambil masa terlalu lama, ia boleh menyebabkan halaman menjadi beku.

Mekanisme kitar semula selari
Semasa pelaksanaan pemungut sampah pada utas utama, beberapa utas tambahan dimulakan untuk melakukan kerja kitar semula yang sama pada masa yang sama.

Analisis mendalam tentang mekanisme kutipan sampah di JS

Pengumpulan sampah generasi lama

Masalah menggunakan kaedah scavenge
1. Objek hidup Jika terdapat terlalu banyak, penyalinan objek yang masih hidup secara kerap akan mengurangkan kecekapan
2. Bazirkan separuh daripada ruang

Terutamanya gunakan kaedah tanda-jelas Apabila peruntukan memori tidak mencukupi , gunakan mark-organize Kaedah

Algoritma yang digunakan dalam tempoh pengumpulan sampah generasi lama
1. Mula-mula gunakan mark-sweep untuk melengkapkan kitar semula ruang sampah; . Gunakan mark-sweep untuk pengoptimuman ruang; atur algoritma

menyalin hanya menyalin objek hidup, manakala mark-clear hanya mengosongkan objek mati.

Objek hidup hanya menyumbang sebahagian kecil daripada generasi baharu, dan objek mati hanya menyumbang sebahagian kecil daripada generasi lama Inilah sebabnya kedua-dua kaedah kitar semula boleh diproses dengan cekap . Kelemahan

Terlalu banyak pemecahan memori. Jika memori yang besar perlu diperuntukkan, kutipan sampah akan dicetuskan lebih awal kerana ruang berpecah-belah yang tinggal tidak mencukupi untuk melengkapkan peruntukan, dan kutipan ini tidak diperlukan.

-> Algoritma penyusunan tanda Selepas menandakan objek yang masih hidup, gerakkan objek yang masih hidup ke satu hujung ruang memori Selepas pergerakan selesai, kosongkan semua memori di luar sempadan

V8 telah mengoptimumkan pengumpul sampah generasi lama, bertukar daripada penandaan jeda penuh kepada penandaan tambahan .

Tukar kutipan sampah kepada tempoh singkat kutipan sampah GC

Jika strategi penandaan hitam dan putih (hidup dan mati) diguna pakai, maka pemungut sampah melaksanakan kenaikan Selepas kitar semula, utas utama didayakan selepas jeda untuk melaksanakan sekeping kod JavaScript dalam aplikasi Kemudian apabila pengumpul sampah dimulakan semula, terdapat hitam dan putih dalam ingatan, dan kami tidak tahu ke mana hendak pergi seterusnya

.

Pembersihan malas
Pembersihan malas bermula selepas penandaan tambahan selesai. Apabila penandaan tambahan selesai, jika memori yang tersedia semasa cukup untuk kita melaksanakan kod dengan cepat, kita sebenarnya tidak perlu membersihkan memori dengan segera Kita boleh melambatkan sedikit proses pembersihan dan membiarkan kod skrip JavaScript dijalankan terlebih dahulu. Tidak perlu membersihkan semua sekali gus Selepas semua memori objek yang tidak aktif dikosongkan, anda boleh membersihkannya satu persatu mengikut keperluan sehingga semua memori objek tidak aktif dikosongkan, dan kemudian melakukan penandaan tambahan
Analisis mendalam tentang mekanisme kutipan sampah di JS

kaedah penandaan tiga warna Jeda dan sambung semula

Kendalian tanda kaedah penandaan tiga warna boleh dilaksanakan secara beransur-ansur tanpa mengimbas keseluruhan ruang memori setiap kali, dan boleh dipadankan dengan baik dengan kitar semula tambahan untuk jeda dan operasi pemulihan, dengan itu mengurangkan masa jeda penuh

Putih: Objek tidak bertandaKelabu: Itu sendiri ditanda, dan. objek rujukan objek ini tidak ditanda

Hitam: Kedua-dua objek itu sendiri dan objek rujukan objek (objek yang ditunjuk oleh anak panah) ditandakan

  • Bermula daripada sekumpulan objek akar,
  • mula-mula bahagikan kumpulan ini Objek akar ditanda kelabu dan ditolak ke dalam lembaran kerja penandaan Apabila pengitar semula memaparkan objek dari lembaran kerja penandaan dan mengakses objek rujukannya, ia menukar dirinya daripada kelabu. kepada hitam dan menukar objek rujukan seterusnya adalah kelabu
  • dan teruskan ke bawah sehingga tiada objek yang boleh ditandakan sebagai kelabu, iaitu tiada objek yang boleh dicapai objek putih tidak dapat dicapai, iaitu Menunggu untuk dikitar semula.

Gunakan sama ada terdapat nod kelabu dalam memori semasa untuk menentukan sama ada keseluruhan tanda telah selesai Jika tiada nod kelabu, masukkan terus fasa pembersihan Jika masih terdapat tanda kelabu, teruskan pelaksanaan terus dari nod kelabu semasa pemulihan Anda boleh Analisis mendalam tentang mekanisme kutipan sampah di JS

menulis halangan

Selepas jeda blok tanda GC yang lengkap, program tugasan dilaksanakan dan hubungan rujukan objek diubah suai.

Andaikan bahawa dalam segmentasi tambahan pertama, semua ABC ditandakan hitam, dan kemudian skrip JavaScript dilaksanakan, B->D, untuk memulakan segmentasi tambahan kedua. Objek baharu D pada mulanya berwarna putih, tetapi tiada objek kelabu pada masa ini, bermakna semua penandaan telah selesai dan pembersihan D akan dikitar semula semasa fasa pembersihan. Ini tidak betul. V8 memperkenalkan mekanisme penghalang tulis Setelah objek hitam merujuk objek putih, mekanisme ini akan menukar objek putih yang dirujuk menjadi kelabu
.


Analisis mendalam tentang mekanisme kutipan sampah di JS

Kitar semula serentak


Kitar semula selari menyekat benang utama

Tanda kenaikan meningkatkan jumlah masa jeda, Kurangkan penggunaan throughputSemasa utas utama sedang melaksanakan JavaScript, utas tambahan boleh melengkapkan operasi pengumpulan sampah di latar belakang
  • [Pembelajaran yang disyorkan:
  • Lanjutan Tutorial JavaScript
  • ]

Atas ialah kandungan terperinci Analisis mendalam tentang mekanisme kutipan sampah di JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:csdn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Apr 11, 2025 am 08:22 AM

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript: meneroka serba boleh bahasa webJavaScript: meneroka serba boleh bahasa webApr 11, 2025 am 12:01 AM

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Evolusi JavaScript: Trend Semasa dan Prospek Masa DepanEvolusi JavaScript: Trend Semasa dan Prospek Masa DepanApr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Demystifying JavaScript: Apa yang berlaku dan mengapa pentingDemystifying JavaScript: Apa yang berlaku dan mengapa pentingApr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Adakah Python atau JavaScript lebih baik?Adakah Python atau JavaScript lebih baik?Apr 06, 2025 am 12:14 AM

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular