cari

Rumah  >  Soal Jawab  >  teks badan

java - Full Gc过程会发生stop the world,这里jvm是怎么处理的呢?【面试题】

在不采用cms垃圾收集器或者在cms垃圾收集器初始标记和重新标记阶段,都会发生stop the world,也就是会暂停用户线程的执行,jvm是如何暂停所有用户线程的?烦请知道的朋友帮忙解答一下~
在实际场景中,可能gc的时间很短,但是暂停所有用户线程会用去很大一部分时间,这个时间又是如何得知的呢?

迷茫迷茫2889 hari yang lalu931

membalas semua(4)saya akan balas

  • PHP中文网

    PHP中文网2017-04-18 10:07:31

    JVM mempunyai sesuatu yang dipanggil "titik selamat" dan "zon selamat". Apabila GC berlaku, semua urutan akan melaksanakan ke "titik selamat" dan berhenti.
    Apabila GC diperlukan, JVM akan menetapkan bendera Apabila utas mencapai titik selamat, ia akan meninjau dan mengesan bendera ini Jika didapati bahawa GC diperlukan, utas akan menggantung dirinya dan tidak akan menyambung semula sehingga GC selesai.

    Strategi lain ialah menggantung terus semua utas apabila GC berlaku, dan kemudian mengesan sama ada semua utas berada di titik selamat Jika mereka tidak berada di titik selamat, sambung semula pelaksanaan utas dan tunggu sehingga pelaksanaan mencapai satu. titik selamat sebelum menggantung kenaikan.

    Tetapi bagi sesetengah utas yang belum memperoleh atau tidak memperoleh masa CPU, tidak ada cara untuk menunggu sehingga mencapai titik selamat Oleh itu, selagi benang berada di kawasan selamat pada masa ini, GC juga boleh dilakukan. Kawasan selamat ialah sekeping kod , hubungan rujukan objek dalam segmen kod ini tidak akan berubah, jadi selamat untuk melaksanakan GC pada masa ini.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:07:31

    Kaedah Java untuk menjeda benang dengan selamat tidak stabil, saya rasa kaedah asli harus digunakan semasa GC Penuh.
    Dapatkan perhatian dan pelajari. .

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 10:07:31

    Cuba elakkan gc penuh dan kurangkan penggunaan tatasusunan besar.

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:07:31

    GC tidak akan terlalu kerap, ia hanya akan berlaku apabila ingatan tidak mencukupi (sudah tentu ia tidak mutlak), jadi hentikan dunia tidak akan menjadi terlalu kerap, yang memastikan ia tidak akan menjejaskan urutan pengguna, dan benang pengguna mempunyai Dalam zon selamat, untuk menghentikan dunia, anda perlu menunggu semua rangkaian berada dalam zon selamat Ada kemungkinan bahawa beberapa operasi jangka panjang akan menunggu lama untuk mencapai zon selamat bermakna bahawa menghentikan dunia mungkin menunggu lebih lama daripada gc itu sendiri, dan cara untuk menyelesaikan masalah ini adalah dengan menetapkan zon selamat secara munasabah, terdapat perbezaan besar antara dapat menjeda di dalam gelung dan dapat jeda hanya selepas gelung selesai. Tetapan khusus zon keselamatan bergantung pada keputusan pengeluar jvm

    balas
    0
  • Batalbalas