Java의 Garbage Collection과 finalize () 메소드에 대해 읽고 있었는데 내 마음을 사로 잡은 몇 가지 의심이 있습니다. 이러한 의심이 정말 어리 석다고 생각한다면 죄송합니다.
http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html 기사를 읽었습니다 . 여기에서 포인트 5는 '메모리에서 개체를 제거하기 전에 가비지 수집 스레드가 해당 개체의 finalize () 메서드를 호출하고 필요한 모든 종류의 정리를 수행 할 수있는 기회를 제공합니다' 라고 말합니다 . 그럼이 일이 확실히 일어나나요? 내 말은 가비지 콜렉터 메서드를 실행하기 전에 finalize () 메서드가 항상 호출된다는 의미입니까?
가비지 콜렉터는 실행이 필요하다는 것을 어떻게 알 수 있습니까? 예를 들어 서버에 배포 된 애플리케이션이 있는데 GC는 언제 실행됩니까? 주기적으로 실행됩니까, 아니면 일부 (예 : 1MB)의 가비지가 수집되고 트리거가 실행되거나, 또는 무작위로 실행되고 언제 실행 될지 결정할 방법이 없습니까?
가비지 수집이 발생하지 않기 때문에 애플리케이션의 성능이 어떻게 저하됩니까?
힙에 많은 가비지가 있지만 가비지 수집기가 실행되지 않는다고 가정합니다. 이런 일이 발생하면 나쁜 행동이나 JVM의 결함이 아닌가?
프로그래머로서 우리가 충분히 똑똑하고 '그렇게 참조되지 않은'포인터를 폐기해야 할 때를 알고 있다는 점을 고려하면 Java보다 C / C ++에서 수동으로 수행되는 가비지 수집이 더 낫다고 말할 수 있습니까?
finalize()
개체가 정리되기 직전에 발생합니다. 문제는-당신은 그것이 언제 일어날 지 (그리고 그것이 일어날 지조차도) 모른다는 것입니다. finalize
청소 에 의존하지 말고 물체가 범위를 잃기 전에 직접 청소하십시오. 또한 finalize()
가비지 컬렉션주기에서 실행됩니다. 즉, finalize
가비지 개체 를 구현 하면 정리하는 데 2주기가 걸리므로 정리할 수있는 메모리 낭비가 발생합니다. 또한 실행하는 데 더 많은 CPU가 소비되고 finalize
언제인지 알 수 없습니다. 많은 개체가있는 finalize
경우 GC 중에 함께 실행되어 전체 응용 프로그램을 장기간 일시 중지 할 수 있습니다 .
가비지 콜렉션 발생시기를 결정하기 위해 조정할 수있는 다양한 알고리즘이 있습니다. 또한 JVM에 할당하는 힙 크기에 따라 다릅니다 (이전 대 신세대 크기, 생존자 공간 크기 등과 같은 다른 매개 변수와 함께 ...). 작은 앱을 다루는 경우 일반적으로 기본 구성으로 충분합니다. 대규모 앱을 작성하고 시간, CPU 시간 및 일시 중지 시간에 따른 성능을 고려해야하는 경우 (때로는 GC가 전체 앱을 일시 중지 함)-힙 메모리 모델과 조정할 수있는 다양한 GC 알고리즘 및 매개 변수에 대해 더 잘 읽어보십시오. GC를 제어하여 더 나은 요구 사항을 충족합니다.
애플리케이션 성능은 발생하는 GC주기 (발생하지 않는 GC주기가 아님)의 영향을받습니다. 예를 들어, 힙이 너무 작 으면주기가 자주 발생합니다. 힙이 너무 크면주기가 덜 자주 발생하지만 각각 실행하는 데 더 오래 걸릴 수 있습니다. 다시 말하지만, 이는 모두 선택한 GC 알고리즘 및 튜닝 매개 변수와 힙 메모리 할당 (젊은 세대의 메모리 수, 구세대의 메모리 수, 생존자 공간 비율 등 ...)에 따라 달라집니다.
새 개체를 할당 할 공간이 아직 충분하지 않으면 쓰레기가 많고 수집이없는 시나리오는 보이지 않습니다. 공간이 부족하거나 거의 부족할 때 (선택한 수집 알고리즘과 힙 크기 및 기타 매개 변수에 따라) 수집이 있습니다.
Java 가비지 수집기는 프로그래머가 C
또는 같은 관리되지 않는 언어에서 경험 한 고통스러운 문제를 해결합니다 C++
. 장점과 단점이 있습니다. 메모리에 대한 절대적인 제어가 필요한 경우 C
. 시스템을 더 쉽게 작성하고 GC에 추가 메모리를 할당하고 GC와 약간의 CPU 시간을 공유하는 데 신경 쓰지 않을 때 더 빠르게 작성할 수 있습니다 (더욱 강력합니다. 메모리 누수 및 기타 불쾌한 것들) 자바로.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다