Mari mulakan dengan kod terlebih dahulu Matlamat saya adalah untuk membuat data hilang sepenuhnya
public class Test {
public static void main(String[] args) {
Data data = new Data();
data.num = 10;
Data new1 = data;
Data new2 = data;
new2 = null;
data = null;
System.out.println(new1.num);
}
}
class Data {
int num;
}
Saya tahu mekanisme pengumpulan sampah Java Selagi ada sesuatu yang merujuknya, kod di atas masih boleh mengeluarkan 10 seperti biasa. .num); membuang pengecualian null
, yang bermaksud tiada data sedemikian sama sekali
Jangan katakan hanya biarkan new1=null
baik-baik sajaSystem.out.println(new1.num);
抛出null
异常,即彻底没有这个数据
不要说让new1=null
Anda sendiri yang mengatakannya, "Saya tahu mekanisme pengumpulan sampah Java. Selagi sesuatu masih merujuknya, ia tidak akan hilang." , bagaimana ia boleh dibenarkan untuk dikitar semula, supaya kod yang kami tulis bukan semua pengecualian penunjuk nol. Anda boleh menggunakan WeakReference dan bukannya rujukan yang kuat.
Adalah disyorkan bahawa JVM melakukan gc, yang mungkin ditolak sepenuhnya. GC itu sendiri akan berjalan secara automatik secara berkala, dan JVM menentukan masa larian Selain itu, versi semasa mempunyai pelbagai mod yang lebih pintar untuk dipilih, dan secara automatik akan membuat pilihan berdasarkan mesin yang sedang dijalankan, walaupun terdapat. sememangnya peningkatan prestasi Jika perlu, anda juga harus memperhalusi mekanisme pengendalian GC dan bukannya mengoptimumkan prestasi dengan menggunakan arahan ini.
Objek yang mempunyai rujukan objek dan akan dipadamkan masih boleh ditetapkan kepada null
Sebelum anda memahami prinsip JMM, jangan sekali-kali menggunakan System.gc() secara sembarangan, hanya obj=null apabila objek itu habis;
Jawapannya ialah tidak. Ini adalah tingkah laku yang tidak ditentukan dalam spesifikasi JVM. Pembangun tidak boleh cuba membantu mesin maya mengitar semula objek secara manual. Jika ia JDK Sun, nampaknya ada pakej yang tidak selamat, tetapi saya tidak pernah menggunakannya dan saya tidak tahu sama ada terdapat API sedemikian.