Rumah Java javaTutorial Peruntukan Memori Rentetan dalam Java

Peruntukan Memori Rentetan dalam Java

Sep 11, 2024 am 06:33 AM

Memory Allocation of Strings in Java

Dalam Java, rentetan disimpan dalam ingatan sebagai objek String kelas.

Apabila memori diperuntukkan untuk sebarang program Java, JVM (mesin maya Java) membahagikan memori yang diperuntukkan kepada dua bahagian. Satu bahagian ialah Stack dan bahagian lain ialah Heap. Dalam ingatan Heap, java memperuntukkan beberapa memori, terutamanya untuk literal bahawa memori dipanggil String constant pool(SCP). SCP ialah kawasan yang dipratentukan di dalam Heap. Kolam rentetan membantu dalam menjimatkan banyak ruang untuk Java Runtime. Kelas rentetan menggunakan SCP untuk menyimpan literal rentetan unik.

Dalam memori Tindanan, pembolehubah atau rujukan pembolehubah atau rujukan kepada objek disimpan.

Dalam ingatan Heap, semua objek yang diperuntukkan secara dinamik disimpan. Untuk memperuntukkan memori pada objek, kami menggunakan kata kunci baharu.

Terdapat dua cara untuk mencipta objek rentetan.

  1. Rentetan literal

String str1 = “MyString”;

Setiap kali kami mencipta literal rentetan, JVM mula-mula menyemak sama ada literal rentetan sudah wujud dalam kolam pemalar rentetan. Jika tidak tersedia, ia akan mencipta rentetan literal baharu dalam SCP.

Dalam gambar di atas, str1 menunjuk kepada "MyString" dalam SCP. Berikut ialah cara literal rentetan yang baru dibuat dikendalikan.

  1. Dengan menggunakan kata kunci baharu

String str2 = new String(“MyString”); //Membuat kelas rentetan menggunakan kata kunci baharu

Apabila objek rentetan dibuat menggunakan kata kunci baharu, ia akan mencipta dua objek. Satu dalam SCP satu lagi dalam Heap dan pembolehubah rujukan disimpan dalam tindanan.

Kami telah mencipta "MyString" literal dengan menggunakan

String str1 = “MyString”;

Oleh kerana kita tidak boleh mempunyai pendua dalam SCP, Jadi JVM tidak akan mencipta satu lagi objek dalam SCP tetapi akan mengembalikan rujukan sedia ada kepada pembolehubah str3 dalam tindanan dan ia akan mencipta satu objek dalam Heap. Str3 akan menunjuk ke objek "MyString" dalam Heap tetapi bukan dalam SCP.

Berikut ialah kes yang berbeza tentang cara memori diperuntukkan untuk objek rentetan.

Kes 1: Bagaimana objek rentetan yang ditakrifkan di atas disimpan dalam ingatan.

rentetan kelas awamStorageConcept

{

utama kekosongan statik awam(String[] args)

{

String str1 = “MyString”;

String str2 = new String(“MyString”);

System.out.println(str1 == str2); //Output:Salah

System.out.println(str1.equals(str2)); //Output:Benar

}

}

Apabila kita membandingkan str1 dan str2 menggunakan pengendali “==” ia mengembalikan palsu. Seperti yang kita tahu pengendali “==” membandingkan alamat fizikal mereka. Di sini dalam contoh kami str1 menunjuk ke objek dalam SCP dan str2 menunjuk ke objek dalam Heap. Jadi ia kembali palsu.
Tetapi dalam kes str1.equals(str2), seperti yang kita tahu fungsi "equals" menyemak aksara individu kedua-dua str1 dan str3 mempunyai nilai yang sama disimpan ia kembali benar.

Kes 2: Satu lagi rentetan literal

String str3 = “MyString”;

Kedua-dua str1 dan str3 akan menunjuk kepada literal rentetan yang sama dalam SCP.

rentetan kelas awamStorageConcept

{

utama kekosongan statik awam(String[] args)

{

String str1 = “MyString”;

String str3 = “MyString”;

System.out.println(str1 == str2); //Output:Benar

System.out.println(str1.equals(str2)); //Output:Benar

}

}

s1 == s3 mengembalikan benar, kerana pengendali “==” membandingkan alamat fizikal mereka tetapi bukan kandungannya.
s1.equals(s3) mengembalikan benar dan fungsi "equals" menyemak aksara individu dalam kedua-dua pembolehubah rujukan.

Kes 3: Satu lagi objek rentetan dibuat menggunakan kata kunci baharu

String str4 = new String(“NewString”);

Dalam kes ini, JVM akan menyemak rentetan ini dalam SCP ia tidak dapat mencari objek rentetan dengan nilai "NewString", jadi ia akan mencipta dua objek satu dalam SCP dan satu lagi dalam Heap, pembolehubah rujukan str4 akan disimpan dalam timbunan itu. Str4 akan mempunyai rujukan kepada objek dalam Heap.

Kes 4: Satu lagi rentetan literal dicipta.

String str5 = “NewString”;

Dalam kes ini, JVM akan menyemak dalam SCP jika literal ini sudah tersedia atau tidak, di sini "NewString" sudah ada dalam SCP jadi JVM tidak akan mencipta pendua dalam SCP sebaliknya ia mengembalikan rujukan kepada pembolehubah str5.

Kes 5: Menugaskan satu rentetan kepada rentetan lain

String str4 = new String(“NewString”);

String str6 = str4; //Menetapkan

Di sini str6 dan str4 akan menunjuk ke objek yang sama dalam Heap dan tidak akan memadamkan nilai dalam str4.

rentetan kelas awamStorageConcept

{

utama kekosongan statik awam(String[] args)

{

String str4 = new String(“NewString”);

String str6 = str4;

System.out.println(str4 == str6); //Output:true

}

}

JVM akan memberikan rujukan "NewString" dalam timbunan kepada pembolehubah str6. Itulah sebab str4 == str6 kembali benar.

Kesimpulannya, mencipta objek rentetan menggunakan literal rentetan dan oleh operator 'baharu' mempunyai kebaikan dan keburukannya.

Dengan menggunakan literal rentetan, kita boleh menjadikan memori lebih cekap dengan tidak mencipta pendua. JVM mencipta satu objek unik dan rentetan kekal dalam SCP selama-lamanya. Kelemahan ini ialah kolam rentetan mempunyai saiz tetap dan ia akan menjadi penuh pada suatu masa.
Tetapi dengan menggunakan kata kunci baharu ia mencipta dua objek, satu dalam SCP dan satu lagi dalam Heap. Dalam Timbunan, jika kita tidak memerlukan objek itu akan dipadamkan oleh pemungut sampah untuk membuat ruang. Tetapi kelemahannya ialah dengan pengendali 'baru', JVM akan sentiasa perlu mencipta objek baharu dan ia merupakan beban yang berlebihan untuk JVM.

Atas ialah kandungan terperinci Peruntukan Memori Rentetan dalam Java. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Topik panas

Tutorial Java
1663
14
Tutorial PHP
1266
29
Tutorial C#
1239
24
Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Apr 19, 2025 pm 11:30 PM

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Apr 19, 2025 pm 11:27 PM

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Apr 19, 2025 pm 11:36 PM

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...

See all articles