강력한 인용, 소프트 인용, 약한 인용 및 가상 인용의 개념
강력한 회의
강력한 인용문은 프로그램 코드의 일반적인 인용문을 나타냅니다. 예를 들어, 다음 코드의 객체와 str은 모두 강력한 인용문입니다.
Object 객체 = new Object (); 문자열 str = "hello";
객체가 이와 관련된 강력한 기준을 갖는 한, JVM은이 객체를 확실히 재활용하지 않습니다. 메모리가 없더라도 JVM은 그러한 객체를 재활용하는 것보다 오류가 오류를 방해 할 것입니다.
예를 들어 다음 코드 :
public class main {public static void main (String [] args) {new Main (). fun1 (); } public void fun1 () {Object Object = new Object (); Object [] objarr = 새 개체 [1000]; }}객체로 실행할 때 [] objarr = new Object [1000]; 이 문장으로 실행될 때 메모리가 충분하지 않은 경우 JVM은 OOM 오류를 던지고 객체가 가리키는 물체를 재활용하지 않습니다. 그러나 Fun1이 실행 된 후 객체와 Objarr가 더 이상 존재하지 않으므로 JVM이 가리키는 객체가 재활용됩니다.
강한 기준과 객체 사이의 연관성을 방해하려면 JVM이 적절한 시간에 물체를 재활용하도록 NULL에 대한 참조를 표시 할 수 있습니다.
소프트로 회의
소프트 참조는 유용하지만 필요한 객체를 설명하는 데 사용되며 java.lang.ref.softreference 클래스를 사용하여 Java로 표시됩니다. 소프트 참조 관련 객체의 경우 JVM은 메모리가 충분하지 않은 경우에만 물체를 재활용합니다. 따라서 이것은 OOM의 문제를 해결하는 데 잘 사용될 수 있으며,이 기능은 웹 페이지 캐싱, 이미지 캐싱 등과 같은 캐싱 구현에 매우 적합합니다.
소프트 참조는 참조 큐 (참조 큐)과 함께 사용할 수 있습니다. 소프트 참조로 참조 된 물체가 JVM에 의해 재활용되면 소프트 참조가 관련 참조 대기열에 추가됩니다. 사용법의 예는 다음과 같습니다.
import java.lang.ref.weakreference; public class main {public static void main (string [] args) {약점은 <string> sr = new 약점 <문자열> (새 문자열 ( "hello")); System.out.println (sr.get ()); System.gc (); // 쓰레기 수집 시스템에 대한 JVM의 GC에 알림. out.println (sr.get ()); }}약한 참조
약한 참조는 비 필수 물체를 설명하는 데 사용됩니다. JVM이 쓰레기 수집을 수행 할 때, 약한 참조와 관련된 물체는 메모리가 충분한 지 여부에 관계없이 재활용됩니다. Java에서는 java.lang.ref.weakreference 클래스를 사용하여이를 대표하십시오. 사용법의 예는 다음과 같습니다.
import java.lang.ref.weakreference; public class main {public static void main (string [] args) {약점은 <string> sr = new 약점 <문자열> (새 문자열 ( "hello")); System.out.println (sr.get ()); System.gc (); // JVM의 GC에 쓰레기 수집 시스템을 수행하도록 알리는 알림. out.println (sr.get ()); }}공학적 회의
가상 참조는 이전 소프트 참조 및 약한 참조와 다르며 객체의 수명주기에는 영향을 미치지 않습니다. Java에서는 java.lang.ref.phantomreference 클래스를 사용하여이를 표현하십시오. 객체가 가상 참조와 관련이있는 경우, 참조와 관련이없는 것처럼 가비지 수집기에 의해 언제든지 재활용 될 수 있습니다.
가상 참조는 참조 대기열과 관련하여 사용해야합니다. 쓰레기 수집기가 객체를 재활용 할 준비를 할 때, 가상 참조가 있음을 발견하면 관련 참조 큐 에이 가상 참조가 추가됩니다. 이 프로그램은 가상 참조가 참조 대기열에 추가되었는지 여부를 판단하여 참조 된 객체가 수집 될지 여부를 이해할 수 있습니다. 프로그램에서 가상 참조가 참조 대기열에 추가 된 경우 참조 된 객체의 메모리가 재활용되기 전에 필요한 조치를 취할 수 있습니다.
부드럽고 약한 인용에 대한 추가 이해
우리는 종종 코드를 작성할 때 강한 인용을 사용합니다. 다른 세 가지 유형의 인용의 경우, 가장 일반적으로 사용되는 것은 부드러운 인용과 약한 인용입니다. 이 두 사람은 유사점과 차이점이 있습니다. 그것들은 모두 필수적인 객체를 설명하는 데 사용되지만 소프트 참조와 관련된 객체는 메모리가 충분하지 않은 경우에만 재활용되는 반면, 약한 참조와 관련된 물체는 JVM이 수집 될 때 항상 재활용됩니다. 위의 기능을 고려하여 소프트 참조는 캐싱에 적합합니다. 메모리가 충분하지 않으면 JVM은 메모리를 재활용 할 수 있습니다. 약한 참조는 콜백 함수의 메모리 누출을 방지하는 데 사용될 수 있습니다. 콜백 함수는 종종 익명의 내부 클래스이며 외부 클래스에 대한 참조를 암시 적으로 저장하기 때문에 콜백 함수가 다른 스레드에서 다시 호출되는 경우,이 시점에서 외부 클래스를 재활용 해야하는 경우, 익명 내부 클래스는 외부 클래스에 대한 강력한 참조를 저장하기 때문에 메모리 누출이 발생합니다.
위의 기사는 Java의 4 가지 인용 방법의 차이점에 대해 간략하게 이야기합니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.