Programming/Java

F007 - JVM : Memory Architecture

osean 2021. 5. 14. 03:43
โœ๏ธ ๋‘ ๋ฒˆ์งธ ๋ฉ˜ํ† ๋ง ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋ฉด์„œ Reference Type๊ณผ String ํด๋ž˜์Šค์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋‹ค
H๋‹˜๊ป˜์„œ Garbage Collector์™€ JVM ํ‚ค์›Œ๋“œ๋ฅผ ๊บผ๋‚ด์…จ๊ณ , ์ด์— ๋Œ€ํ•œ ๋ฉ˜ํ† ๋‹˜์˜ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์งˆ๋ฌธ์— ๋‹นํ™ฉํ–ˆ์—ˆ๋‹ค.

1. ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์–ด์กŒ๋‹ค.
2. ๋ฉ˜ํ† ๋‹˜ ์งˆ๋ฌธ์— ๋‹นํ™ฉํ•˜๋˜ ๋‚ด ์ž์‹ ์ด ๋ถ€๋„๋Ÿฌ์› ๋‹ค. ๋ถ€๋„๋Ÿฝ์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๋จผ์ € Java ์ปดํŒŒ์ผ ์‹œ,
JVM ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์ž.

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ํ†บ์•„๋ณด์ž

Java ํŒŒ์ผ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์™€ ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜์–ด ์ง€๋Š”๋ฐ,
์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ๋Š” Java Compiler(๋ช…๋ น์–ด javac)๋ฅผ ํ†ตํ•ด Java Source Code ๋ฅผ .class ํŒŒ์ผ(์ดํ•˜ ํด๋ž˜์Šค ํŒŒ์ผ)๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
ํด๋ž˜์Šค ํŒŒ์ผ์€ JVM์ด ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ๋กœ Java Byte Code๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ๊ณผ์ •์—์„œ String ํด๋ž˜์Šค์˜ + ์—ฐ์‚ฐ์„ StringBuilder ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜(Java 8 ์ดํ›„)ํ•˜๋Š” ๋“ฑ ๋งŽ์€ ๋ถ€๋ถ„์—์„œ Java Compiler๊ฐ€ ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ์— ๊ฐ„์„ญํ•˜์—ฌ ์•Œ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ ๋งŒ๋“ค์–ด์ง„๋‹ค.
์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ๋˜์—ˆ๋‹ค๋ฉด Java Runtime Environment(์ดํ•˜ JRE)์— ์†ํ•œ JVM์„ ํ†ตํ•ด ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ๊ณ , ์ด๋ฅผ ์„ค์ •๋œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค.
์ด๋ ‡๊ฒŒ Java ํ”„๋กœ๊ทธ๋žจ์€ JVM์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์‹คํ–‰๋˜๋Š”๋ฐ, ์ด๋Š” ๊ฐ OS์— ๋งž๋Š” JDK ํ˜น์€ JRE๋งŒ ์„ค์น˜ํ•ด์ฃผ๋ฉด OS์— ์ข…์†๋˜์ง€ ์•Š๊ณ  Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

JVM Memroy Architecture

Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋Š”์ง€ ๊ทธ๋ฆผ๊ณผ ๋Œ€๋žต์ ์ธ ์„ค๋ช…์„ ํ†ตํ•ด ๋จธ๋ฆฟ์†์— ์ง‘์–ด ๋„ฃ์—ˆ๋‹ค.
์ด์ œ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์ด ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๋Š”์ง€ ๊ณต๋ถ€ํ•ด๋ณด์ž.
๋จผ์ € JVM์—๋Š” 3๊ฐœ์˜ ์˜์—ญ์ด ์กด์žฌํ•˜๋Š”๋ฐ ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ๋‹ค๋ฅด๋‹ค

