JavaRush /Blog Java /Random-MS /Belajar ke Google | Tahap 4 | Kuliah 11
sunshine4545
Tahap
Минск

Belajar ke Google | Tahap 4 | Kuliah 11

Diterbitkan dalam kumpulan
Belajar ke Google |  Tahap 4 |  Kuliah 11 - 1

1. Bagaimana pemungut sampah berfungsi di Jawa

Pengumpul sampah ialah proses keutamaan rendah yang berjalan secara berkala dan membebaskan memori yang digunakan oleh objek yang tidak diperlukan lagi. Pengumpul sampah berjalan di latar belakang, selari dengan program, dalam benang berasingan. Asas kutipan sampah bukanlah pengiraan rujukan, tetapi pemisahan objek kepada dua jenis - boleh dicapai dan tidak boleh dicapai. Objek dianggap boleh dicapai (hidup) jika ia dirujuk oleh objek lain yang boleh dicapai (hidup). Kebolehcapaian dikira daripada benang. Benang berjalan sentiasa dianggap boleh dicapai (hidup), walaupun tiada siapa yang merujuknya. Semua objek di Jawa disimpan dalam kawasan memori khas yang dipanggil heap. Semua objek dalam program boleh dibahagikan kepada dua jenis - secara relatifnya, objek mudah dan "berumur panjang". Objek "berumur panjang" ialah objek yang terselamat daripada banyak kutipan sampah. Selalunya mereka akan wujud sehingga akhir program. Akibatnya, timbunan biasa, di mana semua objek yang dicipta disimpan, dibahagikan kepada beberapa bahagian. Bahagian pertama mempunyai nama yang indah - Eden (Alkitabiah "Taman Eden"), objek pergi ke sini selepas ia dicipta. Di bahagian inilah memori diperuntukkan untuk objek baharu apabila kita menulis baharu. Banyak objek boleh dibuat, dan apabila ruang kehabisan di kawasan ini, pengumpulan sampah "cepat" pertama bermula. Ia mesti dikatakan bahawa pemungut sampah sangat pintar dan memilih algoritma kerja bergantung pada apa yang lebih dalam timbunan - sampah atau objek kerja. Jika hampir semua objek adalah sampah, pengumpul menandakan objek "hidup" dan memindahkannya ke kawasan ingatan lain, selepas itu kawasan semasa dibersihkan sepenuhnya. Sekiranya terdapat sedikit sampah dan kebanyakannya diduduki oleh objek hidup, ia menandakan sampah, membersihkannya, dan menyusun objek yang tinggal. Kawasan ingatan di mana semua objek yang bertahan sekurang-kurangnya satu kutipan sampah dipindahkan dipanggil Survival Space. Survival Space pula dibahagikan kepada beberapa generasi. Setiap objek diberikan generasi berdasarkan jumlah kutipan sampah yang telah dialaminya. Jika ada, ia tergolong dalam "Generasi 1", jika 5 - kepada "Generasi 5". Bersama-sama, Eden dan Survival Space membentuk kawasan yang dipanggil Generasi Muda. Selain Generasi Muda, terdapat satu lagi kawasan ingatan dalam timbunan - Generasi Lama ("generasi lama"). Ini adalah objek yang sangat lama yang telah terselamat daripada banyak kutipan sampah. Lebih menguntungkan untuk menyimpannya secara berasingan daripada yang lain. Dan hanya apabila kawasan Generasi Lama penuh, i.e. Walaupun terdapat begitu banyak objek yang berumur panjang dalam program yang tidak mempunyai memori yang mencukupi, pengumpulan sampah yang lengkap dilakukan. Ia memproses bukan hanya satu kawasan memori, tetapi secara amnya semua objek yang dicipta oleh mesin Java. Sememangnya, ia memerlukan lebih banyak masa dan sumber. Itulah sebabnya diputuskan untuk menyimpan objek tahan lama secara berasingan. Apabila ruang kehabisan di kawasan lain, apa yang dipanggil "pengumpulan sampah pantas" dijalankan. Ia meliputi hanya satu kawasan, dan disebabkan ini ia lebih menjimatkan dan lebih pantas. Pada akhirnya, Apabila kawasan untuk penduduk lama sudah tersumbat, pembersihan penuh memasuki pergaduhan. Oleh itu, alat yang paling "berat" digunakan oleh pemasang hanya apabila ia tidak lagi diperlukan. Belajar ke Google |  Tahap 4 |  Kuliah 11 - 2

2. Apakah jenis pengutip sampah yang ada?

