์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- nGrinder
- redis ์กฐํ
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- AWS Certified Solutions Architect - Associate
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- Entity
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- Codedeploy ์ค๋ฅ
- private subnet ec2 ๋ก์ปฌ ์ ์
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- docker
- prod docker-compose
- docker-compose kafka
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- s3 log ์ ์ฅ
- ์คํํ๋ ๋ฏธ์ค
- ๋ค์ค ์ปจํ ์ด๋
- aws ์ฟ ํฐ
- Kafka
- docker compose
- ์๋ฐ
- docker ps -a
- JPA
- redis ํ ์คํธ์ฝ๋
- aws saa ํฉ๊ฒฉ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- ํ์ดํผ๋ฐ์ด์
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 2. ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก ๋ณธ๋ฌธ
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 2. ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก
๐คRyusun๐ค 2025. 2. 6. 09:32c, c++์ ๊ฐ์ฒด๋ ๊ฐ๊ฐ์ '์์ ๊ถ' ๋ฟ๋ง ์๋๋ผ ๊ฐ์ฒด์ ์ผ์์ ํ์๋ถํฐ ์ฃฝ์๊น์ง ๊ด๋ฆฌํ ์ฑ ์์ด ์๋ค. ์๋ฐ ๊ฐ๋ฐ์๋ ๊ฐ์ ๋จธ์ ์ด ์ ๊ณตํ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ง์ง์ด ์ฝ๋ฉํ์ง ์์๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์ค๋ฒํ๋ก ๋ฌธ์ ๋ฅผ ๊ฑฐ์ ๊ฒช์ง ์๋๋ค. ํ์ง๋ง ํต์ ๊ถ์ ์์ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ํ๋ฒ ํฐ์ง๋ง ๊ฐ์ ๋จธ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ ์ดํดํ์ง ๋ชปํ๋ ํ ํด๊ฒฐํ๊ธฐ๊ฐ ์๋น์ด ์ด๋ ต๋ค.
์๋ฐ ๋จธ์ ์ด ๊ด๋ฆฌํ๋ ๋ค์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ
์๋ฐ ๊ฐ์ ๋จธ์ ์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ช ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์ผ๋ก ๋๋ ๊ด๋ฆฌํ๋ค. ์ด ์์ญ๋ค์ ๊ฐ๊ฐ ๋ชฉ์ ๊ณผ ์์ฑ/์ญ์ ์์ ์ด ์๋ค. ์ด๋ค ์์ญ์ ๊ฐ์ ๋จธ์ ํ๋ก์ธ์ค์ ์์๊ณผ ๋์์ ๋ง๋ค์ด์ง๋ฉฐ ์ด๋ค ์์ญ์ ์ฌ์ฉ์ ์ค๋ ๋์ ์์/์ข ๋ฃ์ ๋ง์ถฐ ์์ฑ/์ญ์ ๋๋ค.
ํ๋ก๊ทธ๋จ ์นด์ดํฐ
- ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋์ ๋ฐ์ดํธ์ฝ๋ ์ค ๋ฒํธ ํ์๊ธฐ
- ๋ฐ์ดํธ์ฝ๋ ์ธํฐํ๋ฆฌํฐ๋ ์ด ์นด์ดํฐ์ ๊ฐ์ ๋ฐ๊ฟ ๋ค์์ ์คํํ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ์ ํํ๋ ์์ผ๋ก ๋์ํ๋ค.
- ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ, ๋ถ๊ธฐ, ์ํ, ์ ํ ๋ฑ์ ํํํ๋๊ฒ
- ์์ธ ์ฒ๋ฆฌ๋ ์ค๋ ๋ ๋ณต์ ๊ฐ์ ๋ชจ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ๋ฐ๋ก ์ด ํ์๊ธฐ๋ฅผ ํ์ฉํด ์ด๋ฃจ์ด์ง๋ค.
- ์ค๋ ๋ ํ๋ผ์ด๋น ๋ฉ๋ชจ๋ฆฌ
- ์๋ฐ ๊ฐ์ ๋จธ์ ์์์ ๋ฉํฐ์ค๋ ๋ฉ์ CPU ์ฝ์ด๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ต๋๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ํน์ ์๊ฐ์ ๊ฐ ์ฝ์ด๋ ํ ์ค๋ ๋์ ๋ช ๋ น์ด๋ง ์คํํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ค๋ ๋ ์ ํ ํ ์ด์ ์ ์คํํ๋ค ๋ฉ์ถ ์ง์ ์ ์ ํํ๊ฒ ๋ณต์ํ๋ ค๋ฉด ์ค๋ ๋ ๊ฐ๊ฐ์๋ ๊ณ ์ ํ ํ๋ก๊ทธ๋จ ์นด์ดํฐ๊ฐ ํ์ํ๊ณ ์ด ๊ฐ ์ค๋ ๋์ ์นด์ดํฐ๋ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋ ๋ ๋ฆฝ๋ ์์ญ์ ์ ์ฅ๋๋ค. ์ด ์์ญ์ ์ค๋ ๋ ํ๋ผ์ด๋น ๋ฉ๋ชจ๋ฆฌ๋ผ ํ๋ค.
- ์ค๋ ๋๊ฐ ์๋ฐ ๋ฉ์๋๋ฅผ ์คํํ๋ฉด ์คํ ์ค์ธ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ ์ฃผ์๊ฐ ํ๋ก๊ทธ๋จ ์นด์ดํฐ์ ๊ธฐ๋ก๋์ง๋ง ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์คํํ๋ฉด ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ Undefined์ด๋ค.
์๋ฐ ๊ฐ์ ๋จธ์ ์คํ
ํ๋ก๊ทธ๋จ ์นด์ดํฐ์ฒ๋ผ ์๋ฐ ๊ฐ์ ๋จธ์ ์คํ๋ '์ค๋ ๋ ํ๋ผ์ด๋น' ํ๋ฉฐ, ์ฐ๊ฒฐ๋ ์ค๋ ๊ฐ ์์ฑ/์ญ์ ๊ฐ ๋๋ฉด ๊ฐ์ด ์์ฑ/์ญ์ ๊ฐ ๋๋ค.
๊ฐ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์คํ ํ๋ ์์ ๋ง๋ค์ด ์ง์ญ ๋ณ์ ํ ์ด๋ธ, ํผ์ฐ์ฐ์ ์คํ, ๋์ ๋งํฌ, ๋ฉ์๋ ๋ฐํ๊ฐ ๋ฑ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ฐ ๋ค์ ์คํ ํ๋ ์์ ๊ฐ์ ๋จธ์ ์คํ์ ํธ์(push) ํ๊ณ , ๋ฉ์๋๊ฐ ๋๋๋ฉด ํ(pop) ํ๋ ์ผ์ ๋ฐ๋ณตํ๋ค.
์คํ
์คํ์ ๋ณดํต ์๋ฐ ๊ฐ์ ๋จธ์ ์คํ์ ๊ฐ๋ฆฌํค๋๋ฐ, ๊ทธ ์ค ํนํ ์ง์ญ ๋ณ์ ํ ์ด๋ธ์ ๊ฐ๋ฆฌํฌ ๋๊ฐ ๋ง๋ค.
์ง์ญ ๋ณ์ ํ ์ด๋ธ์๋ ์๋ฐ ๊ฐ์ ๋จธ์ ์ด ์ปดํ์ผํ์์ ์์ ์๋ ๋ค์ํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ (boolean, byte, char, short, int, float, long, double), ๊ฐ์ฒด ์ฐธ์กฐ, ๋ฐํ ์ฃผ์ ํ์ ์ ์ ์ฅํ๋ค. ์ง์ญ ๋ณ์ ํ ์ด๋ธ์์ ์ด ๋ฐ์ดํฐ ํ์ ๋ค์ ์ ์ฅํ๋ ๊ณต๊ฐ์ ์ง์ญ ๋ณ์ ์ฌ๋กฏ์ด๋ผ ํ๋ค. ์ง์ญ ๋ณ์ ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์ปดํ์ผ ๊ณผ์ ์์ ํ ๋นํ๋ค. ์๋ฐ ๋ฉ์๋๋ ์คํ ํ๋ ์์์ ์ง์ญ ๋ณ์์ฉ์ผ๋ก ํ ๋น๋ฐ์์ผ ํ ๊ณต๊ฐ์ ํฌํค๊ฐ ์ด๋ฏธ ์๋ฒฝํ๊ฒ ๊ฒฐ์ ๋์ด ์๋ค. 'ํฌ๊ธฐ'๋ ๋ณ์ ์ฌ๋กฏ ๊ฐ์์ด๋ค. ๊ฐ์ ๋จธ์ ์ด ๋ณ์ ์ฌ๋กฏ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ค์ ํฌ๊ธฐ๋ ๊ฐ์ ๋จธ์ ์ ์ด๋ป๊ฒ ๊ตฌํํ๋๋์ ๋ฌ๋ผ์ง๋ค. ๋ง์ฝ ์ค๋ ๋๊ฐ ์์ฒญํ ์คํ ๊น์ด๊ฐ ๊ฐ์ ๋จธ์ ์ด ํ์ฉํ๋ ๊น์ด๋ณด๋ค ํฌ๋ค๋ฉด StackOverFlowError ๋ฅผ ๋์ง๋ค. ๋ํ ์คํ ์ฉ๋์ ๋์ ์ผ๋ก ํ์ฅํ ์ ์๋ ์๋ฐ ๊ฐ์ ๋จธ์ ์์๋ ์คํ์ ํ์ฅํ๋ ค๋ ์์ ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์๋ค๋ฉด OutofMemoryError๋ฅผ ๋์ง๋ค.
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ๊ฐ์ ๋จธ์ ์คํ๊ณผ ๋งค์ฐ ๋น์ทํ ์ญํ ์ ํ๋ฉฐ, ์ฐจ์ด์ ์ ๊ฐ์ ๋จธ์ ์คํ์ ์๋ฐ ๋ฉ์๋(๋ฐ์ดํธ ์ฝ๋)๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๊ณ , ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ค.
๋ค์ดํฐ๋ธ ๋ฉ์๋
Java ์ธ์ด๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด(์ฃผ๋ก C, C++)๋ก ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ์๋๋ค.๋ค์ดํฐ๋ธ ๋ฉ์๋๋ Java ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ๋ ํ๋์จ์ด์ ์ง์ ์ํตํ๊ฑฐ๋ ์ธ๋ถ์ ๋ค์ดํฐ๋ธ ์ฝ๋(C/C++)๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. Java๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ์ธ์ด์ด์ง๋ง, ํน์ ํ๋ซํผ์ด๋ ํ๋์จ์ด์ ์์กด์ ์ธ ๊ธฐ๋ฅ์ด ํ์ํ ๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํตํด ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋ค.
์๋ฐ ํ
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ํฐ ๋ฉ๋ชจ๋ฆฌ
- ์๋ฐ ํ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ฉฐ ๊ฐ์ ๋จธ์ ์ด ๊ตฌ๋๋ ๋ ๋ง๋ค์ด์ง๋ค.
- ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ผํ ๋ชฉ์ ์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋๊ฒ์ด๋ค.
- ์๋ฐ ํ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ๋ง๋ก๋ GC ํ์ด๋ผ๊ณ ๋ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ด์ ์์๋ ์๋ฐ ํ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ค. ๊ฐ์ฒด ํ ๋น ํจ์จ์ ๋์ด๊ธฐ ์ํด ์ค๋ ๋ ๋ก์ปฌ ํ ๋น ๋ฒํผ ์ฌ๋ฌ๊ฐ๋ก ๋๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๊ฐ ์๋ฐ ํ์ ์ ์ฅ๋๋ ์ฌ์ค์ ๋ณํ์ง ์๋๋ค. ์ด๋ค ์ธ๋ถ ์์ญ์ด๋ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ง ์ ์ฅํ ์ ์๋ค. ์๋ฐ ํ์ ๋ค์ ์๊ฒ ๊ตฌ๋ถํ๋ ๋ชฉ์ ์ ์ค์ง ๋ฉ๋ชจ๋ฆฌ ํ์์ ํ ๋น์ ๋ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํจ์ด๋ค. <์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ> ์ ๋ฐ๋ฅด๋ฉด ์๋ฐ ํ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ์๋์ด์ผ ํ๋ค. ์๋ฐ ํ์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํ ์๋ ์๊ณ , ํ์ฅํ ์๋ ์๋ค. ์๋ก์ด ์ธ์คํด์ค์ ํ ๋นํด ์ค ํ ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ณ ํ์ ํ์ฅํ ์ ์๋ค๋ฉด OutOfMemoryError๋ฅผ ๋์ง๋ค.
๋ฉ์๋ ์์ญ
๋ฉ์๋ ์์ญ์ ์ฃผ ์ญํ ์ ํ์ ๊ด๋ จ ์ ๋ณด(ํด๋์ค ์ด๋ฆ, ์ ๊ทผ ์ ํ์, ์์ ํ, ํ๋ ์ค๋ช , ๋ฉ์๋ ์ค๋ช ) ์ ์ฅ์ด๋ค.
๋ฉ์๋ ์์ญ๋ ์๋ฐ ํ์ฒ๋ผ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ค. ๋ฉ์๋ ์์ญ์ ๊ฐ์ ๋จธ์ ์ด ์ฝ์ด ๋ค์ธ ํ์ ์ ๋ณด, ์์, ์ ์ ๋ณ์, JIT ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ ์ฝ๋ ์บ์๋ฑ์ ์ ์ฅํ๋๋ฐ ์ด์ฉํ๋ค. <์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ> ์์๋ ๋ฉ์๋ ์์ญ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก๋ ํ์ ํ ๋ถ๋ถ์ผ๋ก ๊ธฐ์ ํ์ง๋ง, ์๋ฐ ํ๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด '๋ ผํ(non-heap)'์ด๋ผ ํ๋ค.
<์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ>๋ ๋ฉ์๋ ์์ญ์ ์ ์ฝ์ ๊ฑฐ์ ๋์ง ์์๋ค. ์๋ฐ ํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ์๋ ํ์๊ฐ ์์ผ๋ฉฐ, ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํ ์๋ ์๊ณ , ํ์ฅ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์๋ ์๋ค. ๋ฉ์๋ ์์ญ์์ ํ์ํ ๋์์ ๊ฑฐ์ ๋๋ถ๋ถ ์์ ํ๊ณผ ํ์ ์ด๋ผ์ ํ์ ํจ๊ณผ๊ฐ ์๋์ ์ผ๋ก ๋งค์ฐ ์๋ค. <์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ>์ ๋ฐ๋ฅด๋ฉด ๋ฉ์๋ ์์ญ์ด ๊ฝ ์ฐจ์ ํ์ํ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ค๋ฉด OutOfMemoryError๋ฅผ ๋์ง๋ค.
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฐ์ ๋จธ์ ์ธ ํซ์คํ๊ณผ ๋ํ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ ์๋ฐ ํ์ ๋ํด ์์๋ณด์.
์๋ ๋ด์ฉ์ ํซ์คํ์ด ๊ด๋ฆฌํ๋ ์๋ฐ ํ์์ ๊ฐ์ฒด๊ฐ ์์ฑ(ํ ๋น)๋๋ ๊ณผ์ , ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๋ฐฉ์๊น์ง ์ ์ฒด ํ๋ฆ์ ๋ํ ์ค๋ช
์
๋๋ค.
๊ฐ์ฒด ์์ฑ
์๋ฐ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค. ์ธ์ด ์์ค์์๋ ๊ฐ์ฒด ์์ฑ์ ๋ณดํต new ํค์๋๋ฅผ ์ฐ๋ฉด ๋์ง๋ง, ์๋ฐ ๊ฐ์๋จธ์ ์ด new ๋ช ๋ น์ ํด๋นํ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ง๋๋ฉด, ์ด ๋ช ๋ น์ ๋งค๊ฐ ๋ณ์๊ฐ ์์ ํ์์ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฌ๋ฒ ์ฐธ์กฐ์ธ์ง ํ์ธํ๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ฌ๋ฒ ์ฐธ์กฐ๊ฐ ๋ปํ๋ ํด๋์ค๊ฐ ๋ก๋ฉ, ํด์(resolve), ์ด๊ธฐํ(initialize) ๋์๋์ง ํ์ธํ๋ค. ์ค๋น๋์ง ์์ ํด๋์ค๋ผ๋ฉด ๋ก๋ฉ๋ถํฐ ํด์ผํ๋ค. ๋ก๋ฉ์ด ์๋ฃ๋ ํด๋์ค๋ผ๋ฉด ์ ๊ฐ์ฒด๋ฅผ ๋ด์ ๋ฉ๋ชจ๋ฏธ๋ฅผ ํ ๋นํ๋ค. ๊ฐ์ฒด์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ ํด๋์ค๋ฅผ ๋ก๋ฉํ๊ณ ๋๋ฉด ์๋ฒฝํ๊ฒ ์์ ์๋ค. ๊ฐ์ฒด์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ ๋น์ ์๋ฐ ํ์์ ํน์ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์๋ผ ์ฃผ๋ ์ผ์ด๋ค. ์๋ฐ ํ์ด ๊ท์น์ ์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด, ์ฌ์ฉ์ค์ธ ๋ฉ๋ชจ๋ฆฌ๋ ๋ชจ๋ ํ์ชฝ์, ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ๋ํธ์ ์๋ฆฌํ๋ฉฐ, ํฌ์ธํฐ๊ฐ ๋ ์์ญ์ ๊ฒฝ๊ณ์ธ ๊ฐ์ด๋ฐ ์ง์ ์ ๊ฐ๋ฆฌํค๊ฒ ๋ ๊ฒ์ด๋ค. ์ด ์ํ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ฉด ํฌ์ธํฐ๋ฅผ ์ฌ์ ๊ณต๊ฐ ์ชฝ์ผ๋ก, ์ ํํ ๊ฐ์ฒด ํฌ๊ธฐ๋งํผ ์ด๋์ํค๊ฒ ๋๋ค. ์ด๋ฌํ ํ ๋น ๋ฐฉ์์ ํฌ์ธํฐ ๋ฐ์น๊ธฐ ๋ผ๊ณ ํ๋ค.
ํ์ง๋ง ์๋ฐ ํ์ ๊ท์น์ ์ด์ง ์์, ์ฌ์ฉ์ค์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค์์ฌ ์์ด์ ํฌ์ธํฐ๋ฅผ ๋ฐ์ณ ๋ด๊ธฐ๊ฐ ๊ฐ๋จํ์ง ์๋ค. ๊ทธ ๋์ ๊ฐ์ ๋จธ์ ์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๋ค์ ๋ชฉ๋ก์ผ๋ก ๋ฐ๋ก ๊ด๋ฆฌํ๋ฉฐ, ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋ด๊ธฐ์ ์ถฉ๋ถํ ๊ณต๊ฐ์ ์ฐพ์ ํ ๋นํ ํ ๋ชฉ๋ก์ ๊ฐฑ์ ํ๋ค. ์ด ํ ๋น ๋ฐฉ์์ ์ฌ์ ๋ชฉ๋ก(free list)๋ผ๊ณ ํ๋ค.
์ด๋ค ๋ฐฉ์์ ์ธ๊ฑด์ง๋ ์๋ฐ ํ์ด ๊ท์น์ ์ด๋ ์๋๋์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ฉฐ, ์๋ฐ ํ์ด ๊ท์น์ ์ด๋๋ ์ฌ์ฉํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ปดํฉํธ๋ฅผ ํ ์ ์๋๋์ ๋ฐ๋ผ ๋ฌ๋ ธ๋ค. ๋ฐ๋ผ์ ์๋ฆฌ์ผ๊ณผ ํ๋ด์ฒ๋ผ ๋ชจ์ผ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ ์์คํ ์ด๋ผ๋ฉด ๋จ์ํ๊ณ ํจ์จ์ ์ธ ํฌ์ธํฐ ๋ฐ์น๊ธฐ ๋ฐฉ์์ ํ ๋น ์๊ณ ๋ฆฌ์ฆ์ ์ฑํํ๊ณ , ์ด๋ก ์์ CMS์ฒ๋ผ ์ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ์ปฌ๋ ํฐ๋ฅผ ์ฐ๋ ์์คํ ์ ๋ ๋ณต์กํ ์ฌ์ ๋ชฉ๋ก ๋ฐฉ์์ ์ฑํํ ๊ฒ์ด๋ค.
๊ฐ์ฉ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๋๋์ง ์ธ์๋ ๊ฐ์ ๋จธ์ ์์ ๊ฐ์ฒด ์์ฑ์ ๋น๋ฒํ ์ผ์ด๋๊ณ , ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์๋ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ ํฌ์ธํฐ ์์น๋ฅผ ์์ ํ๋ ๋จ์ํ ์ผ๋ ์ค๋ ๋ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์๋ฅผ ๋ค์ด ํ ์ค๋ ๋๊ฐ ์์ฒญํ ๊ฐ์ฒดA๋ฅผ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ณผ์ ์์, ํฌ์ธํฐ์ ๊ฐ์ ์์ง ์์ ํ๊ธฐ ์ ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๊ฐ์ฒด B์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ ์ ์๋ค.
ํด๋ฒ
1. ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ค์ ๋ก ๋น๊ต ๋ฐ ๊ตํ(CAS) ๊ณผ ์คํจ์ ์ฌ์๋ ๋ฐฉ์์ ๊ฐ์ ๋จธ์ ์ ๊ฐฑ์ ์ ์์์ ์ผ๋ก ์ํํ๋ค.
2. ์ค๋ ๋๋ง๋ค ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ค๋ ๋ ๊ฐ๊ฐ์ด ์๋ฐ ํ ๋ด์ ์์ ํฌ๊ธฐ์ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋น๋ฐ์ ๋๋๊ฒ์ด๋ค. ์ด๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค๋ ๋ ๋ก์ปฌ ํ ๋น ๋ฒํผ(TLAB) ๋ผ๊ณ ํ๋ค. ๊ฐ ์ค๋ ๋๋ ๋ก์ปฌ ๋ฒํผ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ์ฌ์ฉํ๋ค๊ฐ ๋ฒํผ๊ฐ ๋ถ์กฑํด์ง๋ฉด ๊ทธ๋ ๋๊ธฐํ๋ฅผ ํด ์๋ก์ด ๋ฒํผ๋ฅผ ํ ๋น๋ฐ๋ ์์ด๋ค. ๊ฐ์ ๋จธ์ ์ด ์ค๋ ๋ ๋ก์ปฌ ํ ๋น ๋ฒํผ๋ฅผ ์ฌ์ฉํ ์ง๋ -XX:+/-UseTLAB ๋งค๊ฐ ๋ณ์๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋๋ฌ์ผ๋ฉด ๊ฐ์๋จธ์ ์ ํ ๋น๋ฐ์ ๊ณต๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.(๊ฐ์ฒด ํด๋๋ ์ ์ธ). ์ค๋ ๋ ๋ก์ปฌ ํ ๋น ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด๊ธฐํ๋ TLAB ํ ๋น์ ๋ฏธ๋ฆฌ ์ํํ๋ค. ์๋ฐ ์ฝ๋์์ ๊ฐ์ฒด์ ์ธ์คํด์ค ํ๋๋ฅผ ์ด๊ธฐํํ์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๋ ์ด์ ์ด๋ค. ๋ชจ๋ ํ๋๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ ๋ฐ์ดํฐ ํ์ ์ ํด๋นํ๋ 0๊ฐ์ ๋ด๊ณ ์๊ฒ ๋๋๊ฒ์ด๋ค.
๋ค์, ์๋ฐ ๊ฐ์ ๋จธ์ ์ '๊ฐ ๊ฐ์ฒด์ ํ์ํ ์ค์ '์ ํด์ค๋ค. (์ด๋ ํด๋์ค์ ์ธ์คํด์ค์ธ์ง, ํด๋์ค์ ๋ฉํ ์ ๋ณด๋ ์ด๋ป๊ฒ ์ฐพ๋์ง, ์ด ๊ฐ์ฒด์ ํด์์ฝ๋๋ ๋ฌด์์ธ์ง) ์ด๋ฐ ์ ๋ณด๊ฐ ๊ฐ ๊ฐ์ฒด์ ๊ฐ์ฒด ํค๋์ ์ ์ฅ๋๋ค. ๊ฐ์ฒด ํค๋๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ๋จธ์ ์ ํ์ฌ ๊ตฌ๋ ๋ชจ๋(ํธํฅ ๋ฝ ํ์ฑํ ์ฌ๋ถ ๋ฑ)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง์ ์๋ค.
๊ฐ์ฒด ํด๋
- ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ ํฌํจ๋๋ ๋ฉํ๋ฐ์ดํฐ(Metadata)
- ๊ฐ์ฒด์ ์ํ์ ๋์์ ๊ด๋ฆฌํ๊ธฐ ์ํด JVM์ด ์ฌ์ฉํ๋ ํ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ ์๋ค.
๊ฐ์ฒด ํค๋๊ฐ ์ค์ํ ์ด์
- GC(๊ฐ๋น์ง ์ปฌ๋ ์ ) ๊ด๋ฆฌ: ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ธ์ ํด์ ๋์ด์ผ ํ๋์ง๋ฅผ JVM์ด ์ถ์ ํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณต
- ๋๊ธฐํ ์ง์: ๊ฐ์ฒด๊ฐ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ๋์ํ๋๋ก ๋ฝ(lock) ์ํ๋ฅผ ๊ด๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ: JVM์ ๊ฐ์ฒด ํค๋๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น์ ๊ด๋ฆฌ์ ๋ํ ์ต์ ํ๋ฅผ ์ํ
์ผ๋ฐ์ ์ผ๋ก new ๋ช ๋ น์ด์ ์์ฑ์(ํด๋์ค์ <init>() ๋ฉ์๋)๊น์ง ์คํ๋์ด ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฐ์์ ์๋๋๋ก ์ด๊ธฐํํด์ผ ์ฌ์ฉ ๊ฐ๋ฅํ ์ง์ง ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
์๋ฐ ์ปดํ์ผ๋ฌ๋ ์๋ฐ์ new ํค์๋๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด์ธ new ์ invokespecial๋ก ๋ณํํ๋ค. invokespecial ๋ฐ์ดํธ์ฝ๋๋ ์๋ฐ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด ์ค ํ๋๋ก, ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์ฃผ๋ก ์์ฑ์ ํธ์ถ, ๋ถ๋ชจ ํด๋์ค ๋ฉ์๋ ํธ์ถ, private ๋ฉ์๋ ํธ์ถ์ ์ฌ์ฉ๋๋ค. new ๋ ์์ ์ด์ผ๊ธฐํ ๋ฉ๋ก๋ฆฌ ํ ๋น ๋จ๊ณ๋ฅผ ์ํํ๋ฉฐ invokespecial์ ๋ฐฉ๊ธ ์ด์ผ๊ธฐํ <init>() ๋ฉ์๋ ํธ์ถ์ ๋ด๋นํ๋ค. ํ์ง๋ง ์๋ฐ ์ฝ๋์์ new ๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊ฒฝ์ฐ๋ผ๋ฉด invokespecial์ด ์ฐ์ด์ด ๋์ค์ง ์์์๋ ์๋ค.
๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ํค๋, ์ธ์คํด์ค ๋ฐ์ดํฐ, ๊ธธ์ด ๋ง์ถ๊ธฐ์ฉ ์ ๋ ฌ ํจ๋ฉ์ผ๋ก ๋๋์ด ํ์ ์ ์ฅํ๋ค.
๊ฐ์ฒด ํค๋
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ฐ์ฒด ํค๋์ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ๋ด๋๋ค.
1. ๊ฐ์ฒด์ ๋ฐํ์ ๋ฐ์ดํฐ
- ๋งํฌ ์๋: ๊ฐ์ฒด ์์ฒด์ ๋ฐํ์ ๋ฐ์ดํฐ(ํด์ ์ฝ๋, GC ์ธ๋ ๋์ด, ๋ฝ ์ ๋ณด ๋ฑ). ๊ฐ์ฒด๋ ์์ฃผ ๋ง์ ๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํด์, ๋งํฌ์๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋์ ์ผ๋ก ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๋ค. ์์ ๊ณต๊ฐ์ ๋ง์ ์ ๋ณด๋ฅผ ๋ด๊ณ ๊ฐ์ฒด ์ํ์ ๋ฐ๋ผ ๊ณต๊ฐ ์ฌํ์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํด์๋ค.
- ํด๋์ค ์๋: ๊ฐ์ฒด์ ํด๋์ค ๊ด๋ จ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํด๋์ค ํฌ์ธํฐ๊ฐ ์ ์ฅ๋๋ค. ์๋ฐ ๊ฐ์๋จธ์ ์ ์ด ํฌ์ธํฐ๋ฅผ ํตํด ํน์ ๊ฐ์ฒด๊ฐ ์ด๋ ํด๋์ค์ ์ธ์คํด์ง์ธ์ง ๋ฐํ์์ ์์ ์๋ค. ๊ฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ๋ฐ๋์ ๊ฐ์ฒด ์์ฒด์์ ์ฐพ์์ผ ํ๋๊ฑด ์๋๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ๊ฐ์ ๋จธ์ ๊ตฌํ์ด ํด๋์ค ํฌ์ธํฐ๋ฅผ ๊ฐ์ฒด ํค๋์ ์ ์ฅํ์ง๋ ์๋๋ค.
- ๋ฐฐ์ด ๊ธธ์ด: ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๊ฐ์ฒด ํค๋์ ๋ฉํ๋ฐ์ดํฐ๋ก๋ถํฐ ์๋ฐ ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ์ป๋๋ค. ํ์ง๋ง ๊ฐ์ฒด ํค๋์ ์ ์ฅ๋๋ ๊ฐ์ฒด ํ์ ์ ๋ฐฐ์ด์ ๋ด๊ธด '์์' ํ์ ์ด๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์๋ฅผ ์์์ผ ๋ฐฐ์ด ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
- ์ธ์คํด์ค ๋ฐ์ดํฐ: ๊ฐ์ฒด๊ฐ ์ค์ ๋ก ๋ด๊ณ ์๋ ์ ๋ณด(์์ ๊ด๊ณ, ํ๋ ๋ฑ). ์ ๋ณด ์ ์ฅ์ ์์๋ ๊ฐ์ ๋จธ์ ์ ํ ๋น ์ ๋ต ๋งค๊ฐ ๋ณ์(-XX:FieldsAllocationStyle) ์ ์๋ฐ ์์ค ์ฝ๋์์ ํ๋๋ฅผ ์ ์ํ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก long&double, int, short&char, byte&boolean, ์ผ๋ฐ ๊ฐ์ฒด ํฌ์ธํฐ ์์ผ๋ก ํ ๋นํ๋ค. ์ฆ ๊ธฐ๋ณธ ํ ๋น ์ ๋ต์์๋ ๊ธธ์ด๊ฐ ๊ฐ์ ํ๋๋ค์ ํญ์ ๊ฐ์ด ํ ๋น๋๊ณ ์ ์ฅ๋๋ค.
- ์ ๋ ฌ ํจ๋ฉ: ํ์์๋ ์ญํ ์ด๋ค. ํซ์คํ ๊ฐ์ ๋จธ์ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์์ ๊ฐ์ฒด์ ์์ ์ฃผ์๋ ๋ฐ๋์ 8๋ฐ์ดํธ์ ์ ์์ฌ์ผ ํ๋ฏ๋ก, ์ธ์คํด์ค ๋ฐ์ดํฐ๊ฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์๋ง ํจ๋ฉ์ผ๋ก ์ฑ์ด๋ค.
๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ
๋๋ค์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด ์ฌ๋ฌ ๊ฐ๋ฅผ ์กฐํฉํด ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ์ ์๋ ์ฐธ์กฐ ๋ฐ์ดํฐ๋ฅผ ํตํด ํ์ ๋ค์ด ์๋ ๊ฐ์ฒด๋ค์ ์ ๊ทผํด ์ด๋ฅผ ์กฐ์ํ๋ค. <์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ> ๋ ์ฐธ์กฐ ํ์ ์ ๋จ์ง '๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ'๋ผ๊ณ ํ ๋ฟ, ํ์์ ๊ฐ์ฒด์ ์ ํํ ์์น๋ฅผ ์์๋ด์ด ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๊ท์ ํ์ง ์์, ์ฃผ๋ก ํธ๋ค์ด๋ ๋ค์ด๋ ํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ๊ตฌํํ์ฌ ๊ฐ์ฒด์ ์ ๊ทผํ๋ค.
- ํธ๋ค ๋ฐฉ์ : ์๋ฐ ํ์ ํธ๋ค ์ ์ฅ์ฉ ํ์ด ๋ณ๋๋ก ์กด์ฌ. ์ฐธ์กฐ์๋ ๊ฐ์ฒด์ ํธ๋ค ์ฃผ์๊ฐ ์ ์ฅ, ํธ๋ค์๋ ํด๋น ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ฐ์ดํฐ, ํ์
๋ฐ์ดํฐ, ๊ตฌ์กฐ ๋ฑ ์ ํํ ์ฃผ์ ์ ๋ณด๊ฐ ๋ด๊ธด๋ค.
- ์ฅ์ : ์ฐธ์กฐ์ ์์ ์ ์ธ ํธ๋ค์ ์ฃผ์๊ฐ ์ ์ฅ๋๋ค๋ ๊ฒ์ด๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ์ ์์ ๊ฐ์ฒด๊ฐ ์ด๋ํ๋ ์ผ์ ํํ๋ค. ํ์ง๋ง ํธ๋ค์ ์ด์ฉํ๋ฉด ์ด๋ ๊ฒ ๊ฐ์ฒด์ ์์น๊ฐ ๋ฐ๋๋ ์ํฉ์์๋ ์ฐธ์กฐ ์์ฒด๋ ๋ณํ์ง ์์ผ๋ฉฐ, ํธ๋ค ๋ด์ ์ธ์คํด์ค ๋ฐ์ดํฐ ํฌ์ธํฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
- ๋ค์ด๋ ํธ ํฌ์ธํธ ๋ฐฉ์: ์๋ฐ ํ์ ์์นํ ๊ฐ์ฒด์์ ์ธ์คํด์ค ๋ฐ์ดํฐ์ ํ์
๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ธธ๋ก ์ ๊ณตํ๋ค. ์คํ์ ์ฐธ์กฐ์๋ ๊ฐ์ฒด์ ์ค์ ์ฃผ์๊ฐ ๋ฐ๋ก ์ ์ฅ๋์ด ์๋ค. ํซ์คํ์ ์ฃผ๋ก ๋ค์ด๋ ํธ ํฌ์ธํฐ ๋ฐฉ์์ ์ด์ฉํ๋ค.
- ์ฅ์ : ํธ๋ค์ ๊ฒฝ์ ํ๋ ์ค๋ฒํค๋๊ฐ ์๊ธฐ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค. ์๋ฐ์์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ ๊ทผํ ์ผ์ด ์์ฃผ ๋ง์ ์ด ์ค๋ฒํค๋๋ ์คํ ์๊ฐ์ ์ํฅ์ ํฌ๊ฒ ์ค ์ ์๋ค.
์ค๋ฒ ํค๋
ํน์ ๊ธฐ๋ฅ์ ์ํํ๋๋ฐ ๋๋ ๊ฐ์ ์ ์ธ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฑ ์์์ ๋งํ๋ค.
์๋ฐ ํ ์ค๋ฒํ๋ก
์๋ฐ ํ์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ค. ๊ฐ์ฒด๋ฅผ ๊ณ์ ์์ฑํ๊ณ ๊ทธ ๊ฐ์ฒด๋ค์ ์ ๊ทผํ ๊ฒฝ๋ก๊ฐ ์ด์ ์๋ค๋ฉด ์ธ์ ๊ฐ๋ ํ์ ์ต๋ ์ฉ๋์ ๋์ด์๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค๋ฒํ๋ก๋๋ค. ์ต์ ํฌ๊ธฐ๋ -Xms ๋งค๊ฐ ๋ณ์๋ก, ์ต๋ ํฌ๊ธฐ๋ -Xmx ๋งค๊ฐ ๋ณ์๋ก ์ค์ ํ๋ค. -XX:+HeapDumpOnOutOfMemeoryError ๋งค๊ฐ ๋ณ์๋ฅผ ์ค์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค๋ฒํ๋ก๋์ ๋ ๊ฐ์ ๋จธ์ ์ด ์์ธ ๋ฐ์ ์์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ค๋ ์์ ํ์ผ๋ก ์ ์ฅ(dump) ํ๋ค. ์ค์ ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ OutOfMemoryError๊ฐ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ํ๋ ์์ญ์ด ์๋ฐ ํ ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋ฏธ์ง ๋ถ์ ๋๊ตฌ๋ก ํ ๋คํ ์ค๋ ์์ ๋ถ์ํด ๋ณด๋ ๊ฒ์ด๋ค. ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ค๋ฒํ๋ก๋ฅผ ์ผ์ผํจ ๊ฐ์ฒด๊ฐ ๊ผญ ํ์ํ ๊ฐ์ฒด์ธ๊ฐ'๋ฅผ ํ์ธํ๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์์ธ์ง, ์ค๋ฒํ๋ก์ธ์ง ํ์ธํ๋ค. ํ์์๋ ๊ฐ์ฒด๊ฐ ์์ธ์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์์ธ์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์๊ธฐ๋ก ํ ๋คํ ์ค๋ ์ ํ์ผ์ ์ด์ด ๋๊ตฌ๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ก๋ถํฐ GC ๋ฃจํธ๊น์ง์ ์ฐธ์กฐ ์ฌ์ฌ์ ์ดํด๋ณธ๋ค. ๋์๋ ๊ฐ์ฒด๊น์ง ์ด๋ค ์ฐธ์กฐ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๊ณ , ์ด๋ GC ๋ฃจํธ์ ์ฐ๊ฒฐ๋์ด ์๊ธฐ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ์ํ์ง ๋ชปํ๋์ง ์ฐพ์๋ณธ๋ค. ๋์๋ ๊ฐ์ฒด์ ํ์ ์ ๋ณด์ GC ๋ฃจํธ๊น์ง์ ์ฐธ์กฐ ์ฌ์ฌ ์ ๋ณด๋ฅผ ๋ณด๋ฉด ๋๋ถ๋ถ ํด๋น ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง ์์น๋ฅผ ๋ ์ ํํ๊ฒ ์์ ์์ด, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ผ์ผํค๋ ์ฝ๋์ ์ ํํ ์์น๋ฅผ ์ฐพ์ ์ ์๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋, ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ค ์ด์ ์์ด์ผ ํ๋ค๋ฉด, ๋จผ์ ์๋ฐ ๊ฐ์ ๋จธ์ ์ ํ ๋งค๊ฐ ๋ณ์ ์ค์ (-Xmx์ -Xms) ๊ณผ ์ปดํจํฐ์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ ๋จธ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ํ ๋นํ ์ ์๋์ง ์์๋ณธ๋ค. ๋ค์, ์ฝ๋์์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋ฌด ๊ธธ๊ฑฐ๋ ์ํ๋ฅผ ๋๋ฌด ์ค๋ ์ ์งํ๋ ๊ฐ์ฒด๋ ์๋์ง, ๊ณต๊ฐ ๋ญ๋น๊ฐ ์ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฐ๊ณ ์์ง๋ ์์์ง ์ดํด ํ๋ก๊ทธ๋จ์ด ๋ฐํ์์ ์๋นํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์๋ก ๋ฎ์ถ๋ค.
๊ฐ์ ๋จธ์ ์คํ๊ณผ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ ์ค๋ฒํ๋ก
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ฐ์ ๋จธ์ ์คํ๊ณผ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ๊ตฌ๋ถํ์ง ์๋๋ค. ์คํ ํฌ๊ธฐ๋ ์ค์ง -Xss ๋งค๊ฐ ๋ณ์๋ก๋ง ๋ณ๊ฒฝํ ์ ์๋ค. <์๋ฐ ๊ฐ์ ๋จธ์ ๋ช ์ธ>์๋ ๊ฐ์ ๋จธ์ ์คํ๊ณผ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์์์ ๋ฐ์ํ๋ ๋๊ฐ์ง ์์ธ๋ฅผ ๋ช ์ธํ๋ค.
- ์ค๋ ๋๊ฐ ์๊ตฌํ๋ ์คํ ๊น์ด๊ฐ ๊ฐ์ ๋จธ์ ์ด ํ์ฉํ๋ ์ต๋ ๊น์ด๋ณด๋ค ํฌ๋ฉด StackOverflowError๋ฅผ ๋์ง๋ค.
- ๊ฐ์ ๋จธ์ ์ด ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ์ฅํ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋, ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด ์คํ์ ๋ ํ์ฅํ ์ ์๋ค๋ฉด OutOfMemoryError๋ฅผ ๋์ง๋ค.
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ํ์ฅ์ ์ง์ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ์ค๋ ๋๋ฅผ ์์ฑํ ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ์ฌ OutOfMemoryError๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ค๋ ๋ ์คํ ์ค์ ๊ฐ์ ๋จธ์ ์คํ์ด ๋์น๋ ์ผ์ ์๋ค. ์ฆ ์คํ ์ฉ๋์ด ๋ถ์กฑํ์ฌ ์๋ก์ด ์คํ ํ๋ ์์ ๋ด์ ์ ์์ ๋๋ง StackOverflowError๊ฐ ๋ฐ์ํ๋ค.
์๋ฐ ๊ฐ์ ๋จธ์ ๋ฒ์ ๊ณผ ์ด์ ์ฒด์ ์ ๋ฐ๋ผ, ํนํ ์ด์ ์ฒด์ ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง ํฌ๊ธฐ์ ๋ฐ๋ผ ์ต์ ์คํ ํฌ๊ธฐ์ ์ ํ์ด ์๋ค.
์ค๋ ๋ ์๋ฅผ ์ค์ผ ์ ์๋ ์ํฉ์์ ๊ณผ๋ํ ์ค๋ ๋ ์์ฑ์ผ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ๋ฉด, ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์ต๋ ํ ํฌ๊ธฐ์ ์คํ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฒ์ด๋ค.
๋ฉ์๋ ์์ญ๊ณผ ๋ฐํ์ ์์ ํ ์ค๋ฒํ๋ก
๋ฐํ์ ์์ ํ์ด ์ค๋ฒํ๋ก๋๋ฉด ์ถ๋ ฅ ๋ฉ์์ง์์ "OutOfMemoryError" ๋ค์์ PermGen space" ๋ผ๊ณ ๋์จ๋ค. ์ด๋ฅผ ํตํด์ ๋ฐํ์ ์์ ํ์ด ๋ฉ์๋ ์์ญ์ ํ ๋ถ๋ถ์์ ์์ ์๋ค. ๋ฉ์๋ ์์ญ์ ์ค๋ฒํ๋ก๋ ํํ ๋ฐ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก ์์ธ๋ค.
๋ค์ดํฐ๋ธ ๋ค์ด๋ ํธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํ๋ก
๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ(native memory)**๋ฅผ ๋ค๋ฃฐ ๋ ๋ฐ์ํ๋ ๋ฌธ์
ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ค์ด๋ ํธ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ -XX:MaxDirectMemorySize ๋งค๊ฐ๋ณ์๋ก ์ค์ ํ๋ค. ๊ธฐ๋ณธ ์ค์ ๊ฐ์ -Xmx๋ก ์ค์ ํ ์๋ฐ ํ์ ์ต๋๊ฐ์ด๋ค.
์ฐธ๊ณ
https://product.kyobobook.co.kr/detail/S000213057051
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์ ์ฐ์ฆ๋ฐ - ๊ต๋ณด๋ฌธ๊ณ
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๊น์ํ ๋ด๋ถ๋ฅผ ํฅํด ๋ ๋๋ ํฅ๋ฏธ์ง์งํ ๋ชจํC·C++๋ฅผ ์ฌ์ฉํด ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์์ ๊น๋ค๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ๋ซํผ ์ด์์ฑ ๋ฌธ์ ๋ ๊ฐ๋ฐ์๋ค์
product.kyobobook.co.kr
https://jellili.tistory.com/55
[JAVA] JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ - ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area) ์์๋ณด๊ธฐ
์๋ฐ ๊ฐ์ ๋จธ์ (JVM, Java Virtual Machine) ์ด๋? ์๋ฐ ๊ฐ์ ๋จธ์ (JVM, Java Virtual Machine)์ ์๋ฐ ํ๋ก๊ทธ๋จ ์คํํ๊ฒฝ์ ๋ง๋ค์ด์ฃผ๋ ์ํํธ์จ์ด์ด๋ค. ์ด ํฌ์คํธ์ ํจ๊ป ๋ค๋ฃจ๊ณ ์ถ์ง๋ง ๋ด์ฉ์ด ๋๋ฌด ๊ธธ์ด์ ธ ๋
jellili.tistory.com