๐Ÿ“Œ Class Loader - Runtime Data Area์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ธ๋‹ค.
๐Ÿ“Œ Runtime Data Area - ์‹ค์งˆ์ ์œผ๋กœ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ๋กœ ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์ปจํŠธ๋กค ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
๐Ÿ“Œ Execution Engine - Runtime Data Area ์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ์˜์—ญ์ด๋‹ค. ํ•ด๋‹น ์˜์—ญ์—์„œ ์‹ค์งˆ์ ์œผ๋กœ ์–ธ์–ด๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ฐ ์˜์—ญ์— ๋˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ์„ธ๋ถ„ํ™”๋˜์–ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋‹ฌ๋ผ ๋” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์˜ค๋Š˜์€ Runtime Data Area ์˜์—ญ์—์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๋Š”์ง€, ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”์ง€๊ฐ€ ์ฃผ ๋ชฉ์ ์ด๋‹ค.

Runtime Data Area

ํ•ด๋‹น ์˜์—ญ์€ ์•ž์—์„œ ๊ฐ„๋‹จํžˆ ์„œ์ˆ ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์ ์ ˆํžˆ ํ• ๋‹นํ•˜๋Š” ์˜์—ญ์ด๋‹ค. ์ด์ „ ์‹œ๊ฐ„์— Primitive Type๊ณผ Reference Type ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์€ Stack ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜์–ด ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์†ํ•œ ๋งˆ์ง€๋ง‰ ์Šค์ฝ”ํ”„๊ฐ€ ์‹คํ–‰๋  ๋•Œ Stack ๋ฉ”๋ชจ๋ฆฌ์—์„œ pop๋˜๋Š” ๊ฒƒ๊ณผ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ๋ณ€์ˆ˜๊ฐ€ Stack ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋˜์ง€๋งŒ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Heap ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด Runtime Data Area์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์กด์žฌํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” ๊ณผ์—ฐ Stack๊ณผ Heap ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์•Œ๋ฉด๋ ๊นŒ?
๋ฆฌํ„ฐ๋Ÿด๋กœ ์„ ์–ธ๋œ String์€ ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น๋˜๊ณ , static ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋“ค์€ ์–ด๋””์— ํ• ๋‹น๋˜๋ฉฐ, ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ์˜ ์ •์˜๋Š” ์–ด๋””์— ์กด์žฌํ•˜๊ณ  ์žˆ์„๊นŒ?