Java mempunyai tujuh jenis pengumpul sampah:
  1. Pemungut Sampah Bersiri
  2. Pemungut Sampah Selari
  3. Pengumpul Sampah CMS
  4. G1 Pemungut Sampah
  5. Pengumpul Sampah Epsilon
  6. Z pemungut sampah
  7. Pengumpul Sampah Shenandoah

3. Apakah "generasi" objek

Semua objek dalam Survival Space dibahagikan kepada generasi. Setiap objek diberikan generasi berdasarkan jumlah kutipan sampah yang telah dialaminya. Jika ada, ia tergolong dalam "Generasi 1", jika 5 - kepada "Generasi 5".

4. Untuk apa SoftReference digunakan?

Objek yang dirujuk hanya oleh rujukan lembut boleh dikumpul sampah jika program kehabisan memori. Jika atur cara tiba-tiba kehabisan memori, sebelum membuang OutOfMemoryException, pengumpul sampah akan memadam semua objek yang dirujuk oleh pautan lembut dan cuba memperuntukkan memori kepada program itu sekali lagi. Objek yang disimpan daripada mati hanya oleh SoftReference boleh bertahan dalam sebarang bilangan kutipan sampah dan kemungkinan besar akan dimusnahkan jika program kehabisan memori.

5. Contoh penggunaan SoftReference

SoftReferences direka khusus untuk caching. Mari kita anggap bahawa program klien kerap meminta pelbagai data daripada program pelayan. Kemudian program pelayan boleh cache sebahagian daripada mereka, menggunakan SoftReference untuk ini. Jika objek yang disimpan daripada kematian oleh rujukan lembut mengambil sebahagian besar memori, maka pengumpul sampah hanya akan memadamkannya dan itu sahaja.

6. Contoh penggunaan WeakReference

Sekiranya terdapat hanya rujukan yang lemah kepada objek, maka objek ini masih hidup, tetapi ia akan dimusnahkan semasa pengumpulan sampah seterusnya. Objek yang disimpan daripada mati oleh WeakReference sahaja tidak akan bertahan dalam kutipan sampah seterusnya. Tetapi sehingga ia berlaku, anda boleh mendapatkannya dengan memanggil kaedah get()pada WeakReference dan memanggil kaedahnya atau melakukan sesuatu yang lain. Contoh penggunaan WeakReference ialah WeakHashMap.

7. Mengapa WeakHashMap diperlukan

WeakHashMap ialah HashMap yang kuncinya adalah rujukan yang lemah - WeakReference. Anda menyimpan pasangan objek dalam WeakHashMap - kunci dan nilai. Tetapi WeakHashMap tidak merujuk kepada kunci secara langsung, tetapi melalui WeakReference. Oleh itu, apabila objek yang digunakan sebagai kunci menjadi tidak dapat dicapai, ia akan dimusnahkan semasa kutipan sampah seterusnya. Ini bermakna bahawa nilai mereka akan dialih keluar secara automatik daripada WeakHashMap. WeakHashMap sangat mudah untuk menyimpan maklumat tambahan untuk beberapa objek. Pertama, ia sangat mudah diperoleh jika anda menggunakan objek itu sendiri sebagai kunci. Kedua, jika objek dimusnahkan, ia dan semua data yang berkaitan dengannya akan hilang daripada HashMap. Sebagai contoh, program ini mempunyai benang yang memantau kerja beberapa objek tugas dan menulis maklumat tentangnya ke log. Kemudian benang ini boleh menyimpan objek yang dijejaki dalam WeakHashMap sedemikian. Sebaik sahaja objek tidak diperlukan lagi, pemungut sampah akan memadamkannya dan rujukan kepadanya daripada WeakHashMap akan dipadamkan secara automatik.

8. Apakah itu pembalak

Objek Logger digunakan untuk log mesej untuk sistem atau komponen aplikasi tertentu. Log ialah senarai peristiwa yang berlaku. Selalunya, maklumat tentang parameter kaedah yang dipanggil, semua ralat yang dipintas, dan banyak maklumat perantaraan ditulis pada log. Keseluruhan proses pembalakan terdiri daripada tiga bahagian.
  • Bahagian pertama ialah mengumpul maklumat.
  • Bahagian kedua ialah menapis maklumat yang dikumpul.
  • Bahagian ketiga ialah rakaman maklumat yang dipilih.

9. Bagaimana untuk menyediakan pembalak

  1. Tambahkan kebergantungan pada pom.xml.
  2. Tambahkan fail log4j.properties pada sumber.
    Biasanya, tetapan logger log4j ditetapkan dalam fail log4j.properties. Dalam fail ini, anda boleh menentukan beberapa pelengkap - objek di mana data akan ditulis.
  3. Tambahkan ke kelas dengan logik perniagaan private static final Logger log = Logger.getLogger(ххх.class);.
Digunakan:
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION