목차
예제를 통한 Java 참조 유형
1. 강력한 참고자료
2. 약한 참조
3. 소프트 참고자료
4. 팬텀 참고자료
Java java지도 시간 자바 참조

자바 참조

Aug 30, 2024 pm 03:17 PM
java

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&lt;ClassA&gt; weakob = new WeakReference&lt;ClassA&gt;(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 &lt;ClassA&gt; weakob = new WeakReference &lt;ClassA&gt;(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 &lt;ClassA&gt; softob = new SoftReference &lt;ClassA&gt;(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 &lt;ClassA&gt; softob = new SoftReference &lt;ClassA&gt;(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 &lt;ClassA&gt; refq = new ReferenceQueue &lt;ClassA&gt;();
// Create Phantom Reference object to which <u>ob</u> object is pointing
PhantomReference &lt;ClassA&gt; phantomob = new PhantomReference &lt;ClassA&gt;(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 제곱근 자바의 제곱근 Aug 30, 2024 pm 04:26 PM

자바의 제곱근

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

자바의 완전수

Java의 난수 생성기 Java의 난수 생성기 Aug 30, 2024 pm 04:27 PM

Java의 난수 생성기

자바의 암스트롱 번호 자바의 암스트롱 번호 Aug 30, 2024 pm 04:26 PM

자바의 암스트롱 번호

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

자바의 웨카

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

Java Spring 인터뷰 질문

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 스미스 번호

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까?

See all articles