캐시와 메인 메모리 volatile에 대한 설명에 앞서, CPU의 메모리 참조에 대해서 간단하게 짚고 넘어가자. CPU는 코어당 한번에 하나의 쓰레드를 수행시키는데, 이 때 쓰레드의 작업에서 필요로 하는 데이터는 근본적으로는 메인 메모리인 RAM으로부터 온다. 그러나 CPU의 연산 속도에 비해 RAM은 한참 느리기 때문에 반복 사용되는 데이터를 CPU가 보다 빠르게 얻기 위해 캐시 메모리를 활용한다. 도식을 보면 CPU와 RAM 사이에 캐시 메모리가 자리하고 있는 것을 확인할 수 있다. CPU는 우선적으로 캐시에 사용하고자 하는 데이터가 있는지 확인하는데, L1, L2, L3 캐시 순서대로 확인해보고 캐시에서 데이터를 얻지 못하면 RAM에서 얻어온다. 이 글은 캐시에 대해 깊게 다루는 글은 아니므로 자세..
Garbage Collector가 뭔가요? Garbage는 말그대로 쓰레기, 즉 더 이상 사용하지 않거나 필요하지 않아 버리는 것들을 지칭한다. Java에서도 마찬가지의 의미로 쓰인다. 우리는 필요에 따라 수많은 객체들을 생성해서 사용하는데, 이들 중에 더 이상 참조되지 않는 객체들은 굳이 메모리에 계속 보관할 필요가 없기 때문에 garbage라고 부른다. Java의 JVM은 Garbage Collector(이하 GC)라는 청소부가 있어 이런 garbage들을 인식하고 자동적으로 메모리에서 그런 불필요한 데이터들을 비워준다. GC가 제거해줄 Garbage는 어디에 있나요? JVM의 Runtime Data Area 안에는 Heap Area라는 메모리 영역이 존재한다. JVM 파헤치기에서 보았듯, Heap ..
- Total
- Today
- Yesterday