Kata pengantar
Saya menulis sebuah artikel tentang divisi Area Memori JVM, tetapi kemarin saya menerima wawancara dengan Ant Financial. Saya bertanya tentang konten terkait JVM dan menjelaskan divisi area memori JVM. Bagian ini cukup bagus, tetapi kemudian saya bertanya di mana string disimpan di Java. Saya hanya ingat bahwa string adalah jumlah yang tidak berubah, yang harus disimpan di kolam konstan. Tetapi kemudian saya bertanya di mana string baru harus ditempatkan, yang harus ditempatkan di tumpukan. Kemudian, saya bertanya di mana referensi string ditempatkan. Pada saat itu, saya bodoh dan berkata bahwa mereka juga ditempatkan di tumpukan. Sekarang saya akan meringkas: data tipe variabel tipe dasar dan referensi objek ditempatkan di tumpukan, objek itu sendiri ditempatkan di tumpukan, konstanta string eksplisit ditempatkan di kumpulan konstan, dan objek string ditempatkan di tumpukan.
Deskripsi kolam konstan
Kolam konstan sebelumnya ditempatkan di area metode, yaitu, pada generasi permanen, dan dipindahkan ke tumpukan mulai dari JDK7. Perubahan ini dapat dilihat dari ** RFE penting yang dibahas dalam catatan JDK 7 dalam versi rilis Oracle.
Area: Hotspotsynopsis: Dalam JDK 7, string internal tidak lagi dialokasikan dalam generasi permanen tumpukan java, tetapi sebaliknya dialokasikan di bagian utama dari tumpukan Java (dikenal sebagai generasi muda dan tua), bersama dengan benda -benda lain yang dibuat oleh aplikasi. Perubahan ini akan menghasilkan lebih banyak data yang berada di tumpukan java utama, dan lebih sedikit data dalam generasi permanen, dan dengan demikian mungkin memerlukan ukuran tumpukan untuk disesuaikan. Sebagian besar aplikasi hanya akan melihat perbedaan yang relatif kecil dalam penggunaan heap karena perubahan ini, tetapi aplikasi yang lebih besar yang memuat banyak kelas atau memanfaatkan string.Intern () yang lebih besar akan melihat perbedaan yang lebih signifikan.rfe: 6962931
Deskripsi lokasi memori string
1. Konstanta String Eksplisit
String a = "holten"; string b = "holten";
• Setelah kalimat pertama, objek string dengan nilai holten dibuat di kumpulan konstan;
• Ketika kalimat kedua dieksekusi, karena ada holten di kumpulan konstan, objek string baru tidak lagi dibuat.
• Pada saat ini, referensi ke string ada di tumpukan mesin virtual.
1. Objek string
String a = string baru ("holtenobj"); string b = string baru ("holtenobj");• Saat kelas dimuat, objek string dengan nilai holtenobj dibuat di kumpulan konstan. Ketika kalimat pertama dieksekusi, objek string baru ("Holtenobj") akan dibuat di tumpukan;
• Ketika kalimat kedua dieksekusi, karena Holtenobj ada di kumpulan konstan, objek string baru tidak lagi dibuat, dan objek string baru ("Holtenobj") dibuat langsung di tumpukan.
Memeriksa
/*** Dibuat oleh Holten.gao pada 2016/8/16. */kelas publik utama {public static void main (string [] args) {string str1 = "gao xiaotian"; String str2 = "gao xiaotian"; System.out.println (str1 == str2); // string true str3 = string baru ("gao datian"); String str4 = string baru ("gao datian"); System.out.println (str3 == str4); // false}}Hasil pengembalian:
Truefalse
Artikel di atas didasarkan pada penjelasan terperinci tentang lokasi memori string di Java. Ini semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.