Rumah >Java >javaTutorial >Java dan Misteri Memori yang Menghilang!
Di tanah ajaib Tanah Jawa hiduplah sebuah robot kecil bernama JVM-bot. JVM-bot mempunyai tugas yang sangat penting: menjejaki ingatan! Masalahnya, ingatan di Tanah Jawa adalah seperti balang biskut besar dan semua orang mahukan sekepingnya! Oleh itu, JVM-bot perlu memastikan bahawa ia mencukupi untuk semua orang.
JVM-bot mempunyai tiga penunjuk khas - alat untuk memantau semua memori:
totalMemory - Penunjuk ini menunjukkan JVM-bot berapa banyak kuki (atau memori) yang sudah disimpannya. Kaedah ini menunjukkan jumlah memori semasa yang diperuntukkan oleh JVM, yang berguna untuk memahami beban semasa. Pada asasnya, totalMemory ialah "belanjawan" memori yang sudah ada dalam poket kami untuk digunakan.
freeMemory - Yang ini memberitahunya berapa banyak kuki yang tinggal dalam balangnya (dalam ingatan yang dia sudah ada). Kaedah ini menunjukkan jumlah memori yang masih boleh digunakan dalam totalMemory. Contohnya, jika totalMemory ialah 500 MB dan freeMemory ialah 200 MB, ini bermakna 300 MB sudah diambil. Kaedah ini membantu kami memahami berapa banyak memori kosong yang ada sekarang dan bila kita harus memikirkan tentang mengoptimumkan.
maxMemory - Dan ini adalah penunjuk terbesar semua! Ia menunjukkan bilangan maksimum kuki yang boleh dimiliki oleh JVM-bot. Jika ia penuh, anda tidak boleh menambah lebih banyak kuki! Contohnya, jika anda mempunyai set maksimum kepada 1024 MB, ini ialah had atas dan apabila ia dicapai, JVM akan mula menggunakan kuki maya (memori), yang akan mengurangkan prestasi dengan ketara.
Berikut ialah contoh kod yang menunjukkan cara JVM-bot boleh menggunakan penunjuk ini:
public class MemoryExample { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // Получаем текущую память long totalMemory = runtime.totalMemory(); // Общее количество памяти long freeMemory = runtime.freeMemory(); // Свободная память long maxMemory = runtime.maxMemory(); // Максимально доступная память System.out.println("Общая память: " + totalMemory + " байт"); System.out.println("Свободная память: " + freeMemory + " байт"); System.out.println("Максимальная память: " + maxMemory + " байт"); } }
JVM-bot suka menganggap dirinya sebagai penjaga kuki (memori), menggunakan penunjuknya untuk mengawasi serpihan berharga yang ditinggalkan.
Pada suatu hari yang cerah, JVM-bot hanya memikirkan perniagaannya sendiri, memantau penunjuknya, apabila tiba-tiba... BAM! Sekumpulan Algoritma Gremlin kecil yang lincah telah muncul! Gremlin ini sangat menyukai kuki seperti bot JVM, dan mereka lapar!
Mereka mula memakan kuki bot JVM, menggigit sana sini. Penunjuk freeMemory JVM-bot mula jatuh dengan cepat apabila gremlin memakan kuki!
"Oh tidak!" JVM-bot berseru sambil menggosok kepala robotnya. "Jika gremlin ini makan terlalu banyak biskut, tidak akan cukup lagi untuk seluruh Tanah Jawa!"
JVM-bot mempunyai idea yang bernas! Dia menggunakan meter ingatannya untuk melihat bilangan biskut yang dimakan gremlin.
JVM-bot mula-mula melihat ke dalam freeMemory untuk menyemak jumlah kuki yang tinggal sebelum gremlin mula menjamunya.
long initialFreeMemory = runtime.freeMemory(); System.out.println("Свободная память перед едой гремлинов: " + initialFreeMemory + " байт");
Kemudian dia berkata, "Baiklah, Gremlins, mari kita lihat apa yang boleh kamu lakukan!" dan biarkan mereka berlari bebas, menggigit kuki.
Selepas gremlins makan, JVM-bot menyemak freeMemory sekali lagi:
long remainingFreeMemory = runtime.freeMemory(); System.out.println("Свободная память после еды гремлинов: " + remainingFreeMemory + " байт");
Akhir sekali, JVM-bot melakukan pengiraan untuk mengetahui bilangan kuki yang hilang. Ia adalah kenangan yang ditelan oleh gremlin!
long consumedMemory = initialFreeMemory - remainingFreeMemory; System.out.println("Съеденная память: " + consumedMemory + " байт");
Petunjuk Memori Super JVM-bot!
Untuk menjejaki segala-galanya, JVM-bot membina sendiri Penunjuk Memori! Ia kelihatan seperti balang biskut dengan bahagian berwarna:
Hijau untuk kuki yang telah dimakan (Memori Digunakan).
Biru untuk biskut yang masih selamat di dalam balang (Memori Percuma).
Kelabu untuk kuki yang tidak boleh dibakar (Memori Maksimum).
Dengan cara ini, bot JVM boleh memerhatikan segala-galanya dan memberitahu bila masa untuk membakar lebih banyak kuki!
Butang Merah Besar "GC" - Senjata Rahsia JVM-bot!
Dan akhirnya, JVM-bot mempunyai butang merah besar yang tertera GC (singkatan untuk Pengumpulan Sampah, sudah tentu!). Ini adalah alat mengupas kuki kecemasannya. Jika keadaan menjadi tidak terkawal dan gremlin meninggalkan serpihan di mana-mana, bot JVM akan menekan butang itu dan woop! - semua serbuk hilang, meninggalkan JVM-bot dengan ingatan yang bersih dan segar semula.
Contoh kod untuk menghubungi pemungut sampah:
public class MemoryExample { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // Получаем текущую память long totalMemory = runtime.totalMemory(); // Общее количество памяти long freeMemory = runtime.freeMemory(); // Свободная память long maxMemory = runtime.maxMemory(); // Максимально доступная память System.out.println("Общая память: " + totalMemory + " байт"); System.out.println("Свободная память: " + freeMemory + " байт"); System.out.println("Максимальная память: " + maxMemory + " байт"); } }
Petua daripada JVM-bot: Cara Mengekalkan Memori Gremlins Di Bawah Kawalan!
Untuk memastikan ingatan selamat, JVM-bot mempunyai beberapa helah:
Tekan butang GC sebelum mengukur untuk mengelakkan sebarang serpihan tambahan. Membersihkan serpihan sebelum mengambil ukuran membantu mendapatkan hasil yang lebih tepat. Ini, sudah tentu, tidak selalu diperlukan, tetapi ia berguna untuk ketepatan pengukuran.
Jangan mengukur terlalu kerap! JVM-bot mengukur hanya apabila ia benar-benar perlu (elakkan mengukur dalam gelung), jika tidak penunjuknya mungkin haus. Mengakses memori terlalu kerap melalui Runtime boleh membuat kelewatan kecil. Sebaliknya, ambil ukuran tunggal pada permulaan dan penghujung algoritma.
Gunakan unit mesra seperti megabait (MB) supaya semua orang boleh faham.
Untuk mengukur berapa banyak memori yang diambil oleh sekeping kod tertentu, seperti algoritma, dalam ingatan, kita memerlukan sedikit helah:
Kami mengukur memori awal sebelum melaksanakan kod.
Kami melaksanakan algoritma kami.
Kami mengukur ingatan selepas pelaksanaan.
Kami dapati perbezaan antara ukuran.
Contoh kod di bawah akan menunjukkan cara ini boleh dilakukan:
public class MemoryExample { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // Получаем текущую память long totalMemory = runtime.totalMemory(); // Общее количество памяти long freeMemory = runtime.freeMemory(); // Свободная память long maxMemory = runtime.maxMemory(); // Максимально доступная память System.out.println("Общая память: " + totalMemory + " байт"); System.out.println("Свободная память: " + freeMemory + " байт"); System.out.println("Максимальная память: " + maxMemory + " байт"); } }
Jadi JVM-bot menjadi wira Tanah Jawa, melindungi kuki (atau ingatan) untuk semua orang, tidak kira berapa ramai gremlin cuba memakannya. Ingat: dengan JVM-bot dan penunjuk ingatannya, akan sentiasa ada kuki yang mencukupi untuk semua orang di Tanah Jawa! ?
Atas ialah kandungan terperinci Java dan Misteri Memori yang Menghilang!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!