Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ตัวอย่างของการอ้างอิงแบบนุ่มนวลและการอ้างอิงแบบแฝง?


การอ้างอิงแบบนุ่มนวลมักใช้เพื่อนำแคชที่ไวต่อหน่วยความจำไปใช้ ให้เราดูตัวอย่างของ softreferences ใน Java −

ตัวอย่าง

import java.lang.ref.SoftReference;
class Demo{
   public void display_msg(){
      System.out.println("Hello there");
   }
}
public class Demo_example{
   public static void main(String[] args){
      Demo my_instance = new Demo();
      my_instance.display_msg();
      SoftReference<Demo> my_softref = new SoftReference<Demo>(my_instance);
      my_instance = null;
      my_instance = my_softref.get();
      my_instance.display_msg();
   }
}

ผลลัพธ์

Hello there
Hello there

คลาสชื่อ Demo มีฟังก์ชันชื่อ 'display_msg' ซึ่งแสดงข้อความที่เกี่ยวข้อง มีการกำหนดคลาสอื่นที่ชื่อ 'Demo_example' ซึ่งมีฟังก์ชันหลัก ที่นี่ อินสแตนซ์ของคลาสสาธิตจะถูกสร้างขึ้น และฟังก์ชัน 'display_msg' ถูกเรียกใช้ในอินสแตนซ์นี้ มีการสร้างอินสแตนซ์ ASoftReference สำหรับคลาสสาธิต และอินสแตนซ์ถูกกำหนดให้เป็นโมฆะ ฟังก์ชัน 'get' ถูกเรียกใช้บนอ็อบเจ็กต์ softreference นี้ และกำหนดให้กับอินสแตนซ์ก่อนหน้า ฟังก์ชัน 'display_msg' ถูกเรียกใช้ในอินสแตนซ์นี้ ข้อความที่เกี่ยวข้องจะแสดงบนคอนโซล

การอ้างอิง Phantom มักใช้สำหรับจัดกำหนดการการดำเนินการล้างข้อมูลก่อนการตายในวิธีที่ยืดหยุ่นกว่าที่เป็นไปได้ด้วยกลไกการทำให้สมบูรณ์ของ Java

ให้เรามาดูตัวอย่าง Phantom References -

ตัวอย่าง

import java.lang.ref.*;
class Demo{
   public void display_msg(){
      System.out.println("Hello there");
   }
}
public class Demo_example{
   public static void main(String[] args){
      Demo my_instance = new Demo();
      my_instance.display_msg();
      ReferenceQueue<Demo> refQueue = new ReferenceQueue<Demo>();
      PhantomReference<Demo> phantomRef = null;
      phantomRef = new PhantomReference<Demo>(my_instance,refQueue);
      my_instance = null;
      my_instance = phantomRef.get();
      my_instance.display_msg();
   }
}

ผลลัพธ์

Hello there
Exception in thread "main" java.lang.NullPointerException
at Demo_example.main(Demo_example.java:22)

คลาสชื่อ Demo มีฟังก์ชันชื่อ 'display_msg' ที่แสดงข้อความที่เกี่ยวข้อง คลาสอื่นชื่อ Demo_example มีฟังก์ชันหลัก ฟังก์ชันนี้มีอินสแตนซ์ของคลาสสาธิต และเรียกใช้ฟังก์ชัน 'display_msg' จากนั้น อินสแตนซ์ ReferenceQueue จะถูกสร้างขึ้น อินสแตนซ์ PhantomReference อื่นถูกสร้างขึ้นและกำหนดเป็น 'null' จากนั้น อินสแตนซ์ก่อนหน้าถูกกำหนดเป็น null จากนั้นฟังก์ชัน 'display_msg' จะถูกเรียกใช้ในอินสแตนซ์นี้ เอาต์พุตที่เกี่ยวข้องจะแสดงบนคอนโซล