๐Ÿ”Ž Stack Memory
๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๋Š” ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ, ์„ ์–ธ๋œ ์ง€์—ญ ๋ณ€์ˆ˜๋‚˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋“ฑ์ด ํ•ด๋‹น ์˜์—ญ์— ํ• ๋‹น๋˜๋ฉฐ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ๊ฒฝ์šฐ ์„ ์–ธ๋œ ๊ฐ’์ด ์ €์žฅ๋˜๊ณ  ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ Heap Memory์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
๊ฐ ๋ณ€์ˆ˜๋“ค์ด ์†ํ•œ ๋งˆ์ง€๋ง‰ ์Šค์ฝ”ํ”„๊ฐ€ ์‹คํ–‰๋  ๋•Œ Stack ๋ฉ”๋ชจ๋ฆฌ์— ์Œ“์ธ ๋ณ€์ˆ˜๋“ค์€ ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค.
๐Ÿ”Ž PC Register
Program Counter๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ **๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋˜๋ฉฐ, ์ž์‹ ์ด ์†ํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์„ ์–ด๋–ค ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์˜์—ญ์œผ๋กœ ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ JVM ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
๐Ÿ”Ž Native Method Stack
Java๊ฐ€ ์•„๋‹Œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ API๋‚˜ ํ”„๋กœ๊ทธ๋žจ๊ณผ์˜ ํ†ตํ•ฉ์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ์˜์—ญ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Native Method๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์‹คํ–‰๋˜๋ฉด ๊ธฐ์กด์˜ Java Method๋Š” ๋‚จ๊ฒจ๋‘๊ณ , ํ˜ธ์ถœ๋œ Native Method๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ˜ธ์ถœ๋œ Native Method์˜ ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด ๊ธฐ์กด์— ์ˆ˜ํ–‰ ์ค‘์ด๋˜ Java Method๊ฐ€ ์ด์–ด์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์–ด ๋‹ค์‹œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ•ด๋‹น ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” String ํด๋ž˜์Šค์˜ .inter() ๋ฉ”์†Œ๋“œ๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋‹ค.
๐Ÿ”Ž Heap Memory
๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฉฐ, ๋ฐฐ์—ด(Array)์™€ ์ธ์Šคํ„ด์Šค๋งŒ์ด ํ• ๋‹น๋˜๋Š” ์˜์—ญ์ด๋‹ค.
ํ•ด๋‹น ์˜์—ญ์€ GC์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉฐ Heap Memory ๋‚ด์˜ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์ตœ์ ํ™” ๋˜๋Š” ์‹œ๊ธฐ๋‚˜ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค.
String Constant Pool ์˜์—ญ์ด Heap Memory์— ํ• ๋‹น๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋ฆฌํ„ฐ๋Ÿด๋กœ ์„ ์–ธ๋œ String ๊ฐ์ฒด๊ฐ€ String Constant Pool ์˜์—ญ์— ํ• ๋‹น๋˜๊ณ , ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๋Š” ๋ฆฌํ„ฐ๋Ÿด๋กœ ์„ ์–ธ๋œ String ๊ฐ์ฒด๋Š” ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.
๐Ÿ”Ž Method Area
๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฉฐ, JVM์ด Byte Code๋ฅผ ํ†ตํ•ด ์ฝ์€ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ, ์ƒ์„ฑ์ž์™€ ๋ฉ”์†Œ๋“œ ์Šค์ฝ”ํ”„ ๋‚ด์— ์„ ์–ธ๋œ ์ฝ”๋“œ ๋“ฑ๋„ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์— ์˜ํ•ด ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด JVM์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ Byte Code๋ฅผ ์ฝ๊ณ  Method Area์— ์ €์žฅํ•œ๋‹ค.
ํ•ด๋‹น ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ์ข…๋ฅ˜๋ฅผ ์‚ดํŽด๋ณด์ž.

  • Class / Interface Information (ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ์˜ ์ •๋ณด)
  • Runtime Constant Pool (ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ์— ์†ํ•œ ๋ชจ๋“  ์ƒ์ˆ˜ ์ •๋ณด)
  • Field Information (์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด > ํƒ€์ž…์ด๋‚˜ ์ ‘๊ทผ ์ œ์–ด์ž ๋“ฑ)
  • Method Information (์ƒ์„ฑ์ž์™€ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด > ์ด๋ฆ„, ๋งค๊ฐœ ๋ณ€์ˆ˜, ๋ฆฌํ„ด๊ฐ’, ์ ‘๊ทผ ์ œ์–ด์ž ๋“ฑ)
  • Class Variable (static ์„ ์–ธ๋œ ํด๋ž˜์Šค ๋ณ€์ˆ˜)

๐Ÿ’ญ 2020๋…„ 12์›”, ๋ฐฑ๊ธฐ์„ ๋‹˜ ์˜จ๋ผ์ธ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋ฉฐ ์ž‘์„ฑํ–ˆ๋˜ ๋‚ด์šฉ์„ ๋ณด๊ณ  ๊ฒฝ์•…์„ ๊ธˆ์น˜ ๋ชปํ–ˆ๋‹ค.์˜ค๋Š˜ ์ •๋ฆฌํ•œ ๋‚ด์šฉ๊ณผ ๋น„์Šทํ•œ ๋‚ด์šฉ์ธ๋ฐ ๋ชจ๋“  ๋‚ด์šฉ์ด ๋‘๋ฃจ๋ญ‰์‹คํ•˜๊ฒŒ ๋–  ์žˆ๋‹ค.

