์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- aws saa ํฉ๊ฒฉ
- JPA
- ํ์ดํผ๋ฐ์ด์
- ๋ค์ค ์ปจํ ์ด๋
- docker ps -a
- aws ์ฟ ํฐ
- ์๋ฐ
- nGrinder
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- prod docker-compose
- private subnet ec2 ๋ก์ปฌ ์ ์
- redis ํ ์คํธ์ฝ๋
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- s3 log ์ ์ฅ
- AWS Certified Solutions Architect - Associate
- Codedeploy ์ค๋ฅ
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- docker compose
- ์คํํ๋ ๋ฏธ์ค
- Entity
- docker-compose kafka
- Kafka
- redis ์กฐํ
- ํ๋ก๊ทธ๋๋จธ์ค
- docker
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 3.1 ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ต ๋ณธ๋ฌธ
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 3.1 ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ต
๐คRyusun๐ค 2025. 2. 15. 10:34ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ๊ฐ์ ๋จธ์ ์คํ, ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ์ค๋ ๋์ ํจ๊ป ์์ฑ๋๊ณ ์๋ฉธ๋๋ค. ๋ํ ๋ฉ์๋์ ์ง์ ํ๊ณ ๋์ฌ ๋๋ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์คํ ํ๋ ์์ ํธ์ํ๊ณ ํ ํ๋ค. ๊ฐ ์คํ ํ๋ ์์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค๊ฐ ๋ง๋ค์ด์ง ๋ ๊ฒฐ์ ๋๋ค. ๋ฐ๋ผ์ ์ด ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํ์๋ ์ด๋ป๊ฒ ํ์ํ ์ง๋ ๊ณ ๋ฏผํ์ง ์์๋ ๋๋ค. ๋ฉ์๋๊ฐ ๋๋๊ฑฐ๋ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ฉด ์๋ฐ ํ๊ณผ ๋ฉ์๋ ์์ญ์ ๊ตฌํํ ํด๋์ค๋ง๋ค ์๊ตฌํ๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ๋ค๋ฅผ์ ์์ผ๋ฉฐ, ์ด๋ค ์กฐ๊ฑด ๋ถ๊ธฐ๋ฅผ ์คํํ๋๋์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋์ด ๋ฌ๋ผ์ง ์ ์๋ค. ํ๋ก๊ทธ๋จ์ด ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ง, ์ผ๋ง๋ ๋ง์ด ๋ง๋ค์ง๋ ์ค์ง ๋ฐํ์์๋ง ์ ์ ์๋ค. ๊ทธ๋์ ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ๋ค์ ํ ๋น๊ณผ ํ์๋ ๋์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ฐ๋ก ์ด๋ฐ ์์ญ์ ๊ด๋ฆฌํ๋๋ฐ ์ง์คํ๋ค.
์๋ฐ๋ ๊ฑฐ์ ๋ชจ๋ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ํ์ ์ ์ฅํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ด์์๊ณ , ์ฃฝ์๋์ง๋ฅผ ํ๋จํ ํ, ํ์ ์ฒญ์ํ๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ๊ฐ์ฒด๊ฐ ์ด์์๋์ง, ์ฃฝ์ด์๋์ง ํ๋จํ ์ ์์๊น?
๋ํ์ ์ผ๋ก ์ฐธ์กฐ ์นด์ดํ ์ ์ฌ์ฉํ์ฌ ํ๋จํ๋ค๊ณ ์๊ฐํ์ง๋ง ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์ฐธ์กฐ ์นด์ดํ ์ ์ฐ์ง ์๋๋ค.
์ฐธ์กฐ ์นด์ดํ
1. ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ์นด์ดํฐ(reference counter)๋ฅผ ์ถ๊ฐํ๋ค. ์ฐธ์กฐํ๋ ๊ณณ์ด ํ๋ ๋์ด๋ ๋๋ง๋ค ์นด์ดํฐ ๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํจ๋ค.
2. ์ฐธ์กฐํ๋ ๊ณณ์ด ํ๋ ์ฌ๋ผ์ง ๋๋ง๋ค ์นด์ดํฐ ๊ฐ์ 1์ฉ ๊ฐ์์ํจ๋ค.
3. ์นด์ดํฐ ๊ฐ์ด 0์ด ๋ ๊ฐ์ฒด๋ ๋๋ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐ ์นด์ดํ ๋ง์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ต๋ค. ์๋ฅผ ๋ค์ด, ์ํ ์ฐธ์กฐ๊ฐ์ ๋ฌธ์ ๋ ์๋ก ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ ์นด์ดํฐ๋ 0์ด ์๋๋ ๋ฌธ์ ๋ก ์ฐธ์กฐ ์นด์ดํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๋์ ํ์ํ์ง ๋ชปํ๋ค.
๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ
์๋ฐ๋ ๊ฐ์ฒด ์์ฌ ํ๋จ์ ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ ์์ด๋์ด๋ GC ๋ฃจํธ๋ผ๊ณ ํ๋ ๋ฃจํธ ๊ฐ์ฒด๋ค์ ์์ ๋ ธ๋ ์งํฉ์ผ๋ก ์ฐ๋ ๊ฒ์ด๋ค. ์์ ๋ ธ๋๋ค์์ ์ถ๋ฐํ์ฌ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๋ก ํ์ํด ๋ค์ด๊ฐ๋ค. ํ์ ๊ณผ์ ์์ ๋ง๋ค์ด์ง๋ ๊ฒฝ๋ก๋ฅผ ์ฐธ์กฐ ์ฒด์ธ์ด๋ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ฐ์ฒด์ GC ๋ฃจํธ ์ฌ์ด๋ฅผ ์ด์ด์ฃผ๋ ์ฐธ์กฐ ์ฒด์ธ์ด ์๋ค๋ฉด, ์ฆ GC ๋ฃจํธ๋ก๋ถํฐ ๋๋ฌ ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๋ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ ๊ฒ ํ์คํด์ง๋ค. ๊ฐ์ฒด๋ค์ด ์๋ก ์ด์ด์ ธ ์์ง๋ง GC ๋ฃจํธ๋ก๋ถํฐ ๋๋ฌํ ๊ธธ์ด ์์ผ๋ฉด ํ์ ๋์์ด ๋๋ค.
์๋ฐ์์ GC ๋ฃจํธ๋ก ์ด์ฉํ ์ ์๋ ๊ฐ์ฒด๋ ์ ํด์ ธ์๋ค.
- ๊ฐ์ ๋จธ์ ์คํ(์คํ ํ๋ ์์ ์ง์ญ ๋ณ์ ํ
์ด๋ธ)์์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด
- ํ์ฌ ์คํ ์ค์ธ ๋ฉ์๋์์ ์ฐ๋ ๋งค๊ฐ ๋ณ์, ์ง์ญ ๋ณ์, ์์ ๋ณ์ ๋ฑ
- ๋ฉ์๋ ์์ญ์์ ํด๋์ค๊ฐ ์ ์ ํ๋๋ก ์ฐธ์กฐํ๋ ๊ฐ์ฒด
- ์๋ฐ ํด๋์ค์ ์ฐธ์กฐ ํ์ ์ ์ ๋ณ์
- ๋ฉ์๋ ์์ญ์์ ์์๋ก ์ฐธ์กฐ๋๋ ๊ฐ์ฒด
- ๋ฌธ์์ด ํ ์ด๋ธ ์์ ์ฐธ์กฐ
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์์ JNI(๋ค์ดํฐ๋ธ ๋ฉ์๋)๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด
- ์๋ฐ ๊ฐ์ ๋จธ์ ๋ด๋ถ์์ ์ฐ์ด๋ ์ฐธ์กฐ
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ์ ํด๋นํ๋ Class ๊ฐ์ฒด
- NullPointerException, OutOfMemoryError ๋ฑ์ ์ผ๋ถ ์์ฃผ ์์ธ ๊ฐ์ฒด
- ์์คํ ํด๋์ค ๋ก๋
- ๋๊ธฐํ ๋ฝ(synchronized)์ผ๋ก ์ ๊ฒจ ์๋ ๋ชจ๋ ๊ฐ์ฒด
- ์๋ฐ ๊ฐ์ ๋จธ์ ๋ด๋ถ ์ํฉ์ ๋ฐ์ํ๋ JVMTI์ ๋ฑ๋ก๋ ์ฝ๋ฐฑ, ๋ก์ปฌ ์ฝ๋ ์บ์ ๋ฑ
๊ฐ์ฒด๋ ๋ค๋ฅธ ์์ญ์ ์๋ ๊ฐ์ฒด๋ ์ฐธ์กฐํ ์ ์์ผ๋ฏ๋ก ์ฐ๊ด๋ ์์ญ์ ๊ฐ์ฒด๋ค๋ GC ๋ฃจํธ ์งํฉ์ ํฌํจ์์ผ์ผ ๋๋ฌ ๊ฐ๋ฅ์ฑ์ ์ ํํ๊ฒ ๋ถ์ํ ์ ์๋ค.
์ฐธ์กฐ
๊ฐ์ฒด์ ์์ฌ ํ๋จ๊ณผ '์ฐธ์กฐ'๋ ๋ถ๋ฆฌํด์ ์๊ฐํ ์ ์๋ค. JDK 1.2๋ถํฐ ์ฐธ์กฐ ๊ฐ๋ ์ด ํ์ฅ๋์ด ์ฐธ์กฐ๋ฅผ ๋ค ๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ค.
- ๊ฐํ ์ฐธ์กฐ(strong reference)
- ๊ฐ์ฅ ์ ํต์ ์ธ ์ ์์ ์ฐธ์กฐ
- Object obj = new Object()์ฒ๋ผ ํ๋ก๊ทธ๋จ ์ฝ๋์์ ์ฐธ์กฐ๋ฅผ ํ ๋น์ ๋ปํจ
- ๊ฐํ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋จ์์๋ ๊ฐ์ฒด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ๋ ํ์ํ์ง ์๋๋ค.
- ๋ถ๋๋ฌ์ด ์ฐธ์กฐ(soft reference)
- ์ ์ฉํ์ง๋ง ํ์๊ฐ ์๋ ๊ฐ์ฒด
- ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก๊ฐ ๋๊ธฐ ์ง์ ์ ๋ ๋ฒ์งธ ํ์๋ฅผ ์ํ ํ์ ๋ชฉ๋ก์ ์ถ๊ฐ๋๋ค.
- ๋๋ฒ์งธ ํ์ ํ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด ๊ทธ๋ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก ์์ธ๋ฅผ ๋์ง๋ค.
- ์ฝํ ์ฐธ์กฐ(weak reference)
- ๋ถ๋๋ฌ์ด ์ฐธ์กฐ๋ณด๋ค ์ฐ๊ฒฐ ๊ฐ๋๊ฐ ๋ ์ฝํ๋ค.
- ๋ค์๋ฒ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊น์ง๋ง ์ด์์๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์ํ๊ธฐ ์์ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ํ๋๋ผ๋ ์ฝํ๊ฒ ์ฐธ์กฐ๋ ๊ฐ์ฒด๋ ๋ชจ๋ ํ์๋๋ค.
- ์ ๋ น ์ฐธ์กฐ(phantom reference)
- ๊ฐ์ฒด ์๋ช ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- ์ ๋ น ์ฐธ์กฐ๋ฅผ ํตํด ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค์ง ๋ชปํ๋ค.
- ์ ์ผํ ๋ชฉ์ ์ ๋์ ๊ฐ์ฒด๊ฐ ํ์๋ ๋ ์๋ฆผ์ ๋ฐ๊ธฐ ์ํด์๋ค.
์ด์๋ ์ฃฝ์๋?
๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ด '๋๋ฌ ๋ถ๊ฐ๋ฅ'์ผ๋ก ํ๋จํ ๊ฐ์ฒด๋ ๋ฐ๋์ ์ฃฝ์ ๊ฐ์ฒด๋ ์๋๊ณ ๋ ๋ฒ์ ํ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์์ผ๋ก GC ๋ฃจํธ์ ์ฐ๊ฒฐ๋ ์ฐธ์กฐ ์ฒด์ธ์ ์ฐพ์ง ๋ชปํ ๊ฐ์ฒด์๋ ์ฒซ ๋ฒ์งธ ํ์๊ฐ ์ด๋ฃจ์ด์ง๋ฉฐ ํํฐ๋ง์ด ์งํ๋๋ค. ํํฐ๋ง ์กฐ๊ฑด์ ์ข ๋ฃ์(finalizer), ์ฆ 'finalize() ๋ฉ์๋๋ฅผ ์คํดํด์ผ ํ๋ ๊ฐ์ฒด์ธ๊ฐ'์ด๋ค. finalize()๊ฐ ํ์ ์๋ ๊ฐ์ฒด์ด๊ฑฐ๋ ๊ฐ์ ๋จธ์ ์ด finalize()๋ฅผ ์ด๋ฏธ ํธ์ถํ ๊ฒฝ์ฐ ๋ชจ๋ '์คํํ ํ์ ์์'์ผ๋ก ์ฒ๋ฆฌํ๋ค.
finalize()๋ฅผ ์คํํด์ผ ํ๋ ๊ฐ์ฒด๋ F-ํ(F-Queue)๋ผ๋ ๋๊ธฐ์ด์ ์ถ๊ฐ๋๋ค. ๊ทธ๋ผ ๊ฐ์ ๋จธ์ ์ด ๋์ค์ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ข ๋ฃ์ ์ค๋ ๋๋ฅผ ์์ฑํด F-ํ์ ๋ค์ด์๋ ๊ฐ์ฒด๋ค์ finalize() ๋ฉ์๋๋ฅผ ์คํํ๋ค. ๊ฐ์๋จธ์ ์ ์ด ๋ฉ์๋๋ฅผ ์์๋ง ํ ๋ฟ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
๋ง์ฝ ๊ฐ์ฒด๊ฐ finalize()๋ฅผ ์ด์ฉํ์ฌ ์ฐธ์กฐ ์ฒด์ธ์์ ์๋ฌด ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๋ฉด ๋ ๋ฒ์งธ ํ์ ๊ณผ์ ์์ 'ํ์ ๋์' ๋ชฉ๋ก์์ ์ ์ธ๋๋ค.
ํ์ง๋ง finalize()์ ์คํํ๋ ๋น์ฉ๋ ๋๊ณ ๋ถํ์ค์ฑ๋ ํฌ๋ฏ๋ก ๊ฐ๋ฅํ ํ ์ฌ์ฉํ์ง ์๋ ๊ฒ ์ข๋ค.
๋ฉ์๋ ์์ญ ํ์ํ๊ธฐ
<์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ>์ ๋ฐ๋ฅด๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ์๋ ์์ญ์ ๋ฐ๋์ ์ฒญ์ํด์ผ ํ๋ ๊ฑด ์๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ํ ๋ฒ์ผ๋ก ์๋ฐ ํ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ 70~90% ๋ฅผ ํ์ํ๋ ๋ฐ๋ฉด, ๋ฉ์๋ ์์ญ์ ํ์ ์กฐ๊ฑด์ด ๊น๋ค๋ก์์ ๋์ฒด๋ก '๋น์ฉ ํจ์จ'์ด ์ข์ง ์๋ค.
๋ฉ์๋ ์์ญ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ '์์'์ 'ํด๋์ค'๋ฅผ ํ์ํ๋ค. ์์๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ์๊ณ , ๊ฐ์ ๋จธ์ ์์ ์ด ์์๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ํ์ํ๋ค. ํ์ง๋ง ๋ ์ด์ ์ฐ์ด์ง ์๋ 'ํด๋์ค'๋ฅผ ํ๋จํ ๋๋ ๋ค์ ์ธ ์กฐ๊ฑด์ ๋์์ ๋ง์กฑํด์ผ ํ๋ค.
- ์ด ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ํ์๋์๋ค. ์ฆ, ์๋ฐ ํ์๋ ํด๋น ํด๋์ค์ ํ์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ ์กด์ฌํ์ง ์๋๋ค.
- ์ด ํด๋์ค๋ฅผ ์ฝ์ด ๋ค์ธ ํด๋์ค ๋ก๋๊ฐ ํ์๋์๋ค. ์ด ์กฐ๊ฑด์ OSGi ๋ JSP ๋ฆฌ๋ก๋ฉ์ฒ๋ผ ์ธ์ฌํ๊ฒ ์ค๊ณ๋ ๋์ ํด๋์ค ๋ก๋ ์์ด๋ ์ถฉ์กฑํ๊ธฐ ์ด๋ ต๋ค.
- ์ด ํด๋์ค์ ํด๋นํ๋ java.lang.Class ๊ฐ์ฒด๋ฅผ ์๋ฌด ๊ณณ์์ ์ฐธ์กฐํ์ง ์๊ณ , ๋ฆฌํ๋ ์ ๊ธฐ๋ฅ์ผ๋ก ์ด ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ณณ๋ ์ ํ ์๋ค.
์๋ฐ ๊ฐ์ ๋จธ์ ์ ์ธ ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ธ๋ชจ์๋ ํด๋์ค๋ค์ ํ์ํ๋๋ก ํ์ฉํ๋ค.
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ํด๋์ค ํ์ ์ฌ๋ถ๋ฅผ ์ ์ดํ ์ ์๋๋ก -Xnoclassgc ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ณตํ๋ค. ๋ํ -verbose:class, -Xlog:class+load=info, -Xlog:class_unload=info ๋งค๊ฐ๋ณ์๋ก๋ ํด๋์ค๊ฐ ๋ก๋ฉ๋๊ณ ์ธ๋ก๋ฉ ๋๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ
๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐ๋ ์๋ง์ ๊ธฐ๋ฒ์ด ํ์ฉ๋๋ฉฐ ๊ฐ์ ๋จธ์ ๋๋ ํ๋ซํผ์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ๋ง๋ค.
๊ฐ์ฒด์ ์์ฌ๋ฅผ ํ๋ณํ๋ ๋ฐฉ์์ ๊ธฐ์ค์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ '์ฐธ์กฐ ์นด์ดํ GC (์ง์ ๊ฐ๋น์ง ์ปฌ๋ ์ )'์ '์ถ์ GC (๊ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ )'๋ก ๋๋ ์ ์๋ค.
์ธ๋ ๋จ์ ์ปฌ๋ ์ ์ด๋ก
ํ์ฌ ์์ฉ ๊ฐ์ ๋จธ์ ๋ค์ด ์ฑํํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋๋ค์ ํ๋ก๊ทธ๋จ์์ ๊ด์ธก๋ ์ค์ ์ํฉ๋ค์์ ์ป์ ๊ฒฝํ ๋ฒ์น์ ๊ตฌํํ ์ธ๋ ๋จ์ ์ปฌ๋ ์ ์ด๋ก ์ ๊ธฐ์ดํด ์ค๊ณ๋์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ฐ์ ์ด ๋ฟ๋ฆฌ๋ฅผ ์ด๋ฃฌ๋ค.
- ์ฝํ ์ธ๋ ๊ฐ์ค: ๋๋ค์ ๊ฐ์ฒด๋ ์ผ์ฐ ์ฃฝ๋๋ค.
- ๊ฐํ ์ธ๋ ๊ฐ์ค: ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ์ ์์ ์ด์๋จ์ ํ์๊ฐ ๋์ด๋ ์๋ก ๋ ์ค๋ ์ด ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋ค.
์ด ๋ ๊ฐ์ ์ด ํฉ์ณ์ ธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ค์ ์ผ๊ด๋ ์ค๊ณ ์์น์ ์ ๊ณตํ๋ค. ์๋ฐ ํ์ ๋ช ๊ฐ์ ์์ญ์ผ๋ก ๋๋๊ณ ๊ฐ์ฒด๋ค์ ๋์ด์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ์์ญ์ ํ ๋นํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ ์ด์๋จ์ ํ์๋ฅผ ๋งํ๋ค. ์์ญ ์์ ๊ฐ์ฒด ๋๋ถ๋ถ์ด ๊ณง๋ฐ๋ก ์ฃฝ์ ์ด๋ช ์ด๋ผ๋ฉด ๊ทธ ๊ฐ๊ฒ๋ค์ ํ๋ฐ ๋ชฐ์๋ฃ๊ณ ์ด์๋จ๋ ์์์ ๊ฐ์ฒด๋ฅผ ์ ์งํ๋ฉด, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋๋ ์ ์ฒด ์๊ฐ๋ ์ค๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ํจ์จ์ ์ผ๋ก ์ด์ฉํ ์ ์๋ค.
์๋ฐ ํ์ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ํ ๋ฒ์ ํ๋ ๋๋ ๋ช ๊ฐ์ ์์ญ๋ง ์ ํํด ํ์ํ ์ ์๋๋ฐ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ง์ด๋ GC, ๋ฉ์ด์ GC, ์ ์ฒด GC๋ก ๋ถ๋ฅธ๋ค.
- ๋ถ๋ถ GC : ์๋ฐ ํ์ ์ผ๋ถ๋ง ํ์ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ๋งํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ธ๋ถํ๋๋ค.
- ๋ง์ด๋ GC(์ ์ธ๋ GC) : ์ ์ธ๋๋ง ๋์์ผ๋ก ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์
- ๋ฉ์ด์ GC(๊ตฌ์ธ๋ GC) : ๊ตฌ์ธ๋๋ง ๋์์ผ๋ก ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ . ์งํ ์์ ๊ธฐ์ค์ผ๋ก ์ค์ง CMS ์ปฌ๋ ํฐ๋ง ๊ตฌ์ธ๋๋ฅผ ๋ฐ๋ก ํ์ํ๋ค.
- ํผํฉ GC : ์ ์ธ๋ ์ ์ฒด์ ๊ตฌ์ธ๋ ์ผ๋ถ๋ฅผ ๋์์ผ๋ก ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ . ์งํ ์์ ๊ธฐ์ค์ผ๋ก G1 ์ปฌ๋ ํฐ๋ง ์ด๋ ๊ฒ ๋์ํ๋ค.
- ์ ์ฒด GC : ์๋ฐ ํ ์ ์ฒด์ ๋ฉ์๋ ์์ญ๊น์ง ๋์์ผ๋ก ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์
๋งํฌ-์ค์ ์๊ณ ๋ฆฌ์ฆ
์์ ์ ํ์(mark)์ ์ธ๊ธฐ(sweep) ๋ ๋จ๊ณ๋ก ์งํํ๋ค. ๋จผ์ ํ์ํ ๊ฐ์ฒด๋ค์ ๋ชจ๋ ํ์ํ ๋ค์, ํ์๋ ๊ฐ์ฒด๋ค์ ๋ด๋๋ค. ๋ฐ๋๋ก ์ด๋ฆด ๊ฐ์ฒด์ ํ์๋์ง ์์ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค.
๋จ์
- ์คํ ํจ์จ์ด ์ผ์ ํ์ง ์๋ค. ์๋ฐ ํ์ ๊ฐ์ฒด๊ฐ ๋ง๊ณ ๋๋ถ๋ถ์ด ํ์ ๋์์ด๋ฉด ํ์ํ๋ ์ผ๊ณผ ํ์ํ๋ ์ผ์ด ์ปค์ง๋ค. ์ฆ ๊ฐ์ฒด๊ฐ ๋ง์์ง์๋ก ํ์ํ๊ณ ์ธ์ด ๋ด๋ ์์ ์ ํจ์จ์ด ๋จ์ด์ง๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํํธํ๊ฐ ์ฌํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ธ๊ณ ๊ฐ๋ฉด ๋ถ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํํธ์ด ๋ง๋ค์ด์ง๋ค. ํํธํ๊ฐ ๋๋ฌด ์ฌํ๋ฉด ํ๋ก๊ทธ๋จ์ด ํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ ค ํ ๋ ์ถฉ๋ถํ ํฌ๊ธฐ์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์์ง๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋ ๋ค๋ฅธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ๋ฐํ๋ค.
๋งํฌ-์นดํผ ์๊ณ ๋ฆฌ์ฆ
๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๊ฐ์ ํฌ๊ธฐ์ ๋ ๋ณผ๋ก์ผ๋ก ๋๋ ํ ๋ฒ์ ํ ๋ธ๋ก๋ง ์ฌ์ฉํ๊ณ ํ์ชฝ ๋ธ๋ก์ด ๊ฝ ์ฐจ๋ฉด ์ด์๋จ์ ๊ฐ์ฒด๋ค๋ง ๋ค๋ฅธ ๋ธ๋ก์ ๋ณต์ฌํ๊ณ ๊ธฐ์กด ๋ธ๋ก์ ํ๋ฒ์ ์ฒญ์ํ๋ค. ์ค๋๋ ์ฌ์ฉ ์๋ฐ ๊ฐ์ ๋จธ์ ๋๋ถ๋ถ์ ์ ์ธ๋์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ค.
์ฅ์
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์ฝ๊ณ ์คํ ํจ์จ๋ ์ข๋ค.
๋จ์
- ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ฌ ๋ญ๋น๊ฐ ์ฌํ๋ค.
์ฆ, ๊ฐ์ฒด ์์กด์จ์ด ๋์์๋ก ๋ณต์ฌํ ๊ฒ ๋ง์์ ธ์ ํจ์จ์ด ๋๋น ์ง๊ณ , ๊ณต๊ฐ์ ๋ญ๋นํ๋ ๊ฒ์ ๋์ฒดํ๊ธฐ ์ํด ํ๋น ๋ณด์ฆ์ฉ ๊ณต๊ฐ์ ๋ง๋ จํ์ฌ ๋๋ค์ ๊ฐ์ฒด๊ฐ ์ด์๋จ๋ ๊ทน๋จ์ ์ํฉ์ ๋์ฒํด์ผ ํ๋ค.
์ํ ์คํ์ผ ์ปฌ๋ ์
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ์ ์ธ๋ ์ปฌ๋ ํฐ๋ ๋ชจ๋ ์ ์ธ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ด์์์ ์ด ์ ๋ต์ ๋ถํฉํ๊ฒ ๊ตฌ์ฑํ๋ค.
์ํ ์คํ์ผ ์ปฌ๋ ์ ๋ฐฉ์์ ์ ์ธ๋๋ฅผ ํ๋์ ํฐ ์๋ด ๊ณต๊ฐ๊ณผ ๋ ๊ฐ์ ์์ ์์กด์ ๊ณต๊ฐ์ผ๋ก ๋๋๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋๋ ์์กด์ ๊ณต๊ฐ ์ค ํ๋์ ์๋ด๋ง ์ฌ์ฉํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์์๋๋ฉด ์๋ด๊ณผ ์์กด์ ๊ณต๊ฐ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ ๋๋จธ์ง ์์กด์ ๊ณต๊ฐ์ผ๋ก ํ๋์ฉ ๋ณต์ฌํ ํ ์๋ด๊ณผ ์ด์ ์์กด์ ๊ณต๊ฐ์ ๊ณง๋ฐ๋ก ๋น์ด๋ค. ์ํ ์คํ์ผ ์ปฌ๋ ์ ์ ๋ญ๋นํ๋ ๊ณต๊ฐ์ ๋์ฒํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ณด์ฆ ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐํ์๋๋ฐ, ์ด ๋ฉ์ปค๋์ฆ์ ๋ง์ด๋ GC์์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ์์กด์ ๊ณต๊ฐ์ด ๋ค ์์ฉํ์ง ๋ชปํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ์ฉํด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ณด์ฆํ๋ค.
๋งํฌ-์ปดํฉํธ ์๊ณ ๋ฆฌ์ฆ
ํ์ ๋จ๊ณ๋ ๋งํฌ-์ค์๊ณผ ๊ฐ๋ค. ํ์ง๋ง ๋ค์ ์ปดํฉํธ ๋จ๊ณ์์ ํ์ ๋์ ๊ฐ์ฒด๋ค์ ๊ณง๋ฐ๋ก ์ธ์ด ๋ด๋ ๋์ , ์์กดํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ์ชฝ ๋์ผ๋ก ๋ชจ์ ๋ค์, ๋๋จธ์ง ๊ณต๊ฐ์ ํ๊บผ๋ฒ์ ๋น์ด๋ค. ๋งํฌ-์ค์๊ณผ์ ์ฐจ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋์ด ์ผ์ด๋๋ค. ๊ตฌ์ธ๋์์๋ ํ์ ๋๋ง๋ค ์ด์๋จ๋ ๊ฐ์ฒด๊ฐ ๋ง์ ์์กดํ ๊ฐ์ฒด๋ฅผ ์ด๋์ํจํ, ์ด๋๋ ๊ฐ์ฒด๋ค์ ๊ฐ๋ฆฌํค๋ ๊ธฐ์กด ์ฐธ์กฐ๋ค์ ๋ชจ๋ ๊ฐฑ์ ํ๊ธฐ ์ด๋ ต๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์ ๊ทผ์ ๋ถ๋ด์ ๋ง์ด ๋ํ์ง ์๋ ๋ฐฉ์์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ฅผ ๊ฐ๋ดํ๋ฉด์ ๋งํฌ-์ค์์ ์ฌ์ฉํ๋ค๊ฐ, ๊ฐ์ฒด ํ ๋น์ ์ํฅ์ ์ค ๋งํผ ํํธํ๊ฐ ์ฌํด์ง๋ฉด ๋งํฌ-์ปดํฉํธ๋ฅผ ๋๋ ค ์ฐ์๋ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ด๋ค. CMS๋ ๋งํฌ-์ค์์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ํํธํ๊ฐ ์ฌํด์ง๋ฉด ์ด ์ ๋ต์ ์คํํ์ฌ ๋จ์ ์ ๋ณด์ํ๋ค.
ํซ์คํ ์๊ณ ๋ฆฌ์ฆ ์์ธ ๊ตฌํ
ํจ์จ์ ์ธ ๊ฐ์ ๋จธ์ ์ ๋ง๋ค๋ ค๋ฉด ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ํจ์จ์ ๋ฐ์ ธ๋ด์ผ ํ๋ค. ๋ค์ํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์๊ฐํ ๊ฒ์ด๋ฉฐ, ํ์ํ ๊ธฐ์ด ์ง์์ ์๊ฐํ๋ค.
๋ฃจํธ ๋ ธ๋ ์ด๊ฑฐ
'ํจ์จ์ ์ธ ๊ฐ์ ๋จธ์ ๊ตฌํํ๊ธฐ'์ ์ฒซ ๋ฒ์งธ ์๋ก๋ ๋ฃจํธ ๋ ธ๋ ์ด๊ฑฐ์ด๋ค.
- ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์์ GC ๋ฃจํธ ์งํฉ์ผ๋ก๋ถํฐ ์ฐธ์กฐ ์ฒด์ธ์ ์ฐพ๋ ์์
- GC ๋ฃจํธ๋ก ๊ณ ์ ํ ์ ์๋ ๋ ธ๋๋ ์ฃผ๋ก ์ ์ญ ์ฐธ์กฐ(์์์ ํด๋์ค ์ ์ ์์ฑ ๋ฑ)์ ์คํ ์ฝํ ์คํธ(์คํ ํ๋ ์์ ์ง์ญ ๋ณ์ ํ ์ด๋ธ ๋ฑ)์ ์กด์ฌํ๋ค.
์ค๋ ๋ ์ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑฐ๋ํด์ง๊ณ ์์ด, ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ํ์ธํ๋ ค๋ฉด ์๊ฐ์ด ๋ง์ด ์์๋๋ค. ์ง๊ธ๊น์ง ๋ชจ๋ ์ปฌ๋ ํฐ๋ ๋ฃจํธ ๋ ธ๋ ์ด๊ฑฐ ๋จ๊ณ์์ ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ์ผ์ ์ ์งํด์ผ ํ๋ค. ํ์ง๋ง ํ์ฌ ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐ ์ฒด์ธ ์ฐพ๊ธฐ ๊ณผ์ ์์ ๊ฐ์ฅ ์ค๋ ๊ฑฐ๋ฆฌ๋ ์์ ์ ๋คํํ๋ ์ฌ์ฉ์ ์ค๋ ๋์ ๋์์ ์คํํ ์ ์๋ค. ๋จ, ๋ฐ๋์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋๋ ์ค๋ ์ ์ํ์์ ์ํํด์ผ ํ๋ค. ์ฌ๊ธฐ์์ ์ผ๊ด์ฑ์ด๋ ์ด๊ฑฐ ์์ ์ด ์งํ๋๋ ๋์ ๋ฃจํธ ๋ ธ๋๋ค์ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋ณํ์ง ์์์ผ ํ๋ค. ํ์ฌ ์ฃผ๋ฅ ์๋ฐ ๊ฐ์ ๋จธ์ ๋ค์ '์ ํํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋๋ฐ ์ด๋ ์ ํํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ ์ ์ฉํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋งํ๋ค. ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ์ ์งํ ํ ์คํ ์ฝํ ์คํธ์ ์ ์ญ ์ฐธ์กฐ์ ์์น๋ฅผ ๋น ์ง์์ด ํ์ธํ ํ์๊ฐ ์๋ค. ๊ทธ ๋์ ๊ฐ์ ๋จธ์ ์ด ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ์ง์ ์์๋ผ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํ๋ค.
ํซ์คํ์ 0opMap ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ํด๋์ค ๋ก๋ฉ์ด ์๋ฃ๋๋ฉด ๊ฐ์ฒด์ ํฌํจ๋ ๊ฐ ๋ฐ์ดํฐ์ ํ์ ์ ํ์ธํ ํ, JIT ์ปดํ์ผ ๊ณผ์ ์์ ์คํ์ ์ด๋ ์์น์ ์ด๋ ๋ ์ง์คํฐ์ ๋ฐ์ดํฐ๊ฐ ์ฐธ์กฐ์ธ์ง ๊ธฐ๋กํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ปฌ๋ ํฐ๋ ๋ฉ์๋ ์์ญ๊ณผ ๋ค๋ฅธ GC ๋ฃจํธ๋ค์ ์ถ์ ํด๋ณด์ง ์๊ณ ์ค์บ ๊ณผ์ ์์ ์ด ์ ๋ณด๋ฅผ ์ง์ ์ป์ด๋ธ๋ค.
์์ ์ง์
ํซ์คํ์ 0opMap์ ํ์ฉํ์ฌ GC ๋ฃจํธ๋ค์ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ์ด๊ฑฐํ ์ ์๋ค. ํ์ง๋ง ์ฐธ์กฐ ๊ด๊ณ๋ 0opMap์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ช ๋ น์ด๊ฐ ๋ง์ผ๋ฉด, ๋ช ๋ น์ด ๋ชจ๋ 0opMap์ ๋ง๋ค์ด ๋์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํด์ผํ๋ค. ๊ทธ๋์ ํซ์คํ์ ๋ชจ๋ ๋ช ๋ น์ด ๊ฐ๊ฐ์ 0opMap์ ์์ฑํ์ง ์๊ณ ์์ ์ง์ ์ด๋ผ๊ณ ํ๋ ํน์ ํ ์์น์๋ง ๊ธฐ๋กํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์์ ์ง์ ์ ๋๋ฌํ ๋๊น์ง๋ ์ ๋ ๋ฉ์ถ์ง ์๋๋ค. ๋ฐ๋ผ์ ์์ ์ง์ ์ ๋๋ฌด ์ ๊ฒ ์ค์ ํด์ ์ปฌ๋ ํฐ๊ฐ ๋๋ฌด ์ค๋ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๊ฑฐ๋, ๋ฐ๋๋ก ๋๋ฌด ๋ง์ด ์ค์ ํด์ ๋ฐํ์ ๋ฉ๋ชจ๋ฆฌ ๋ถํ๊ฐ ์ปค์ง์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
์์ ์ง์ ์ ์์น๋ฅผ ์ ํํ๋ ๊ธฐ์ค์ 'ํ๋ก๊ทธ๋จ์ด ์ฅ์๊ฐ ์คํ๋ ๊ฐ๋ฅ์ฑ์ด ์๋๊ฐ'์ด๋ค. '์ฅ์๊ฐ ์คํ'๋ ๊ฐ๋ฅ์ฑ์ ๋ณด์์ฐ๋ ์ํฉ์ ๋ช ๋ น์ด ํ๋ฆ์ด ๋ค์คํ ๋ ๋์ธ๋ฐ, ๋ฉ์๋ ํธ์ถ, ์ํ๋ฌธ, ์์ธ ์ฒ๋ฆฌ ๋ฑ ๋ช ๋ น์ด ํ๋ฆ์ ๋ค์คํํ๋ ์์ด๋ฉฐ, ์ด๋ฐ ๊ธฐ๋ฅ์ ํ๋ ๋ช ๋ น์ด๋ง์ด ์์ ์ง์ ์ ์์ฑํ๋ค.
๋ํ ์ถ๊ฐ์ ์ผ๋ก ์์ ์ง์ ๊ณผ ๊ด๋ จํ์ฌ ๊ณ ๋ คํด์ผ ํ ๋ฌด๋ค๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์์๋๋ฉด JNI ํธ์ถ์ ์คํ ์ค์ธ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ์ง์ ๊น์ง ์คํํ๊ณ ๋ฉ์ถ๊ฒ ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ฐ, ์ ์ ์ ๋ฉ์ถค๊ณผ ์๋ฐ์ ๋ฉ์ถค์ด ์๋ค.
์ ์ ์ ๋ฉ์ถค(preemptive suspension)
- ์ค๋ ๋์ ์ฝ๋๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ํน๋ณํ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์คํ๋๋ฉด ์์คํ ์ด ๋ชจ๋ ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ์ธํฐ๋ฝํธ ํ์ฌ, ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ์ค๋จ๋ ์์น๊ฐ ์์ ์ง์ ์ด ์๋๋ผ๋ฉด ์ค๋ ๋๋ฅผ ์ฌ๊ฐํ๊ณ ์์ ์ง์ ์ ๋๋ฌํ ๋๊น์ง ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ๋ณตํ๋ค.
- ํ์ง๋ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ์ ์ ๋ฉ์ถค ๋ฐฉ์์ ์ด์ฉํ๋ ๊ฐ์ ๋จธ์ ์ ๊ฑฐ์ ์๋ค.
์๋ฐ์ ๋ฉ์ถค(voluntary suspension)
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ค๋ ๋ ์ํ์ ์ง์ ๊ด์ฌํ์ง ์๋๋ค.
- ํ๋ ๊ทธ ๋นํธ๋ฅผ ์ค์ ํ๊ณ , ๊ฐ ์ค๋ ๋๊ฐ ์คํ ์ค์ ํ๋๊ทธ๋ฅผ ์ ๊ทน์ ์ผ๋ก ํด๋ง ํ๋ค. ํ๋๊ทธ ๊ฐ์ด true ์ด๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ์ง์ ์์ค ์ค์ค๋ก ๋ฉ์ถ๋ค.
- ํด๋ง ํ๋๊ทธ๋ค์ ์์ ์ง์ ์ ์์นํ๋ค.
- ๊ฐ์ฒด ์์ฑ ๋ฑ ์๋ฐ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋ ์ฅ์์๋ ํด๋ง ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ์ง ๋ชปํ๋ ์ผ์ ์๋ฐฉํ๊ธฐ ์ํด ์ ์ ํ ์์ ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ๊ธฐ ์ํจ์ด๋ค.
- ํด๋ง์ ์ฝ๋์์ ์์ฃผ ์ผ์ด๋๋ฏ๋ก ํจ์จ์ ์ด์ฌ์ผ ํ๋ค. ํซ์คํ์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ํธ๋ฉ์ด๋ผ๋ ๋ฐฉ๋ฒ์ ์จ์ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ ํ๋๋ง์ผ๋ก ์ํํ ์ ์๊ฒ ๋จ์ํํ๋ค.
์์ ์ง์ญ
์์ ์ง์ ๋ฉ์ปค๋์ฆ์ ์คํด ์ค์ธ ํ๋ก๊ทธ๋จ์ด ์งง์ ์๊ฐ์ ์์ ์ง์ ์ ๋๋ฌํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ํ๋ก์ธ์ค๊ฐ ์ ๋๋ก ์๋ฌด๋ฅผ ๋คํ ์ ์๊ฒ๋ ๋ณด์ฅํ์ง๋ง, ์คํ ์ค์ด ์๋ ํ๋ก๊ทธ๋จ์ ์ค๋ ๋๋ค์ ๊ฐ์ ๋จธ์ ์ ์ธํฐ๋ฝํธ ์์ฒญ์ ์๋ตํ ์ ์๊ณ , ์์ ์ง์ ๊น์ง ์ํํ ํ ์ธํฐ๋ฝํธ๋์ด ์ค์ค๋ก๋ฅผ ์ผ์ ์ ์ง ์ํฌ ์ ์๋ค. ๋ํ ์ค๋ ๋๊ฐ ๋ค์ ํ์ฑํ๋์ด ํ๋ก์ธ์๋ฅผ ํ ๋น ๋ฐ์๋๊น์ง ๊ฐ์ ๋จธ์ ์ด ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค. ์คํ ์ค์ด ์๋ ํ๋ก๊ทธ๋จ์ด๋ ํ๋ก์ธ์๋ฅผ ํ ๋น๋ฐ์ง ๋ชปํ ํ๋ก๊ทธ๋จ์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ ์๊ธฐ ์ํ์ด๊ฑฐ๋ ๋ธ๋ก๋ ์ํ์ ์ฌ์ฉ์ ์ค๋ ๋์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ํด ์์ ์ง์ญ์ด๋ผ๋ ๊ฐ๋ ์ด ํ์ํ๋ค.
์์ ์ง์ญ์ ์ผ์ ์ฝ๋ ์์ญ์์๋ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋ณํ์ง ์์์ ๋ณด์ฅํ๋ค. ์์ ์ง์ญ ์์ด๋ผ๋ฉด ์ด๋์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์์ํด๋ ๋ฌด๋ฐฉํ๋ค๋ ๋ป์ด๋ค. ์ฌ์ฉ์ ์ค๋ ๋๋ ์์ ์ง์ญ์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์์ ์์ ์ง์ญ์ ์ง์ ํ์์ ํ์ํ๋ฉด, ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ด ์ค๋ ๋๋ค์ ์ ๊ฒฝ ์ฐ์ง ์๋๋ค. ์์ ์ง์ญ์์ ๋ฒ์ด๋๋ ค๋ ์ค๋ ๋๋ ๊ฐ์ ๋จธ์ ์ด ๋ฃจํธ ๋ ธ๋ ์ด๊ฑฐ๋ฅผ ์๋ฃํ๋์ง ๋๋ ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ์ผ์ ์ ์ง์์ผ์ผ ํ๋ ๋ค๋ฅธ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋จ๊ณ๋ฅผ ์๋ฃํ๋์ง ํ์ธํ๋ค.
๊ธฐ์ต ์งํฉ๊ณผ ์นด๋ ํ ์ด๋ธ
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ปฌ๋ ํฐ๋ ๊ธฐ์ต ์งํฉ์ ์ด์ฉํด ํน์ ๋นํ์ ์์ญ์์ ํ์ ์์ญ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ง ์กด์ฌํ๋์ง๋ง ํ์ธํ๋ฉด ๋๋ค. ์ธ๋ ๊ฐ ํฌ์ธํฐ๋ค ๊ฐ๊ฐ์ ๋ํด ๋ ์ด์ ์์ธํ ๋ด์ฉ์ ์ ํ์๋ ์๋ค. ๋ฐ๋ผ์ ๊ธฐ์ต ์งํฉ ์ค๊ณ์๋ ์ ๋ฐ๋๋ฅผ ๋ฎ์ถฐ์, ์ฆ ๊ธฐ๋ก ๋จ์๋ฅผ ๋ ํฌ๊ฒ ์ก์์ ๊ณต๊ฐ๊ณผ ๊ด๋ฆฌ ๋น์ฉ์ ์ ์ฝํ ์ ์์ ๊ฒ์ด๋ค.
- ์นด๋ ์ ๋ฐ๋
- ๋ ์ฝ๋ ํ๋(์นด๋)๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก ํ๋์ ๋งคํ๋๋ค. ํน์ ๋ ์ฝ๋๊ฐ ๋งํน๋์ด ์๋ค๋ฉด, ํด๋น ๋ธ๋ก์ ์ธ๋ ๊ฐ ์ฐธ์กฐ๋ฅผ ์ง๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ค๋ ๋ป์ด๋ค.
๊ธฐ์ต ์งํฉ์ ์ฌ์ค '์ถ์' ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ค. ์นด๋ ์ ๋ฐ๋๋ก ๊ธฐ์ต ์งํฉ์ ๊ตฌํํ ๊ฒ์ ์นด๋ ํ ์ด๋ธ์ด๋ผ ํ๋ค. ์นด๋ ํ ์ด๋ธ์ ๊ธฐ๋ก ์ ๋ฐ๋์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ ๊ด๊ณ ๋ฑ์ ์ ์ํ์ฌ ๊ธฐ์ต ์งํฉ์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํํ ๋ฐฉ๋ฒ ์ค ํ๋๋ค. ์นด๋ ํ์ด์ง ํ๋์ ๋ฉ๋ชจ๋ฆฌ์๋ ๋ณดํต ํ๋ ์ด์์ ๊ฐ์ฒด๊ฐ ๋ค์ด ์๋ค. ์ด ๊ฐ์ฒด๋ค ์ค ํ๋๋ผ๋ ์ธ๋ ๊ฐ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ ํ๋๊ฐ ์๋ค๋ฉด, ์นด๋ ํ ์ด๋ธ์์์ ํด๋น ์์๋ฅผ 1๋ก ํ์ํ๊ณ , ๊ทธ ์์๋ ๋๋ฝํ์ก๋ค๋ผ๊ณ ๋งํ๋ค. ์ธ๋ ๊ฐ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๊ฐ ํ๋๋ ์๋ค๋ฉด 0์ผ๋ก ํ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ฅผ ํ์ํ ๋๋ ์นด๋ ํ ์ด๋ธ์์ ๋๋ฝํ์ง ์์๋ง ํ์ธํ๋ฉด ์ด๋ค ์นด๋ ํ์ด์ง์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ด ์ธ๋ ๊ฐ ํฌ์ธํฐ๋ฅผ ํฌํจํ๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก ์ธ๋ ๊ฐ ์ฐธ์กฐ๋ฅผ ํฌํจํ ๋ธ๋ก๋ง GC ๋ฃจํธ์ ์ถ๊ฐํด ํจ๊ป ์ค์บํ๋ค. ์ด๋ ๊ฒ ๊ธฐ์ต ์งํฉ์ ์ด์ฉํด GC ๋ฃจํธ์ ์ค์บ ๋ฒ์๋ฅผ ์ค์ด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ฐ๊ธฐ ์ฅ๋ฒฝ
์นด๋ ํ ์ด๋ธ์ ์์๋ ๋ค๋ฅธ ์ธ๋์ ๊ฐ์ฒด๊ฐ ํ ๋ธ๋ก ์์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด ์นด๋ ํ ์ด๋ธ์ ํด๋น ์์๋ ๋๋ฝํ์ง๋ค. ๋๋ฝํ์ง๋ ์์ ์ ์ฐธ์กฐ ํ์ ํ๋์ ๊ฐ์ด ๋์ ๋๋ ์๊ฐ์ด๋ค.
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ์ฐ๊ธฐ ์ฅ๋ฒฝ ๊ธฐ์ ์ ์ด์ฉํด ์นด๋ ํ ์ด๋ธ์ ๊ด๋ฆฌํ๋ค.
- ์ฝ๊ธฐ ์ฅ๋ฒฝ์ ๋์ ๋น์์ฐจ ์คํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฅ๋ฒฝ ๊ธฐ์ ์ด๋ค.
- ์ฐ๊ธฐ ์ฅ๋ฒฝ์ ๊ฐ์ ๋จธ์ ์์ค์์ '์ฐธ์กฐ ํ์ ํ๋ ๋์ '์ ๋ผ์ด๋๋ AOP ์ ์คํฉํธ(aspect)์ ๋น์ ํ ์ ์๋ค. ์ฐธ์กฐํ์ ์ ๊ฐ์ฒด๊ฐ ๋์ ๋๋ฉด ์ด๋ผ์ด๋ ์ด๋๋ฐ์ด์ค๊ฐ ์์ฑ๋์ด, ๋์ ์ ํ๋ก ์ถ๊ฐ ๋์์ ์ํํ ์ ์๊ฒ ํ๋ค. ์ด๋ฐ ๊ธฐ๋ฅ ๋ชจ๋๋ฅผ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ผ๋ก ๊ตฌํํ ์ ์๋ค. ๋์ ์ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ ์ฌ์ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ด๋ผ ํ๋ฉฐ, ๋์ ํ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ ์ฌํ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ด๋ผ ํ๋ค. ํซ์คํ ๊ฐ์ ๋จธ์ ์ ์ปฌ๋ ํฐ ๋ค์๊ฐ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ ์ด์ฉํ๋ค.
- ์ฐ๊ธฐ ์ฅ๋ฒฝ์ ์ ์ฉํ๋ฉด ๊ฐ์ ๋จธ์ ์ ์ถ๊ฐ๋ก ์คํํ ๋ช ๋ น์ด๋ฅผ ์์ฑํด ๋์ ์ฐ์ฐ ๋ชจ๋์ ์ถ๊ฐํ๋ค. ์ปฌ๋ ํฐ๊ฐ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ผ๋ก ์นด๋ ํ ์ด๋ธ ๊ฐฑ์ ์ฐ์ฐ์ ์ถ๊ฐํ๋ค๋ฉด ์ฐธ์กฐ๊ฐ ๊ฐฑ์ ๋ ๋๋ง๋ค ์ค๋ฒํค๋๊ฐ ๋ํด์ง๋ค.
- ์นด๋ ํ
์ด๋ธ์ ๋ฉํฐ์ค๋ ๋ ์๋๋ฆฌ์ค์์ ๊ฑฐ์ง ๊ณต์ (false sharing) ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
- ๊ฑฐ์ง ๊ณต์ (false sharing)
- ๊ฑฐ์ง ๊ณต์ ๋ ๋ฎ์ ์์ค์์ ๋์์ฑ์ ๋ค๋ฃฐ ๋ ๊ณ ๋ คํด์ผ ํ๋ ๋ฌธ์ ๋ค. CPU์ ์บ์ ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ ์บ์ ๋ผ์ธ ๋จ์๋ก ๊ด๋ฆฌํ๋ค. ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์๋ก ๋ค๋ฅธ ๋ณ์๋ฅผ ์์ ํ๋ ์ํฉ์์ ๊ทธ ๋ณ์๋ค์ด ๊ฐ์ ์บ์ ๋ผ์ธ์ ์ ์ฅ๋์ด ์๋ค๋ฉด ๋ผ์ดํธ๋ฐฑ(write back), ๋ฌดํจํ, ๋๊ธฐํ ๋ฑ์ ์์ ์ ์๋ก ์ํฅ์ ์ฃผ์ด ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค. ์ค์ ๋ก ๊ณต์ ํ๊ณ ์์ง ์์์๋ ๋ง์น ๊ณต์ ํ๋ ๊ฒ์ฒ๋ผ ์๋ก ์ํฅ์ ์ค๋ค๊ณ ํ์ฌ ์ด๋ฅผ ๊ฑฐ์ง ๊ณต์ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
- ๊ฑฐ์ง ๊ณต์ (false sharing)
- JDK 7๋ถํฐ ํซ์คํ ๊ฐ์ ๋จธ์ ์ -XX:+UserCondCrdMark ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ฌ ์นด๋ ํ ์ด๋ธ ๊ฐฑ์ ์ ์กฐ๊ฑด์ ํ๋จํ ์ ์๊ฒ ํ๋ค. ์ด ๋งค๊ฐ ๋ณ์๋ฅผ ์ค์ ํ๋ฉด ์กฐ๊ฑด์ ํ๋จํ๋ ์ค๋ฒํค๋๊ฐ ๋ํด์ง์ง๋ง, ๊ฑฐ์ง ๊ณต์ ๋ฌธ์ ๋ ํผํ ์ ์๋ค.
๋์ ์ ๊ทผ ๊ฐ๋ฅ์ฑ ๋ถ์
ํ์ฌ ์ฃผ๋ฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์จ์ ๊ฐ์ฒด์ ์์ฌ๋ฅผ ํ๋จํ๋ค. ์ด๋ก ์ ์ผ๋ก ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋๋ ์ค๋ ์ ์ํ์์, ์ฆ ์ฌ์ฉ์ ์ค๋ ๋๋ ๋ถ์ ๊ณผ์ ์ค ๋ฉ์ถฐ์๋ ์ํ์์ ์ ์ฒด ๊ณผ์ ์ ์งํํด์ผ ํ๋ค.
๋ฃจํธ ๋ ธ๋ ์ด๊ฑฐ๊ฐ ๋๋๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ GC ๋ฃจํธ๋ก๋ถํฐ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ํ์ํ ์ ์๋ค. ์ด ๋จ๊ณ์ ์ผ์ ์ ์ง ์๊ฐ์ ์๋ฐ ํ ํฌ๊ธฐ์ ๋น๋กํ๋ค. ํ์ด ํด์๋ก ๋ ๋ง์ ๊ฐ์ฒด๋ฅผ ๋ด๊ฒ ๋๊ณ ๊ฐ์ฒด ๊ทธ๋ํ ๊ตฌ์กฐ๋ ๋ณต์กํด์ง๋ค.
์ฐธ์กฐ ๊ด๊ณ๋ฅผ ์ถ์ ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ๋ค์๋ ๊ณตํต์ ์ผ๋ก 'ํ์'๋จ๊ณ๊ฐ ๋ฑ์ฅํ๋ค. ํ์ ๋จ๊ณ์ ์ผ์ ์ ์ง ์๊ฐ์ด ํ ํฌ๊ธฐ์ ๋น๋กํด ์ฆ๊ฐํ๋ค๋ฉด ๊ฑฐ์ ๋ชจ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ ์ํฅ์ ์ค๋ค. ์ฆ, ์ด ๋จ๊ณ์ ์ผ์ ์ ์ง ์๊ฐ์ ์ค์ด๋ฉด ์์ํฅ์ ์ค๋ค.
์ผ์ ํ์(tri-color marking)
๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ฌํํ๋ ๊ณผ์ ์์ ๋ง์ฃผ์น๋ ๊ฐ์ฒด๋ค์ '๋ฐฉ๋ฌธํ ๊ฐ์ฒด'์ธ๊ฐ ๋ผ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์๋ ์ธ ๊ฐ์ง ์ ์ค ํ๋๋ฅผ ์น ํ๋ ๊ธฐ๋ฒ์ด๋ค.
- ํฐ์: ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ. ๋๋ฌ ๊ฐ๋ฅ์ฑ ๋ถ์์ ์์ํ๋ฉด ๋ชจ๋ ๊ฐ์ฒด๋ ํฐ์์ด๋ค. ๋ถ์์ ๋ง์น ๋ค์๋ ํฐ์์ธ ๊ฐ์ฒด๋ ๋๋ฌ ๋ถ๊ฐ๋ฅํจ์ ๋ปํ๋ค.
- ๊ฒ์์: ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉฐ, ์ด ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ค์บํ๋ค. ์ค์บ๋์๊ณ , ์์กดํ๋ฉด ๊ฒ์ ๊ฐ์ฒด๊ฐ ๋๋ค. ๋ค๋ฅธ ๊ฐ์ฒด์์ ๊ฒ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ ์๋ค๋ฉด ๋ค์ ์ค์บํ์ง ์์๋ ๋๋ค. ๊ฒ์ ๊ฐ์ฒด๊ฐ ํฐ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๊ฐ๋ฆฌํค๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ ๊ฐ์ฒด๋ฅผ ๊ฑฐ์ณ ๊ฐ๋ฆฌํฌ ์ ์๋ค.
- ํ์: ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฐฉ๋ฌธํ ์ ์์ผ๋, ์ด ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ์ค ์ค์บ์ ์๋ฃํ์ง ์์ ์ฐธ์กฐ๊ฐ ์กด์ฌํ๋ค.
์ผ์ ํ์ ๊ธฐ๋ฒ์ ์ฅ์
- ์ธํฌ๋ฆฌ๋ฉํธ(Incremental) GC ๊ฐ๋ฅ
- ์ ์ฒด ํ๋ก๊ทธ๋จ์ ๋ฉ์ถ์ง ์๊ณ (Stop-the-world ์ต์ํ) ์ ์ง์ ์ผ๋ก ์ํํ ์ ์๋ค.
- ๋ณ๋ ฌ(Concurrent) GC ๊ฐ๋ฅ
- ์ฌ๋ฌ ์ค๋ ๋์์ ๋ณ๋ ฌ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๊ฐ๋ฅํด์ ์ฑ๋ฅ์ด ์ข์์ง๋ค.
- ์์ ์ฑ(Safety) ํ๋ณด
- ํ์(Black) ๊ฐ์ฒด๊ฐ ํฐ์(White) ๊ฐ์ฒด๋ฅผ ์ง์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ์์ → ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค ๋ฉ๋ชจ๋ฆฌ ์ ํฉ์ฑ์ ์ ์งํ ์ ์๋ค.
๋ง์ฝ ์ฌ์ฉ์ ์ค๋ ๋์ ์ปฌ๋ ํฐ๊ฐ ๋์์ ์คํ๋๋ฉด, ๋ฐ์ํ๋ ๋ฌธ์ ์
- ์ฃฝ์ ๊ฐ์ฒด๋ฅผ ์ด์๋ค๊ณ , ์๋ชป ํ์ํ ์ ์๋ค.
- ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฃฝ์๋ค๊ณ ํ์ํ ์ ์๋ค. ์น๋ช ์ ์ด๋ฉฐ, ํ๋ก๊ทธ๋จ ์ค๋ฅ๋ก ์ด์ด์ง๋ค.
์๋ ๋ ์กฐ๊ฑด์ด ๋์์ ๋ง์กฑ๋ ๋๋ง ๊ฐ์ฒด ์ฌ๋ผ์ง ๋ฌธ์ ๊ฐ ๋ํ๋๋ค.
- ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ํฐ์ ๊ฐ์ฒด๋ก์ ์๋ก์ด ์ฐธ์กฐ๋ฅผ ๊ฒ์์ ๊ฐ์ฒด์ ์ถ๊ฐ
- ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ํ์ ๊ฐ์ฒด์์ ํฐ์ ๊ฐ์ฒด๋ก์ ์ง๊ฐ์ ์ ์ธ ์ฐธ์กฐ๋ฅผ ์ญ์
๋์ ์ค์บ ๋์ค ๊ฐ์ฒด ์ฌ๋ผ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ ์กฐ๊ฑด ์ค ํ๋๋ง ๋ง์กฑํ๋ฉด ๋๋ค.
ํด๋ฒ์ ์ฆ๋ถ ์ ๋ฐ์ดํธ์ ์์ ๋จ๊ณ ์ค๋ ์(snapshot at the beginning)์ด ์๋ค.
- ์ฆ๋ถ ์
๋ฐ์ดํธ (Incremental Update)
- ๊ฒ์์ ๊ฐ์ฒด์ ํฐ์ ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๊ฐ ์ถ๊ฐ๋๋ฉด ์๋ก ์ถ๊ฐ๋ ์ฐธ์กฐ๋ฅผ ๋ฐ๋ก ๊ธฐ๋กํด ๋์ด, ๋์ ์ค์บ์ด ๋๋ ํ ๊ธฐ๋กํด ๋ ๊ฒ์์ ๊ฐ์ฒด๋ค์ ๋ฃจํธ๋ก ํ์ฌ ๋ค์ ์ค์บํ๋ค.
- GC๊ฐ ๋ฃจํธ ๊ฐ์ฒด(root set)๋ถํฐ ์ ์ง์ ์ผ๋ก ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ํ์ํ๋ฉด์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์.
- ํ์ ์ค์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์, ๊ทธ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ๋ฐ์ํด์ผ ํจ.
- ์ด๋ฅผ ์ํด Write Barrier(์ฐ๊ธฐ ๋ฐฉ๋ฒฝ) ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ฐธ์กฐ๋ฅผ ์ฆ์ ํ์(Gray)์ผ๋ก ๋ณ๊ฒฝํจ.
- ์ฅ์ :
- Stop-the-world ์๊ฐ์ ์ค์ผ ์ ์์ (์ ํ๋ฆฌ์ผ์ด์ ๊ณผ GC๊ฐ ๋ณ๋ ฌ๋ก ์คํ ๊ฐ๋ฅ).
- ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ณ์ ๋ฐ์ํ๋ฏ๋ก ๋ ์ ์ ๊ฐ๋น์ง๊ฐ ๋ ๋ค๋(Floating Garbage ๊ฐ์).
- ์์ ๋จ๊ณ ์ค๋
์ (Snapshot at the Beginning, SATB)
- ํ์ ๊ฐ์ฒด๊ฐ ํฐ์ ๊ฐ์ฒดํธ์ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ๋์ผ๋ ค ํ๋ฉด ๊ทธ ์ฌ์ค์ ๊ธฐ๋กํ๋ฉฐ, ๋์ ์ค์บ์ด ๋๋ ํ ๊ธฐ๋กํด ๋ ํ์ ๊ฐ์ฒด๋ค์ ๋ฃจํธ๋ก ํ์ฌ ๋ค์ ์ค์บํ๋ค.
- GC๊ฐ ๋งํน์ ์์ํ๋ ์๊ฐ์ ๊ฐ์ฒด ๊ทธ๋ํ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐฉ์.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋งํน ์ค์ ์ฐธ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋, ๋งํน ์์ ์์ ์ ์ฐธ์กฐ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๋น์ง๋ฅผ ํ๋ณํจ.
- ์๋ก์ด ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋๋ผ๋ ๊ธฐ์กด์ ํฐ์(White)์ผ๋ก ํ์๋ ๊ฐ์ฒด๋ ์ ์ง, ๋์ค์ ๋ค์ ํ์ํ์ง ์์.
- ์ฅ์ :
- ๋งํน ์์ ์์ ์ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์์ธก ๊ฐ๋ฅํ ๋์์ ๋ณด์ฅํจ.
- ์ ํฉ์ฑ์ ์ ์งํ๋ฉด์ ์ธํฌ๋ฆฌ๋ฉํธ GC ์ํ ๊ฐ๋ฅ.
์ฆ๋ถ ์ ๋ฐ์ดํธ (Incremental Update) ์์ ๋จ๊ณ ์ค๋ ์ (SATB) ๋น๊ต
๋ฐฉ์ | ์ค์๊ฐ์ผ๋ก ์ฐธ์กฐ ๋ณ๊ฒฝ ๋ฐ์ | ๋งํน ์์ ์์ ๊ธฐ์ค ์ ์ง |
Write Barrier ์ญํ | ์๋ก์ด ์ฐธ์กฐ๋ฅผ ํ์์ผ๋ก ๋ณ๊ฒฝ | ๊ธฐ์กด ์ฐธ์กฐ๋ฅผ ์ ์ง |
Floating Garbage | ์ ๊ฒ ๋ฐ์ | ์๋์ ์ผ๋ก ๋ง์ด ๋ฐ์ |
Stop-the-world ์๊ฐ | ์งง์ | ์๋์ ์ผ๋ก ๊ธธ์ด์ง ์ ์์ |
๊ฐ์ ๋จธ์ ์ ์ฐ๊ธฐ ์ฅ๋ฒฝ์ ์ด์ฉํด ๊ธฐ๋ก ์์ ์ ๊ตฌํํ๋ค. ํซ์คํ ๊ฐ์ ๋จธ์ ์ ์ฆ๋ถ ์ ๋ฐ์ดํธ์ ์์ ๋จ๊ณ ์ค๋ ์์ ๋ชจ๋ ํ์ฉํ๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ ํ๋ณดํ๋ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ ๊ฐ์ ๋จธ์ ์ด ์ฌ์ฉํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ ๋จธ์ ์ ๋ค์์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ ๊ณตํ๋ค.
์ฐธ๊ณ
https://product.kyobobook.co.kr/detail/S000213057051
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์ ์ฐ์ฆ๋ฐ - ๊ต๋ณด๋ฌธ๊ณ
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๊น์ํ ๋ด๋ถ๋ฅผ ํฅํด ๋ ๋๋ ํฅ๋ฏธ์ง์งํ ๋ชจํC·C++๋ฅผ ์ฌ์ฉํด ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์์ ๊น๋ค๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ๋ซํผ ์ด์์ฑ ๋ฌธ์ ๋ ๊ฐ๋ฐ์๋ค์
product.kyobobook.co.kr
https://lima1016.tistory.com/125
[JVM ๋ฐ๋ฐ๋ฅ] 3์ฅ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ต -1
์กฐ์์จ ์ค๋์ 3์ฅ์ 3-1 ๋ถํฐ 3-3๊น์ง๋ง ์ ๋ฆฌํด๋ณด์! ๋์์ด ์ฃฝ์๋๊ฐ?์๋ฐ ์ธ๊ณ์์๋ ๊ฑฐ์ ๋ชจ๋ ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ํ์ ์ ์ฅ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ์ ์ฒญ์ํ๋ ค๋ฉด ๊ฐ์ฅ ๋จผ์ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ด
lima1016.tistory.com