> Java > java지도 시간 > 본문

자바 참조

PHPz
풀어 주다: 2024-08-30 15:17:41
원래의
941명이 탐색했습니다.

Java 언어의 장점 중 하나는 자동으로 메모리를 관리한다는 것입니다. 프로그래머는 메모리 관리에 대한 부담을 가질 필요가 없고 객체가 더 이상 필요하지 않을 때 객체의 메모리를 해제하려고 걱정할 필요가 없습니다. Java Garbage Collector Thread는 프로그래머를 위해 이 작업을 수행합니다. 원하지 않는 객체를 제거하고 JVM의 제어를 통해 메모리를 확보합니다. 프로그래머는 java.lang.ref 클래스를 사용하여 필요할 때 객체가 가비지 수집되는 시기를 제어할 수도 있습니다. Java에는 가비지 수집 방법이나 참조에 대한 가비지 수집기의 동작에 따라 네 가지 유형의 참조가 있습니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

예제를 통한 Java 참조 유형

참조에 대한 Garbage Collector의 동작을 기반으로 4가지 유형의 Java 참조가 있습니다.

  • 강력한 참조: 이는 Java의 기본 참조입니다. 객체를 정기적으로 정의하면 강력한 참조가 생성될 수 있습니다.
  • 약한 참조: 이 참조는 명시적으로 지정됩니다. 약한 참조는 java.lang.ref.WeakReference 클래스를 사용하여 생성할 수 있습니다.
  • 소프트 참조: 소프트 참조는 lang.ref.SoftReference 클래스를 사용하여 생성할 수 있습니다.
  • 팬텀 참조: 팬텀 참조는 lang.ref.PhantomReference 클래스를 사용하여 생성할 수 있습니다.

1. 강력한 참고자료

강한 참조는 일반적으로 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);
}
}
로그인 후 복사

출력:

자바 참조

2. 약한 참조

약한 참조는 가비지 수집 대상입니다. 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);
}
}
로그인 후 복사

출력:

자바 참조

3. 소프트 참고자료

소프트 참조 객체는 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);
}
}
로그인 후 복사

출력:

자바 참조

4. 팬텀 참고자료

팬텀 참조 객체는 가비지 컬렉션에 사용할 수 있지만, 가비지 컬렉션 전에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