cari
Rumahhujung hadapan webtutorial jsnodejs垃圾回收的详细介绍

nodejs垃圾回收的详细介绍

Oct 25, 2018 pm 04:08 PM
node.js

本篇文章给大家带来的内容是关于nodejs垃圾回收的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

nodejs的垃圾回收机制是由v8引擎自动管理的。

nodejs的内存限制

在一般的后端语言(php)来说,内存的使用上是没有限制的,但对于nodejs来说只能使用系统的部分----64位系统为1.4G,32位系统位0.7G。这时如果你要处理个3G文件进行数据分析,即使系统的内存为8G,在该nodejs进程内存还是会溢出。

造成上面这个问题主要是因为nodejs是基于v8的,nodejs是通过v8自己的方式来管理内存的。那v8为什么要限制堆内存的大小呢?原因有2:

1、表层原因:v8是为浏览器设计的,不大可能遇到大内存的情景。

2.深层原因:v8垃圾回收机制的限制。以1.5G的堆内存为例,v8做一次小的垃圾回收需要50ms,做一次非增量的垃圾回收要1s。垃圾回收时会引起js的线程的暂停,在这样的时间花销下,应用的性能、响应能力会直线下降。

内存限制是可以打开的:
 --max-old-space-size(老生代)
 --max-new-space-size(新生代)
 v8堆内存大小 = 老生代 + 新生代

v8垃圾回收机制
v8垃圾回收主要是基于分代式垃圾回收机制。按对象的存活时间将内存的垃圾回收进行不同的分代,分别对不同的分代内存进行不同的算法。

新生代--->存活时间较短的对象
老生代--->存活时间较长或常驻内存的对象
上面也说过,nodejs堆内存的大小是新生代内存空间加上老生代内存空间。

新生代算法
新生代主要是通过scavenge算法进行垃圾回收。

这是一种采用复制的方式来实现垃圾回收,将堆内存一分为二,每个空间称为semispace。在这2个semispace空间中,只有一个处于使用中(称为from空间),另一个处于空闲中(称为to空间)。开始分配时首先从from空间开始,当开始垃圾回收时,也是从from空间开始检查存活对象,把存活对象复制到to空间,而非存活对象占用的空间就会被释放。完成复制后,from空间和to空间角色对调。
从上面的过程可以知道,scavenge的缺点就是只使用了一半的堆内存,牺牲空间获取时间。

老生代通过mark-sweep、mark-comopact算法。

mark-sweep标记清除,分为标记、清除2个阶段。mark-sweep先在标记阶段遍历堆内存中的所有对象,并标记存活的对象;在清除阶段把没有被标记的对象清除。可以看出,scavenge只复制存活的对象,mark-sweep只清理死亡的对象。因为在新生代中存活的对象占用小部分,而在老生代中死亡对象占用小部分,这是这2中算法高效的原因。

Mark-compact标记整理,mark-sweep中会出现一个问题,在回收后,对内存会出现不连续的状态(内存碎片)。内存碎片会对后续的内存分配造成影响,因为会有这样一种情况:需要分配个大内存,而所有内存碎片都无法完成分配,这会提前触发垃圾回收,而这个回收时不必要的。Mark-compact是在Mark-sweep基础上演变而来的,它主要区别在于:对象被标记后,在整理的过程中会将存活的对象都往一端移动,移动完成后直接清除。

小结:在正常的使用过程中,v8的内存限制还是够用的,但nodejs的垃圾回收、单线程还是会影响性能。想要高性能,需要让垃圾回收尽量小。在实际的开发中要老生代对象的使用,如实现web服务的会话(session),一般会通过内存来存储(数组),在访问量大的情况下会导致老生代对象剧增,有可能造成溢出。如果要处理大内存的数据,比如读取3G的文件,我们会通过可读流的pipe()方法,这样就不会受到v8内存的限制影响,提高了nodejs程序的健壮性。

Atas ialah kandungan terperinci nodejs垃圾回收的详细介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:segmentfault. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
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.

Bagaimana saya memasang javascript?Bagaimana saya memasang javascript?Apr 05, 2025 am 12:16 AM

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.

Bagaimana cara menghantar pemberitahuan sebelum tugas bermula di kuarza?Bagaimana cara menghantar pemberitahuan sebelum tugas bermula di kuarza?Apr 04, 2025 pm 09:24 PM

Cara Menghantar Pemberitahuan Tugas di Quartz terlebih dahulu Apabila menggunakan pemasa kuarza untuk menjadualkan tugas, masa pelaksanaan tugas ditetapkan oleh ekspresi cron. Sekarang ...

Dalam JavaScript, bagaimana untuk mendapatkan parameter fungsi pada rantaian prototaip dalam pembina?Dalam JavaScript, bagaimana untuk mendapatkan parameter fungsi pada rantaian prototaip dalam pembina?Apr 04, 2025 pm 09:21 PM

Cara mendapatkan parameter fungsi pada rantaian prototaip dalam JavaScript dalam pengaturcaraan JavaScript, pemahaman dan memanipulasi parameter fungsi pada rantaian prototaip adalah tugas yang biasa dan penting ...

Apakah sebab kegagalan perpindahan gaya dinamik Vue.js dalam program WeChat Mini Webview?Apakah sebab kegagalan perpindahan gaya dinamik Vue.js dalam program WeChat Mini Webview?Apr 04, 2025 pm 09:18 PM

Analisis sebab mengapa kegagalan anjakan gaya dinamik menggunakan vue.js dalam pandangan web applet weChat menggunakan vue.js ...

Bagaimana untuk melaksanakan permintaan GET serentak untuk pelbagai pautan di Tampermonkey dan menentukan hasil pulangan dalam urutan?Bagaimana untuk melaksanakan permintaan GET serentak untuk pelbagai pautan di Tampermonkey dan menentukan hasil pulangan dalam urutan?Apr 04, 2025 pm 09:15 PM

Bagaimana untuk membuat permintaan serentak untuk pelbagai pautan dan hakim mengikut urutan untuk mengembalikan hasil? Dalam skrip Tampermonkey, kita sering perlu menggunakan pelbagai rantai ...

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
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.