반응형

답변

JVM에게 가비지 컬렉션(Garbage Collection)을 실행하라고 직접 명령할 수 있습니다. 이를 위해 자바에서는 System.gc() 또는 Runtime.getRuntime().gc() 메서드를 호출하여 가비지 컬렉션을 요청할 수 있습니다. 그러나 이 메서드를 호출한다고 해서 반드시 즉시 가비지 컬렉션이 실행되는 것은 아닙니다. JVM은 가비지 컬렉션 요청을 고려하지만, 실행 여부와 시점은 JVM의 판단에 따라 결정됩니다. 따라서, System.gc()를 통해 가비지 컬렉션을 명령할 수 있지만, JVM이 최적의 성능을 유지하기 위해 이를 무시할 수도 있습니다.

 

JVM은 가비지 컬렉션을 효율적으로 관리하기 위해 다양한 알고리즘을 사용하며, 프로그램의 실행 중에 자동으로 가비지 컬렉션을 수행합니다. 직접 System.gc()를 호출하는 것은 특정 상황에서 메모리 관리를 개선할 수 있지만, 과도하게 사용하면 오히려 성능 저하를 초래할 수 있습니다. JVM의 가비지 컬렉션은 내부적으로 최적화되어 있기 때문에, 대부분의 경우 수동 호출 없이도 잘 작동합니다.

 

 

GC 의 대상은 어떤것들이 주로 되는가?

가비지 컬렉션(Garbage Collection)의 대상이 되는 객체는 더 이상 참조되지 않거나, 사용되지 않는 객체들입니다. 주로 다음과 같은 객체들이 GC의 대상이 됩니다:

  1. 힙 영역에서 참조되지 않는 객체: 프로그램 실행 중 생성된 객체가 더 이상 어떤 변수나 객체에 의해 참조되지 않을 때, 이 객체는 가비지 컬렉션의 대상이 됩니다. 예를 들어, 메서드가 종료되면서 지역 변수들이 스코프를 벗어나게 되면, 이 변수들이 참조하던 객체들도 더 이상 접근할 수 없게 되어 가비지가 됩니다.
  2. 순환 참조(Circular References): 두 개 이상의 객체가 서로를 참조하고 있지만, 그 객체들에 대한 외부 참조가 없는 경우입니다. 이 경우에도 JVM은 참조 그래프를 분석하여 이러한 순환 참조 객체들을 가비지로 간주합니다.
  3. 임시 객체: 특정 작업을 수행하기 위해 생성된 임시 객체들은 작업이 완료되면 더 이상 참조되지 않기 때문에 가비지 컬렉션의 대상이 됩니다. 이러한 객체들은 주로 단기 메모리를 사용하고, 그 후에 가비지가 됩니다.
  4. 중복된 객체: 동일한 데이터를 표현하기 위해 생성된 중복 객체들이 있지만, 실제로는 하나의 객체만 필요할 때 나머지 객체는 가비지 컬렉션의 대상이 됩니다. 이는 주로 캐싱 메커니즘이나 객체 풀링에서 발생할 수 있습니다.

 

연결해서 물어볼 수 있는 질문과 답변

  1. 가비지 컬렉션의 종류에는 어떤 것이 있는가?
    • 답변: JVM에서 사용되는 가비지 컬렉션 알고리즘에는 Serial, Parallel, CMS(Concurrent Mark-Sweep), G1(Garbage-First) 등이 있습니다.
  2. System.gc()를 호출하면 언제 사용해야 하는가?
    • 답변: 일반적으로 System.gc()는 메모리 부족이 예상되는 상황에서 사용할 수 있지만, 남용하면 성능에 부정적인 영향을 미칠 수 있으므로 신중하게 사용해야 합니다.
  3. JVM이 가비지 컬렉션을 실행하는 기준은 무엇인가?
    • 답변: JVM은 힙 메모리 사용량이 임계치에 도달하거나 메모리가 부족할 때 가비지 컬렉션을 자동으로 실행합니다.

 

https://sematext.com/blog/java-garbage-collection-logs/

반응형

+ Recent posts