<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=Snapshot_at_the_begining</id>
	<title>Snapshot at the begining - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=Snapshot_at_the_begining"/>
	<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Snapshot_at_the_begining&amp;action=history"/>
	<updated>2026-06-13T20:44:13Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=Snapshot_at_the_begining&amp;diff=1579&amp;oldid=prev</id>
		<title>Ahn9807: 새 문서: 분류: Garbage collection  == Snapshot at the Beginning == &#039;&#039;&#039;Snapshot at the Beginning&#039;&#039;&#039;은 가비지 컬렉션(Garbage Collection, GC)에서 객체 참조 상태를 추적하기 위해 사용되는 전략이다. 주로 동시 가비지 컬렉션(Concurrent Garbage Collection)에서 사용되며, GC가 시작하는 시점의 객체 참조 상태(스냅샷)를 기준으로 살아있는 객체를 마킹한다. 이 전략은 객체 참조 상태의 동적 변경에 따른...</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Snapshot_at_the_begining&amp;diff=1579&amp;oldid=prev"/>
		<updated>2024-11-22T11:21:54Z</updated>

		<summary type="html">&lt;p&gt;새 문서: &lt;a href=&quot;/noriwiki/index.php?title=%EB%B6%84%EB%A5%98:Garbage_collection&quot; title=&quot;분류:Garbage collection&quot;&gt;분류: Garbage collection&lt;/a&gt;  == Snapshot at the Beginning == &amp;#039;&amp;#039;&amp;#039;Snapshot at the Beginning&amp;#039;&amp;#039;&amp;#039;은 가비지 컬렉션(Garbage Collection, GC)에서 객체 참조 상태를 추적하기 위해 사용되는 전략이다. 주로 동시 가비지 컬렉션(Concurrent Garbage Collection)에서 사용되며, GC가 시작하는 시점의 객체 참조 상태(스냅샷)를 기준으로 살아있는 객체를 마킹한다. 이 전략은 객체 참조 상태의 동적 변경에 따른...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[분류: Garbage collection]]&lt;br /&gt;
&lt;br /&gt;
== Snapshot at the Beginning ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Snapshot at the Beginning&amp;#039;&amp;#039;&amp;#039;은 가비지 컬렉션(Garbage Collection, GC)에서 객체 참조 상태를 추적하기 위해 사용되는 전략이다. 주로 동시 가비지 컬렉션(Concurrent Garbage Collection)에서 사용되며, GC가 시작하는 시점의 객체 참조 상태(스냅샷)를 기준으로 살아있는 객체를 마킹한다. 이 전략은 객체 참조 상태의 동적 변경에 따른 복잡성을 최소화하는 데 목적이 있다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Snapshot at the Beginning은 GC가 시작될 때 힙 메모리의 객체 참조 그래프를 &amp;quot;스냅샷&amp;quot;으로 간주하고, 이를 기준으로 살아있는 객체를 추적한다. 애플리케이션이 실행 중이더라도, 변경 전의 참조 상태를 기준으로 가비지 컬렉션이 진행된다. 이 전략은 동시 가비지 컬렉션의 일관성과 성능을 보장하기 위해 설계되었다.&lt;br /&gt;
&lt;br /&gt;
== 작동 원리 ==&lt;br /&gt;
=== GC 시작 ===&lt;br /&gt;
* GC가 시작되면 현재 힙 메모리의 객체 참조 상태를 &amp;quot;스냅샷&amp;quot;으로 간주한다.&lt;br /&gt;
* GC는 이 스냅샷을 기준으로 모든 작업을 수행한다.&lt;br /&gt;
&lt;br /&gt;
=== 마킹 단계 ===&lt;br /&gt;
* GC 루트(GC Roots)에서 시작하여 스냅샷 기준으로 도달 가능한 모든 객체를 탐색하고 마킹한다.&lt;br /&gt;
* 애플리케이션 실행 중에 참조가 변경되더라도, 변경 전 상태를 기준으로 마킹한다.&lt;br /&gt;
&lt;br /&gt;
=== Write Barrier 사용 ===&lt;br /&gt;
* GC가 실행되는 동안 객체 참조가 변경되면, Write Barrier를 통해 변경 사항이 기록된다.&lt;br /&gt;
* GC는 Write Barrier 정보를 활용하여 변경된 참조를 다시 확인하거나 마킹 작업을 보완한다.&lt;br /&gt;
&lt;br /&gt;
=== Compact/Free 단계 ===&lt;br /&gt;
* 마킹이 완료되면 스냅샷 기준으로 살아있지 않은 객체를 해제하거나 메모리를 압축(compaction)한다.&lt;br /&gt;
&lt;br /&gt;
== 장점 ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;일관성 유지&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  GC가 시작된 시점의 객체 참조 상태를 기준으로 작업을 수행하므로, 참조 변경에도 일관된 결과를 보장한다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;애플리케이션 실행과의 독립성&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  애플리케이션이 실행 중이더라도, GC 작업은 안정적으로 수행된다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;효율적인 동시 수집&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  Snapshot at the Beginning은 동시 GC에서 객체 참조 변경으로 인한 복잡성을 줄이며, 성능 최적화를 돕는다.&lt;br /&gt;
&lt;br /&gt;
== 단점 ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Write Barrier 오버헤드&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  참조 변경을 기록하기 위해 Write Barrier가 추가적으로 실행되므로, CPU 성능에 약간의 영향을 미친다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;False Negatives&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  참조가 변경된 경우, 스냅샷 기준으로 살아있지 않은 객체가 실제로는 참조되고 있을 수 있다. 이를 방지하기 위해 추가적인 마킹 작업이 필요하다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GC 지연 가능성&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  객체 참조 변경이 잦을 경우 Write Barrier 처리로 인해 GC 작업이 지연될 가능성이 있다.&lt;br /&gt;
&lt;br /&gt;
== 사용 알고리즘 ==&lt;br /&gt;
Snapshot at the Beginning 전략은 다음의 가비지 컬렉션 알고리즘에서 사용된다:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CMS(Concurrent Mark-Sweep) GC&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  CMS는 Snapshot at the Beginning 방식을 활용하여 객체 참조를 마킹하며, Write Barrier를 통해 변경 사항을 기록한다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;G1GC&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  G1GC는 동시 마킹 및 객체 참조 관리에서 이와 유사한 스냅샷 접근 방식을 사용한다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ZGC 및 Shenandoah&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
  최신 가비지 컬렉션 알고리즘에서도 Snapshot at the Beginning 접근 방식을 사용하여 동시성과 성능을 최적화한다.&lt;/div&gt;</summary>
		<author><name>Ahn9807</name></author>
	</entry>
</feed>