자바 메모리 누수 예제

다른 경우, 특히 수명이 긴 응용 프로그램의 경우 메시지가 실수로 개체에 대한 참조를 보유하여 가비지 수집기에서 정리하지 못하도록 하는 표시일 수 있습니다. 이것은 메모리 누수와 동일한 Java 언어입니다. (참고: 응용 프로그램에서 호출하는 API는 실수로 개체 참조를 보유할 수도 있습니다.) 나는 아무도 내부 클래스 예제를 사용하지 않는 것이 재미 있다고 생각했다. 내부 클래스가 있는 경우; 본질적으로 포함 클래스에 대한 참조를 유지합니다. 물론 Java가 결국 정리하기 때문에 기술적으로 메모리 누수가 아닙니다. 그러나 이로 인해 클래스가 예상보다 오래 걸리게 될 수 있습니다. java.lang.OutOfMemoryError: (네이티브 메서드) 메모리 누수는 증상이 다양하고 재현하기 어렵기 때문에 해결하기 어려운 Java 응용 프로그램 문제 중 하나입니다. 여기서는 메모리 누수 를 발견하고 소스를 식별하는 단계별 접근 방식을 설명했습니다. 그러나 무엇보다도 오류 메시지를 자세히 읽고 스택 추적에주의를 기울이십시오.모든 누출이 나타나는 것처럼 간단하지는 않습니다. 방금 인터뷰를 했고 Java로 메모리 누수 생성을 요청받았습니다. 말할 필요도 없이, 나는 심지어 하나를 만드는 방법에 대한 단서가없는 꽤 바보 느꼈다. Java VisualVM의 모든 기능을 활용하려면 Java 플랫폼, 표준 판(Java SE) 버전 6 이상을 실행해야 합니다.

Java는 GC(데몬 스레드)에 의해 메모리를 암시적으로 회수합니다. GC는 연결할 수 없는 개체가 있는지 또는 정확하게 말하자면 해당 개체를 가리키는 참조가 없는지 주기적으로 검사합니다. 그렇다면 GC는 새로 사용 가능한 메모리를 회수합니다. 벤치마크를 실행하여 Java 코드의 성능을 측정하고 분석할 수 있습니다. 이렇게 하면 동일한 작업을 수행하는 대체 방법의 성능을 비교할 수 있습니다. 이것은 우리가 더 나은 접근 방식을 선택하는 데 도움이 될 수 있으며, 우리가 기억을 보존하는 데 도움이 될 수 있습니다. 메모리 누수는 메모리 리소스를 차단하고 시간이 지남에 따라 시스템 성능을 저하하기 때문에 잘못됩니다. 그리고 처리하지 않으면 응용 프로그램은 결국 리소스를 소모하여 치명적인 java.lang.outOfMemoryError로 종료합니다. 벤치마킹에 대한 자세한 내용은 Java 자습서를 통해 Microbenchmarking으로 이동하십시오. 지나치게 복잡하고 원형 의 개체 구조로 인한 메모리 누수는 자신의 개성을 가지고있는 것처럼 보이므로 내 개인적인 즐겨 찾기입니다.

개발자가 가비지 수집기를 속여 제대로 작업을 수행할 수 없도록 하는 것 같습니다. 경험이 부족한 프로그래머는 Java의 자동 가비지 수집이 메모리 관리에 대한 걱정에서 완전히 벗어나는 경우가 많습니다. 이것은 일반적인 오해입니다: 가비지 수집기는 최선을 다하지만, 최고의 프로그래머조차도 메모리 누수에 먹이가 될 수 있습니다. 설명하겠습니다. 메모리 누수란 할당된 메모리 블록에 대한 포인터/참조가 없는 경우입니다. 둘째, C및 C++에서는 힙에 있는 모든 변수를 할당할 필요가 없습니다. 스택이 있습니다.nn가장 중요한 점은 Java에서 캐싱을 할 때 객체에 대한 직접 참조를 사용하지 않는다는 것입니다. Java에는 GC에 개체를 살아 있게 유지하도록 지시하는 WeakReference가 있지만 메모리가 부족할 때 이를 회수합니다. 네이티브 메모리 누수: JNI 코드, 드라이버 또는 JVM 할당에 의한 할당과 같이 Java 힙 외부에 있는 메모리 사용률이 지속적으로 증가하는 것과 관련이 있습니다.