์•„๋ฌด๋ฆฌ ์ฝ์–ด๋„ '๊ทธ๋ž˜์„œ ์™œ ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฑด๋ฐ?' ๋ผ๋Š” ์˜๋ฌธ์ด ๋– ๋‚˜์ง€ ์•Š์•˜๋‹ค.๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— ์ œ๋Œ€๋กœ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ์ง‘์ค‘๋ ฅ ๋ถ€์กฑ์œผ๋กœ ์ด๋งŒ ๋งˆ๋ฌด๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๊ธ€ ์ž‘์„ฑ ์ดˆ๋ฐ˜์—๋Š” ๋‚˜๋ฆ„ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐฉ์‹๋Œ€๋กœ ์ตœ๋Œ€ํ•œ ์š”์ ์— ๋งž์ถฐ ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ๊นŠ๊ฒŒ ํŒŒ๊ณ ๋“ค๋ฉด ํŒŒ๊ณ ๋“ค์ˆ˜๋ก ์ดํ•ด์˜ ํ•œ๊ณ„ ๋•Œ๋ฌธ์ธ์ง€ ๋ช‡๋ช‡ ๋ถ€๋ถ„์€ ๋จธ๋ฆฟ์†์— ๊ทธ๋ฆฌ์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

JVM ๊ตฌ์กฐ๋Š” ํ•œ์ฐธ์„ ๊ณต๋ถ€ํ•ด๋„ ๋ชจ์ž๋ฅด๊ฒ ๊ตฌ๋‚˜ ๋ผ๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๊ณ , ์ผํ•˜๋ฉด์„œ๋„ ์ฝ”๋“œ ์งค ๋•Œ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์“ฐ๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ด๋ ‡๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์„๊นŒ๋ผ๋ฉฐ ์ƒ์ƒํ•ด๋ณด์ง€๋งŒ ์ •ํ™•ํ•œ ์ด๋ก ์ด ๋ฐ”ํƒ•์ด ๋˜์ง€ ์•Š์œผ๋‹ˆ ๋œฌ๊ตฌ๋ฆ„ ์žก๋Š” ๋Š๋‚Œ์ด๋‹ค.

๊ทธ๋ž˜๋„ Java ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ํ•œ ๊ฑธ์Œ ๋‚˜์•„๊ฐ„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ์˜๋‹ค!
์•„์ง ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์€ ํŒŒ๋ž€์ƒ‰ ํ˜•๊ด‘ํŽœ ์ฒ˜๋ฆฌํ–ˆ์œผ๋‹ˆ ๊ผญ ๋‹ค์‹œ ์ฝ์–ด๋ณด๊ธฐ๋กœ ์•ฝ์†!

์ฐธ๊ณ  ๋ฌธ์„œ

 

JVM์˜ Runtime Data Area

์•ˆ๋…• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

www.holaxprogramming.com

 

JVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

ํ•ด๋‹น ํฌ์ŠคํŠธ์˜ ์ž‘์„ฑ ๋ชฉ์  ๊ธฐ๋ณธ์ž๋ฃŒํ˜•๊ณผ ์ฐธ์กฐ์ž๋ฃŒํ˜•์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ, ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์ฐจ์ด๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€, JVM์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์— ์ด๋ฅด๋ €๋‹ค. ๋‹จ์ˆœ

hpotter1993.tistory.com

 

[JAVA] Static Keyword ์™€ Method Area (๋ฉ”์†Œ๋“œ ์˜์—ญ)

โ– Static Keyword, Method Area  static์€ ์‚ฌ์ „์ ์œผ๋กœ '์ •์ ์ธ, ๊ณ ์ •๋œ, ์›€์ง์ด์ง€ ์•Š๋Š”'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค. jvm ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ ์ •๋จ์„ ๋œปํ•จ๊ณผ ๋™์‹œ์— static์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ '๊ณต์œ 'ํ•œ๋‹ค๋Š” ์˜๋ฏธ

ict-nroo.tistory.com

'Programming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

F009 - Inheritance, Composition  (0) 2021.05.18
F008 - Garbage Collector  (2) 2021.05.16
F006 - Throwable, Exception, Error  (0) 2021.05.11
F005 - Stack & Heap Memory  (0) 2021.05.08
F004 - Reference Type  (0) 2021.05.08