Java 언어의 장점 중 하나는 자동으로 메모리를 관리한다는 것입니다. 프로그래머는 메모리 관리에 대한 부담을 가질 필요가 없고 객체가 더 이상 필요하지 않을 때 객체의 메모리를 해제하려고 걱정할 필요가 없습니다. Java Garbage Collector Thread는 프로그래머를 위해 이 작업을 수행합니다. 원하지 않는 객체를 제거하고 JVM의 제어를 통해 메모리를 확보합니다. 프로그래머는 java.lang.ref 클래스를 사용하여 필요할 때 객체가 가비지 수집되는 시기를 제어할 수도 있습니다. Java에는 가비지 수집 방법이나 참조에 대한 가비지 수집기의 동작에 따라 네 가지 유형의 참조가 있습니다.
무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
참조에 대한 Garbage Collector의 동작을 기반으로 4가지 유형의 Java 참조가 있습니다.
강한 참조는 일반적으로 Java 코드를 작성하거나 객체를 생성할 때 사용합니다. 강력한 참조가 있고 메모리에서 활성화된 개체는 가비지 수집 대상이 아니며, null에 대한 강력한 참조 지점이 있는 개체는 가비지 수집될 수 있습니다. 예를 들어 아래 코드 조각에서는 ob 변수가 ClassA 유형의 객체입니다.
ClassA ob = new ClassA();
'ob' 객체는 ClassA 클래스를 가리키는 강력한 참조를 갖고 있습니다. ob가 활성 객체이기 때문에 이 객체는 가비지 수집될 수 없습니다.
참조 'ob'이 아래와 같이 null을 가리키는 경우 –
ob = null;
이제 객체는 ClassA 클래스를 참조하지 않습니다. 이제 개체가 가비지 수집 대상이 됩니다.
코드:
package p1; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); ob = null; // Now object <u>ob</u> pointing to null and is available for garbage collection System.out.println(ob); } }
출력:
약한 참조는 가비지 수집 대상입니다. JVM이 약한 참조가 있는 객체를 감지하면 이 객체가 표시되고 가비지 수집기 스레드가 JVM에 의해 실행될 때 가비지가 수집됩니다. 개체 항목에 대해 WeakHashMap에서 사용되는 이러한 유형의 참조입니다. 약한 참조는 lang.ref.WeakReference 클래스에 의해 생성될 수 있습니다. 애플리케이션에서 사용할 수 있는 약한 참조는 DBConnection을 설정하는 것이며 데이터베이스가 닫히면 Garbage Collector에 의해 연결이 해제됩니다. 예를 들어 아래 코드 조각에서는 ob 변수가 ClassA 유형의 개체입니다.
ClassA ob = new ClassA();
'ob' 객체는 가비지 수집이 가능하도록 강력한 참조이므로 아래와 같이 해당 참조를 약한 참조로 변환해야 합니다.
WeakReference<ClassA> weakob = new WeakReference<ClassA>(ob);
이제 클래스 A를 참조하는 객체는 약해졌고 객체는 이제 가비지 수집에 사용할 수 있으며 JVM이 가비지 수집 스레드를 실행할 때 가비지 수집됩니다.
코드:
package p1; import java.lang.ref.WeakReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); // now create Weak Reference object to which <u>ob</u> object is pointing WeakReference <ClassA> weakob = new WeakReference <ClassA>(ob); // Now <u>ob</u> object is eligible for garbage collection, but it will be remove from memory when JVM needs memory ob = null; System.out.println(ob); // weakly referenced <u>ob</u> object can get back ob = weakob.get(); System.out.println(ob); } }
출력:
소프트 참조 객체는 JVM에 메모리가 부족하거나 JVM에 메모리가 심하게 필요할 때까지 가비지 수집 대상이 아닙니다. 약한 참조는 lang.ref.SoftReference 클래스에 의해 생성될 수 있습니다. 예를 들어 소프트 참조는 약한 참조와 유사하게 생성할 수 있습니다.
SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
코드:
package p1; import java.lang.ref.SoftReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA();// default reference or Strong Reference System.out.println(ob); // now create soft Reference object which ob object is pointing SoftReference <ClassA> softob = new SoftReference <ClassA>(ob); // Now ob object is eligible for garbage collection, but it will be garbage collected when JVM badly needs memory ob = null; System.out.println(ob); // the soft referenced, ob object can get back ob = softob.get(); System.out.println(ob); } }
출력:
팬텀 참조 객체는 가비지 컬렉션에 사용할 수 있지만, 가비지 컬렉션 전에 JVM이 '참조 큐'라는 참조 큐에 객체를 넣습니다. 객체에 대한 finalize() 함수 호출 이후. 약한 참조는 lang.ref 클래스에 의해 생성될 수 있습니다. 팬텀참조.
코드:
package p1; import java.lang.ref.ReferenceQueue; import java.lang.ref.PhantomReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); // now Create Reference queue object ReferenceQueue <ClassA> refq = new ReferenceQueue <ClassA>(); // Create Phantom Reference object to which <u>ob</u> object is pointing PhantomReference <ClassA> phantomob = new PhantomReference <ClassA>(ob,refq); // Now <u>ob</u> object is eligible for garbage collection, but it will be kept in '<u>refq</u>' before removing ob = null; System.out.println(ob); // to get back object which has been Phantom referenced returns null ob = phantomob.get(); System.out.println(ob); } }
출력:
위 내용은 자바 참조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!