๐ŸŒฑ JAVA & SPRING/Java (JVM) 3

Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

์Šคํ”„๋ง๋ถ€ํŠธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋„์ฐฉํ–ˆ์„ ๋•Œ, Controller๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์—์„œ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ• ๊นŒ? 1. ์š”์ฒญ ๋„์ฐฉ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์ด ์›น ์„œ๋ฒ„(ex. Tomcat)์— ๋„์ฐฉํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์“ฐ๋ ˆ๋“œ ํ’€์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์š”์ฒญ์œผ ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ(thread)๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. 2. ์Šคํƒ ์˜์—ญ ํ™œ์šฉ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ์— ์Šคํƒ ์˜์—ญ(=์ž‘์—… ๊ณต๊ฐ„)์ด ํ• ๋‹น๋œ๋‹ค. ์Šคํƒ ์˜์—ญ์€ ๊ฐ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„๋กœ ์กด์žฌํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” ์Šคํƒ ์˜์—ญ์„ ์‚ฌ์šฉํ•ด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ •๋ณด(๋ฉ”์„œ๋“œ ์œ„์น˜, ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…, ๋ฐ˜ํ™˜ ํƒ€์ž…, ํ˜ธ์ถœ ์œ„์น˜ ๋“ฑ..)์™€ ์ง€์—ญ ๋ณ€์ˆ˜ ๋“ฑ์„ ๊ด€๋ฆฌํ•œ๋‹ค..

JVM GC์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •

GC(Garbage Collector)๋ž€? ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” Garbage๋ž€, ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ํ•„์š”์—†๊ฒŒ ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Garbage Collector๋ฅผ ํ•œ ๋‹จ์–ด๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด "์“ฐ๋ ˆ๊ธฐ ๊ฐ์ฒด ์ •๋ฆฌ์ž" ์ •๋„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. GC ๋Œ€์ƒ GC๋Š” Heap ์˜์—ญ์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค. GC์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋ณด๊ธฐ ์œ„ํ•ด์„œ, Heap ์˜์—ญ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž. Heap์€ ์ฒ˜์Œ ์„ค๊ณ„๋  ๋•Œ 2๊ฐ€์ง€ ์ „์ œ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค. 1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(Unreachable)๊ฐ€ ๋œ๋‹ค. 2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค. ์ฆ‰, ๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผํšŒ์„ฑ์ด๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋žซ๋™์•ˆ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ์ด์šฉํ•ด JVM ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ..

Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ๊ณผ์ •๊ณผ JVM์˜ ๊ตฌ์กฐ

JVM์ด๋ž€?JVM(Java Virtual Machine)์ด๋ž€ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ , ์ฆ‰ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹ฑํ–‰ํ•˜๋Š” ๊ฐ€์ƒ์˜ ์ปดํ“จํ„ฐ์ด๋‹ค.(๊ฐ€์ƒ๋จธ์‹ ์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌผ๋ฆฌ์  ๋จธ์‹ ๊ณผ ์œ ์‚ฌํ•œ ๋จธ์‹ ์„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.) JVM์˜ ์—ญํ• ์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ์–ด๋“ค์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.๋˜ํ•œ JVM์€ Java์™€ OS ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŠน์ •ํ•œ ํ•˜๋“œ์›จ์–ด๋‚˜ OS์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  Java ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(GC)๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์™œ JVM์„ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€ํ•œ์ •๋œ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์ค‘์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค.๋™์ผํ•œ ๊ธฐ๋Šฅ์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋”๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ขŒ์šฐ๋œ๋‹ค. (ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜..