Jadual Kandungan
虚拟机栈 " >虚拟机栈
-XX:MaxMetaspaceSize: Saiz maksimum metaspace -XX:CompressedClassSpaceSize: Saiz ruang untuk menyimpan bahagian metadata kelas Class -Xss: Kapasiti memori tindanan. " >-XX:MetaspaceSize: Saiz nilai awal metaspace -XX:MaxMetaspaceSize: Saiz maksimum metaspace -XX:CompressedClassSpaceSize: Saiz ruang untuk menyimpan bahagian metadata kelas Class -Xss: Kapasiti memori tindanan.
Rumah Java javaTutorial Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Aug 15, 2023 pm 05:16 PM
jvm

Hari ini, mari berbincang dengan anda tentang topik ruang ingatan JVM Ini juga merupakan soalan yang sering ditanya dalam temu bual di syarikat Internet peringkat pertama. Okey, jangan bercakap lagi, mari kita ke topik utama hari ini.

JVM akan membahagikan memori kepada kawasan data yang berbeza, jadi di manakah kelas yang dimuatkan diperuntukkan?

Gambar di bawah menunjukkan pelbagai kawasan ingatan, termasuk: kawasan kaedah, timbunan, tindanan mesin maya, tindanan kaedah tempatan dan pembilang program.

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Kaedah kawasan

Kawasan kaedah digunakan untuk menyimpan data seperti maklumat kelas, pemalar, pembolehubah statik, kod yang disusun oleh pengkompil tepat dalam masa, dsb. oleh mesin maya. Lima peringkat pemuatan kelas disebut dalam Pemuatan Kelas. Dalam fasa pemuatan, struktur storan statik yang diwakili oleh aliran bait akan ditukar kepada struktur data masa jalan bagi kawasan kaedah Dalam fasa penyediaan, semua memori yang digunakan oleh pembolehubah akan diperuntukkan dalam kawasan kaedah.

Program Counter

Ayuh kod mudah, kira (1+2)*3 dan kembali

public int cal() {
    int a = 1;
    int b = 2;
    int c = 3;
    return (a + b) * c;
}
Salin selepas log masuk

Apabila kod ini dimuatkan ke dalam mesin maya, ia menjadi bait berikut Apabila melaksanakan kod, ia akan dilaksanakan baris demi baris.

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Java berbilang benang Selepas benang bertukar kembali, ia perlu tahu di mana kedudukan pelaksanaan asal. Pembilang program digunakan untuk merekodkan kedudukan pelaksanaan ini Untuk memastikan pembilang antara utas tidak menjejaskan satu sama lain, kawasan memori ini adalah peribadi kepada utas.

虚拟机栈

虚拟机栈也是线程私有的,生命周期与线程相同。每个线程都有自己的虚拟机栈,如果这个线程执行了一个方法,就会创建一个栈帧,方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。比如下面的例子,fun1调用fun2,fun2调用fun3,fun3创建Hello对象。

public void fun1() {
    fun2();
}

public void fun2() {
    fun3();
}

public void fun3() {
    Hello hello = new Hello();
}
Salin selepas log masuk

调用的时候,流程图如下:

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

执行完成的时候,流程图如下:

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。局部变量主要是存放方法参数以及方法内部定义的局部变量,操作数栈是一个后入先出栈,当方法刚刚开始执行的时候,这个方法的操作数栈是空的,在方法的执行过程中,会有各种字节码指令往操作数栈中写入和提取内容,也就是出栈/入栈操作。

我们通过上面(1+2)*3的例子,把方法区、程序计数器、虚拟机栈的协同工作理一下。首先通过javap查看它的字节码,经过类加载器加载后,此时这个字节码存在方法区中。stack表示栈深度是2,locals是本地变量的slot个数,args_size是入参的个数,默认是this。栈的深度、本地变量个数,入参个数,都是在编译器决定的。

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

如下图,指令的位置是方法区,局部变量和操作数栈的位置是虚拟机栈,程序计数器就在程序计数器(这个下面的图就不再重复)。当执行偏地址为0的指令的时候,程序计数器为0,局部变量第一个值是this,当前的指令就是方法区0:iconst_1,指令iconst_1就是把int常量值1进栈,这个1就到了虚拟机栈的操作数栈中。

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

当执行偏地址为1的指令的时候,程序计数器为1,把操作数栈的值赋值到局部变量,此时操作数栈清空了,局部变量多了一个1,这条指令执行完,就是对应上面int a=1的语句。

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Selain itu, tugasan bagi dua pernyataan b dan c sepadan dengan arahan 2, 3, 4, dan 5, yang tidak akan diulang di sini. Selepas melaksanakan 5, seperti yang ditunjukkan dalam rajah di bawah:

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Apabila melaksanakan 6, iload_1 dilaksanakan, iaitu untuk menolak pembolehubah tempatan jenis int kedua ke bahagian atas timbunan.

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Apabila melaksanakan 7, iload_2 dilaksanakan, yang bermaksud menolak pembolehubah tempatan jenis int ketiga ke bahagian atas timbunan Pembolehubah di sini ialah 2.

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Apabila melaksanakan 8, ia adalah pernyataan iadd, yang bermaksud bahawa dua elemen jenis int di bahagian atas tindanan akan muncul keluar daripada tindanan, dan kemudian ditolak ke bahagian atas tindanan selepas hasilnya diperolehi.

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Apabila melaksanakan 9, tetapkan elemen 3 di bahagian atas tindanan kepada pembolehubah tempatan kelima.

Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Apabila pelaksanaan mencapai 11, nilai pembolehubah tempatan kelima ditolak ke bahagian atas tindanan Apabila pelaksanaan mencapai 13, nilai pembolehubah tempatan keempat ditolak ke bahagian atas tindanan 14, dua nilai di bahagian atas timbunan ditolak Elemen jenis int muncul dari timbunan, dan hasil darab ditolak ke atas timbunan Apabila 15 dilaksanakan, elemen jenis int di bahagian atas timbunan semasa dikembalikan daripada kaedah semasa. Ini hampir sama dengan yang di atas, jadi saya tidak akan menerangkan secara terperinci.

Heap

Satu-satunya tujuan kawasan ingatan timbunan ialah untuk menyimpan tika objek, dan hampir semua tika objek memperuntukkan memori di sini. Contohnya, fun1 di atas memanggil fun2, fun2 memanggil fun3 dan fun3 mencipta objek Hello. Apabila objek dicipta dalam kaedah fun3, ia dicipta dalam timbunan, dan alamat diberikan kepada pembolehubah tempatan fun3. Timbunan Java juga boleh dibahagikan kepada: generasi baru dan generasi lama;

. Apabila benang memanggil kaedah, ia akan mencipta bingkai tindanan, membaca kod bait dalam kawasan kaedah dan melaksanakan arahan Apabila arahan dilaksanakan, kedudukan pelaksanaan akan direkodkan dalam pembilang program akan dibuat dalam ingatan timbunan Selepas kaedah dilaksanakan, bingkai tindanan akan muncul.
Penjelasan kes Ruang memori JVM (koleksi disyorkan)

Parameter berkaitan

-XX: PermSize: Kapasiti memori penjanaan kekal.
Penjelasan kes Ruang memori JVM (koleksi disyorkan)-XX:MaxPermSize: Kapasiti memori maksimum bagi generasi kekal.

-XX:MetaspaceSize: Saiz nilai awal metaspace -XX:MaxMetaspaceSize: Saiz maksimum metaspace -XX:CompressedClassSpaceSize: Saiz ruang untuk menyimpan bahagian metadata kelas Class -Xss: Kapasiti memori tindanan.

-Xms: Kapasiti memori timbunan.

-Xmx: Kapasiti memori maksimum timbunan, biasanya sama dengan tetapan -Xms, untuk mengelakkan kesan pengembangan masa jalan.

-Xmn: Kapasiti memori generasi baharu, generasi lama ialah kapasiti memori timbunan - kapasiti memori generasi baharu

-XX: SurvivorRatio=8: Generasi baharu juga dibahagikan kepada ruang Eden, Dari ruang Survivor dan ruang To Survivor , tetapkan kepada 8 Mewakili ruang Eden: Dari ruang Survivor: Untuk ruang Survivor = 8:1:1 Contohnya, jika generasi baharu mempunyai 10M, maka ruang Eden menduduki 8M, dan ruang Dari Survivor dan Untuk Ruang Survivor masing-masing menduduki 1M.

Atas ialah kandungan terperinci Penjelasan kes Ruang memori JVM (koleksi disyorkan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

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.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Alat pemantauan JVM yang diedarkan, sangat praktikal! Alat pemantauan JVM yang diedarkan, sangat praktikal! Aug 15, 2023 pm 05:15 PM

Projek ini direka untuk memudahkan pembangun memantau berbilang JVM hos jauh dengan lebih cepat Jika projek anda adalah Spring boot, ia adalah sangat mudah untuk disepadukan. Jika ia bukan but Spring, anda boleh cepat memulakan program but Spring dan memperkenalkannya sendiri pakej Jar sudah memadai

Penjelasan terperinci tentang parameter baris arahan JVM: senjata rahsia untuk mengawal operasi JVM Penjelasan terperinci tentang parameter baris arahan JVM: senjata rahsia untuk mengawal operasi JVM May 09, 2024 pm 01:33 PM

Parameter baris arahan JVM membolehkan anda melaraskan tingkah laku JVM pada tahap yang terperinci. Parameter biasa termasuk: Tetapkan saiz timbunan Java (-Xms, -Xmx) Tetapkan saiz generasi baharu (-Xmn) Dayakan pengumpul sampah selari (-XX:+UseParallelGC) Kurangkan penggunaan memori kawasan Survivor (-XX: -ReduceSurvivorSetInMemory) Hilangkan lebihan Hapuskan kutipan sampah (-XX:-EliminateRedundantGCs) Cetak maklumat kutipan sampah (-XX:+PrintGC) Gunakan pemungut sampah G1 (-XX:-UseG1GC) Tetapkan masa jeda kutipan sampah maksimum (-XX:MaxGCPauXX

Perkara utama pengurusan memori JVM dan langkah berjaga-jaga Perkara utama pengurusan memori JVM dan langkah berjaga-jaga Feb 20, 2024 am 10:26 AM

Perkara utama dan langkah berjaga-jaga untuk menguasai penggunaan memori JVM JVM (JavaVirtualMachine) ialah persekitaran di mana aplikasi Java dijalankan, dan yang paling penting ialah pengurusan memori JVM. Mengurus memori JVM dengan betul bukan sahaja dapat meningkatkan prestasi aplikasi, tetapi juga mengelakkan masalah seperti kebocoran memori dan limpahan memori. Artikel ini akan memperkenalkan perkara utama dan pertimbangan penggunaan memori JVM dan menyediakan beberapa contoh kod khusus. Pembahagian memori JVM Memori JVM terutamanya dibahagikan kepada kawasan berikut: Heap (He

Analisis fungsi dan prinsip mesin maya JVM Analisis fungsi dan prinsip mesin maya JVM Feb 22, 2024 pm 01:54 PM

Pengenalan kepada analisis fungsi dan prinsip mesin maya JVM: Mesin maya JVM (JavaVirtualMachine) ialah salah satu komponen teras bahasa pengaturcaraan Java, dan ia merupakan salah satu titik jualan terbesar Java. Peranan JVM adalah untuk menyusun kod sumber Java ke dalam kod bait dan bertanggungjawab untuk melaksanakan kod bait ini. Artikel ini akan memperkenalkan peranan JVM dan cara ia berfungsi serta menyediakan beberapa contoh kod untuk membantu pembaca memahami dengan lebih baik. Fungsi: Fungsi utama JVM adalah untuk menyelesaikan masalah mudah alih program Java pada platform yang berbeza.

Ralat Java: Ralat limpahan memori JVM, cara menangani dan mengelak Ralat Java: Ralat limpahan memori JVM, cara menangani dan mengelak Jun 24, 2023 pm 02:19 PM

Java ialah bahasa pengaturcaraan yang popular Semasa pembangunan aplikasi Java, anda mungkin menghadapi ralat limpahan memori JVM. Ralat ini biasanya menyebabkan aplikasi ranap, menjejaskan pengalaman pengguna. Artikel ini akan meneroka punca ralat limpahan memori JVM dan cara menangani dan mengelakkan ralat tersebut. Apakah ralat limpahan memori JVM? Mesin Maya Java (JVM) ialah persekitaran berjalan untuk aplikasi Java. Dalam JVM, memori dibahagikan kepada beberapa kawasan, termasuk timbunan, kawasan kaedah, tindanan, dll. Timbunan digunakan untuk menyimpan objek yang dicipta

Bagaimana untuk melaraskan saiz memori timbunan JVM dengan cekap? Bagaimana untuk melaraskan saiz memori timbunan JVM dengan cekap? Feb 18, 2024 pm 01:39 PM

Tetapan parameter memori JVM: Bagaimana untuk melaraskan saiz memori timbunan secara munasabah? Dalam aplikasi Java, JVM ialah komponen utama yang bertanggungjawab untuk menguruskan memori. Antaranya, ingatan timbunan digunakan untuk menyimpan contoh objek Tetapan saiz ingatan timbunan mempunyai kesan penting ke atas prestasi dan kestabilan aplikasi. Artikel ini akan memperkenalkan cara melaraskan saiz memori timbunan secara munasabah, dengan contoh kod tertentu. Pertama, kita perlu memahami beberapa pengetahuan asas tentang memori JVM. Memori JVM dibahagikan kepada beberapa kawasan, termasuk ingatan timbunan, ingatan tindanan, kawasan kaedah, dll. dalam

Program Java untuk menyemak sama ada JVM ialah 32-bit atau 64-bit Program Java untuk menyemak sama ada JVM ialah 32-bit atau 64-bit Sep 05, 2023 pm 06:37 PM

Sebelum menulis program java untuk menyemak sama ada JVM adalah 32-bit atau 64-bit, mari kita bincangkan tentang JVM dahulu. JVM ialah mesin maya java, bertanggungjawab untuk melaksanakan bytecode. Ia adalah sebahagian daripada Java Runtime Environment (JRE). Kita semua tahu bahawa java adalah bebas platform, tetapi JVM bergantung pada platform. Kami memerlukan JVM berasingan untuk setiap sistem pengendalian. Jika kami mempunyai kod bait mana-mana kod sumber java, kami boleh menjalankannya dengan mudah pada mana-mana platform disebabkan oleh JVM. Keseluruhan proses pelaksanaan fail java adalah seperti berikut - Pertama, kami menyimpan kod sumber java dengan sambungan .java dan pengkompil menukarnya kepada kod bait dengan sambungan .class. Ini berlaku pada masa penyusunan. Sekarang, pada masa tayangan, J

Menjelaskan prinsip kerja JVM: Penerokaan mendalam tentang prinsip mesin maya Java Menjelaskan prinsip kerja JVM: Penerokaan mendalam tentang prinsip mesin maya Java Feb 18, 2024 pm 12:28 PM

Penjelasan terperinci tentang prinsip JVM: Penerokaan mendalam tentang prinsip kerja mesin maya Java memerlukan contoh kod khusus 1. Pengenalan Dengan perkembangan pesat dan aplikasi meluas bahasa pengaturcaraan Java, Mesin Maya Java (JavaVirtualMachine, dirujuk sebagai JVM ) juga menjadi sangat diperlukan dalam pembangunan perisian. Sebagai persekitaran berjalan untuk program Java, JVM boleh menyediakan ciri merentas platform, membenarkan program Java berjalan pada sistem pengendalian yang berbeza. Dalam artikel ini, kita akan menyelidiki cara JVM berfungsi

See all articles