๋ถ๋ฅ:์ํํธ์จ์ด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
JVM์์ ๋์ด์ด
1. ๊ฐ์[ํธ์ง]
Java๋ก ๊ฐ๋ฐํ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ์ฌ ๋ง๋ค์ด์ง๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํ์ํค๊ธฐ ์ํ ๊ฐ์๋จธ์ . JRE(Java Runtime Environment)์ ํฌํจ๋์ด ์์ผ๋ฉฐ, Java ์ปดํ์ผ๋ฌ๊ฐ ํ๋ก ํธ์๋๋ฅผ ๋ด๋นํ๋ค๋ฉด Java ๊ฐ์ ๋จธ์ ์ ์ฝ๋ ์ต์ ํ์ ๋ฐฑ์๋๋ฅผ ๋ด๋นํ๋ค. Java์ ํจ๊ป ์ฌ ๋ง์ดํฌ๋ก์์คํ
์ฆ์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ ์ฌ์ด ์ค๋ผํด์ ์ธ์๋ ํ ํ์ฌ๋ ์ค๋ผํด์ด Java ๋ช
์นญ์ ๋น๋กฏํ์ฌ ๋ชจ๋ ๊ถํ์ ํ์ฌํ๊ณ ์๋ค. Java ์์ค ์ฝ๋๋ javac ์ปดํ์ผ๋ฌ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ๋๋ฉฐ, ์ด ๋ฐ์ดํธ์ฝ๋๋ JRE์ ๋ค์ด์๋ java classloader์ ์ํด JVM์ผ๋ก ์ ์ฌ๋๊ณ JVM์ ์ ์ฌ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ JIT ์ปดํ์ผ ๋ฐฉ์์ผ๋ก ์คํํ๋ค.
JVM์ ํ๋ซํผ ๋ ๋ฆฝ์ ์ผ๋ก, JVM์ด ์คํ ๊ฐ๋ฅํ ํ๊ฒฝ์ด๋ผ๋ฉด ์ด๋์๋ Java ํ๋ก๊ทธ๋จ์ด ์คํ๋ ์ ์๋๋ก ํ๋ค. ์ฆ, Java์ ๋ชจํ ์ธ Write once, Run anywhere๋ JVM์ ํตํด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ํ์ง๋ง ํน์ ์ด์์ฒด์ ์ ํน์ํ ๊ธฐ๋ฅ์ ํธ์ถํ๊ฑฐ๋ ํ๋์จ์ด๋ฅผ ์ ์ดํ๋ ๋ฑ์ ์ผ์ JVM์ผ๋ก ํ ์ ์์ผ๋ฉฐ, JNI ๊ฐ์ Native ์ฝ๋๋ฅผ ํธ์ถํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค. ์ฆ ์ผ์ข ์ ์๋๋ฐ์ค ํ๊ฒฝ์ธ ์ .
Java ๊ฐ์๋จธ์ ์ด๋ผ๊ณ ํด์ Java ๋ฐ์ดํธ์ฝ๋๋ง ์ธ์ํ๋ ๊ฒ์ ์๋๋ค. ์ด ๋ฐ์ดํธ์ฝ๋๋ฅผ Java๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด๋ค[1]์ ๊ฐ์ง๊ณ ๋ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ง๊ธ์ Java ๊ฐ์๋จธ์ ์ Java๋ง์ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ ๋๋ค. ์ด๋ฆ์ด Java ๊ฐ์๋จธ์ ์ด๋ค ๋ณด๋ Java์ ์ข ์๋ ๊ฒ ์๋๊ฐ ์๊ฐํ ์๋ ์์ง๋ง ๊ทธ๋ ์ง๋ ์๋ค. Java ๊ฐ์๋จธ์ ์ ์ฝํ๋ฆฐ ์ฝ๋๋ฅผ ์ปดํ์ผํด๋ ์ฝ์ ์๋ ์๊ณ ์ค์นผ๋ผ ์ฝ๋๋ฅผ ์ปดํ์ผํด๋ ์ฝ์ ์ ์๋ค. ๋จ, ๊ธฐ๋ณธ์ด Java๋ฅผ ์ํด์ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ Java ์์ค ์ฝ๋์ ์ปดํ์ผ๋ ๋ฐ์ดํธ์ฝ๋๋ ๋น๊ต์ ์ง๊ด์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง๋ง, ์ฝํ๋ฆฐ์ด๋ ์ค์นผ๋ผ์ ๊ฒฝ์ฐ Java์์ ํธํ์ฑ์ ๊ณ ๋ คํ๊ธด ํ์ด๋ ์๋์ ์ผ๋ก๋ ๋น์ง๊ด์ ์ด๋ฉฐ ํ์ฐ์ ์ผ๋ก Java๋ฅผ ๊ณต๋ถํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
.NET Framework์ ํจ๊ป ๊ฐ์๋จธ์ ์ธ์ด ์์ฅ์ ์ฌ์ค์ ์๋ถํ๊ณ ์๋ค.
JVM์ ํ๋ซํผ ๋ ๋ฆฝ์ ์ผ๋ก, JVM์ด ์คํ ๊ฐ๋ฅํ ํ๊ฒฝ์ด๋ผ๋ฉด ์ด๋์๋ Java ํ๋ก๊ทธ๋จ์ด ์คํ๋ ์ ์๋๋ก ํ๋ค. ์ฆ, Java์ ๋ชจํ ์ธ Write once, Run anywhere๋ JVM์ ํตํด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ํ์ง๋ง ํน์ ์ด์์ฒด์ ์ ํน์ํ ๊ธฐ๋ฅ์ ํธ์ถํ๊ฑฐ๋ ํ๋์จ์ด๋ฅผ ์ ์ดํ๋ ๋ฑ์ ์ผ์ JVM์ผ๋ก ํ ์ ์์ผ๋ฉฐ, JNI ๊ฐ์ Native ์ฝ๋๋ฅผ ํธ์ถํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค. ์ฆ ์ผ์ข ์ ์๋๋ฐ์ค ํ๊ฒฝ์ธ ์ .
Java ๊ฐ์๋จธ์ ์ด๋ผ๊ณ ํด์ Java ๋ฐ์ดํธ์ฝ๋๋ง ์ธ์ํ๋ ๊ฒ์ ์๋๋ค. ์ด ๋ฐ์ดํธ์ฝ๋๋ฅผ Java๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด๋ค[1]์ ๊ฐ์ง๊ณ ๋ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ง๊ธ์ Java ๊ฐ์๋จธ์ ์ Java๋ง์ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ ๋๋ค. ์ด๋ฆ์ด Java ๊ฐ์๋จธ์ ์ด๋ค ๋ณด๋ Java์ ์ข ์๋ ๊ฒ ์๋๊ฐ ์๊ฐํ ์๋ ์์ง๋ง ๊ทธ๋ ์ง๋ ์๋ค. Java ๊ฐ์๋จธ์ ์ ์ฝํ๋ฆฐ ์ฝ๋๋ฅผ ์ปดํ์ผํด๋ ์ฝ์ ์๋ ์๊ณ ์ค์นผ๋ผ ์ฝ๋๋ฅผ ์ปดํ์ผํด๋ ์ฝ์ ์ ์๋ค. ๋จ, ๊ธฐ๋ณธ์ด Java๋ฅผ ์ํด์ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ Java ์์ค ์ฝ๋์ ์ปดํ์ผ๋ ๋ฐ์ดํธ์ฝ๋๋ ๋น๊ต์ ์ง๊ด์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง๋ง, ์ฝํ๋ฆฐ์ด๋ ์ค์นผ๋ผ์ ๊ฒฝ์ฐ Java์์ ํธํ์ฑ์ ๊ณ ๋ คํ๊ธด ํ์ด๋ ์๋์ ์ผ๋ก๋ ๋น์ง๊ด์ ์ด๋ฉฐ ํ์ฐ์ ์ผ๋ก Java๋ฅผ ๊ณต๋ถํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
.NET Framework์ ํจ๊ป ๊ฐ์๋จธ์ ์ธ์ด ์์ฅ์ ์ฌ์ค์ ์๋ถํ๊ณ ์๋ค.
2. ์ข ๋ฅ[ํธ์ง]
์ค๋ผํด์ด ์์ ํ ๋ ์ข
๋ฅ์ JVM์ผ๋ก ์ฌ ๋ง์ดํฌ๋ก์์คํ
์ฆ์์ ๊ฐ๋ฐ๋ HotSpot๊ณผ BEA ์์คํ
์์ ๊ฐ๋ฐ๋ JRockit, IBM J9์ ๊ธฐ๋ฐ์ผ๋ก ํ Eclipse OpenJ9์ด ์๋ค, ํด๋ฆฐ ๋ฃธ ๊ตฌํ์๋ Kafee์ IBM์ฌ์ IBM J9๊ฐ ์๋ค. ์๋์ฐ, ๋ฆฌ๋
์ค ๋ฑ์ ํ๊ฒฝ์์๋ ๋๋ถ๋ถ HotSpot์ด ์ฌ์ฉ๋์ง๋ง, IBM AIX๋ฅผ ์ด์์ฒด์ ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ IBM J9๊ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
๊ตฌ๊ธ์ ์๋๋ก์ด๋๋ Java๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋์์ง๋ง, ์๋๋ก์ด๋์ ์๋ ๋ฌ๋น ๊ฐ์ ๋จธ์ ์ Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ ํ ์คํํ์ง ๋ชปํ๋ฏ๋ก ์๋ฐํ๊ฒ ๋งํ๋ฉด JVM์ ์๋๋ค. ๋ค๋ง Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ ๋ฒ ๋ณํํด์ ๋ฌ๋น ์ฉ ์ฝ๋๋ก ๋ง๋ค๊ณ ๊ทธ๊ฑธ ์คํํ๋ค. ์ข ๋ฐ๋ณด๊ฐ๊ธด ํ์ง๋ง, JVM์ ํฌํจํ Java์ ์ฌ๋ฌ ๋ถ๋ถ์ ๊ฑธ๋ฆฐ ํนํ๋ฅผ ํผํ๊ธฐ ์ํด ๋ด๋์ ๊ผผ์. ๋ค๋ง ๊ฒฐ๊ตญ ์ฌ์ ์ธ์ํ ์ค๋ผํด์ด ์ด ๋ฌธ์ ๋ก ์์ก์ ๊ฑธ์๋ค. ์๋๋ก์ด๋๊ฐ ์ ๋๊ฐ๋ ๊ฑธ ๋ณธ ์ฌ์ ๋ ๋ฆฝ ํ์ฌ์์ ๋ ์ฌ์ฃผ๋ ์ฌ์ด ๋๊ณ ๋์ ๊ตฌ๊ธ์ด ๋ฒ์ด์ ๋ฐฐ๋ ๋ฌด์ง ์ํ ์ง๋ง ๊ณต๋์ด์ ์ ์ผ๋ก ์ฐธ๊ณ ์์๋ค๊ณ ํ๋ค. ๊ตฌ๊ธ์ด๋ ์ฌ์ ๊ณต๋์ด ํ์ฌ์ ๋ํ๊ฒฉ์ด์์ผ๋... ๋ฐ๋ฉด ์ค๋ผํด์ ๋ฌธํ์ ์ผ๋ก ๋ดค์ ๋ ์ ํต์ ์ธ ์๋ณต ํ์ฌ์ ๊ฐ๊น์์ ๊ทธ๋ด ๊ฑด ์๊ด ์์๋ ๋ชจ์. ๊ฒฐ๊ตญ ์๋ ๋ฌธ์ [2]๋ ํด๊ฒฐํ ๊ฒธ ๊ตฌ๊ธ์ ๋ฌ๋น ์ ํฌ๊ธฐํ๊ณ ์๋๋ก์ด๋ ๋ฐํ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
๋ง์ดํฌ๋ก์ํํธ์์๋ JVM์ ๋ด๋์ ์ ์ด ์์๋ค. Java Applet ์คํ์ ์ํด Internet Explorer 3๋ถํฐ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ 1997๋ ์ฌ์๊ฒ ๊ณ ์๋นํ๋๋ฐ, ์ด๋ MS๊ฐ Java 1.1 ํ์ค์ ๋ฌด์ํ ์ฑ ์์ ๋ค ์ ๋ง๋๋ก ๋ฏ์ด๊ณ ์ณค๊ธฐ ๋๋ฌธ์ด๋ค.[3] ๊ฒฐ๊ตญ 2001๋ MS๊ฐ ํจ์ํ๋ฉด์ ์์ฌ์ ์ ํ์์ MS-JVM์ ๋จ๊ณ์ ์ผ๋ก ์ ๊ฑฐํ๋๋ก ํฉ์ํ์์ผ๋ฉฐ, 2003๋ ๋ฐฐํฌ๋ Windows XP ์๋น์ค ํฉ 1a๋ถํฐ๋ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅ๋์ง ์๋๋ค. ๋ณด์ ์ ๋ฐ์ดํธ๋ 2007๋ ๊น์ง ์ง์๋์๋ค.
๊ตฌ๊ธ์ ์๋๋ก์ด๋๋ Java๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋์์ง๋ง, ์๋๋ก์ด๋์ ์๋ ๋ฌ๋น ๊ฐ์ ๋จธ์ ์ Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ ํ ์คํํ์ง ๋ชปํ๋ฏ๋ก ์๋ฐํ๊ฒ ๋งํ๋ฉด JVM์ ์๋๋ค. ๋ค๋ง Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ ๋ฒ ๋ณํํด์ ๋ฌ๋น ์ฉ ์ฝ๋๋ก ๋ง๋ค๊ณ ๊ทธ๊ฑธ ์คํํ๋ค. ์ข ๋ฐ๋ณด๊ฐ๊ธด ํ์ง๋ง, JVM์ ํฌํจํ Java์ ์ฌ๋ฌ ๋ถ๋ถ์ ๊ฑธ๋ฆฐ ํนํ๋ฅผ ํผํ๊ธฐ ์ํด ๋ด๋์ ๊ผผ์. ๋ค๋ง ๊ฒฐ๊ตญ ์ฌ์ ์ธ์ํ ์ค๋ผํด์ด ์ด ๋ฌธ์ ๋ก ์์ก์ ๊ฑธ์๋ค. ์๋๋ก์ด๋๊ฐ ์ ๋๊ฐ๋ ๊ฑธ ๋ณธ ์ฌ์ ๋ ๋ฆฝ ํ์ฌ์์ ๋ ์ฌ์ฃผ๋ ์ฌ์ด ๋๊ณ ๋์ ๊ตฌ๊ธ์ด ๋ฒ์ด์ ๋ฐฐ๋ ๋ฌด์ง ์ํ ์ง๋ง ๊ณต๋์ด์ ์ ์ผ๋ก ์ฐธ๊ณ ์์๋ค๊ณ ํ๋ค. ๊ตฌ๊ธ์ด๋ ์ฌ์ ๊ณต๋์ด ํ์ฌ์ ๋ํ๊ฒฉ์ด์์ผ๋... ๋ฐ๋ฉด ์ค๋ผํด์ ๋ฌธํ์ ์ผ๋ก ๋ดค์ ๋ ์ ํต์ ์ธ ์๋ณต ํ์ฌ์ ๊ฐ๊น์์ ๊ทธ๋ด ๊ฑด ์๊ด ์์๋ ๋ชจ์. ๊ฒฐ๊ตญ ์๋ ๋ฌธ์ [2]๋ ํด๊ฒฐํ ๊ฒธ ๊ตฌ๊ธ์ ๋ฌ๋น ์ ํฌ๊ธฐํ๊ณ ์๋๋ก์ด๋ ๋ฐํ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
๋ง์ดํฌ๋ก์ํํธ์์๋ JVM์ ๋ด๋์ ์ ์ด ์์๋ค. Java Applet ์คํ์ ์ํด Internet Explorer 3๋ถํฐ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ 1997๋ ์ฌ์๊ฒ ๊ณ ์๋นํ๋๋ฐ, ์ด๋ MS๊ฐ Java 1.1 ํ์ค์ ๋ฌด์ํ ์ฑ ์์ ๋ค ์ ๋ง๋๋ก ๋ฏ์ด๊ณ ์ณค๊ธฐ ๋๋ฌธ์ด๋ค.[3] ๊ฒฐ๊ตญ 2001๋ MS๊ฐ ํจ์ํ๋ฉด์ ์์ฌ์ ์ ํ์์ MS-JVM์ ๋จ๊ณ์ ์ผ๋ก ์ ๊ฑฐํ๋๋ก ํฉ์ํ์์ผ๋ฉฐ, 2003๋ ๋ฐฐํฌ๋ Windows XP ์๋น์ค ํฉ 1a๋ถํฐ๋ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅ๋์ง ์๋๋ค. ๋ณด์ ์ ๋ฐ์ดํธ๋ 2007๋ ๊น์ง ์ง์๋์๋ค.
3. ๊ตฌ์กฐ[ํธ์ง]
4. ์ฑ๋ฅ[ํธ์ง]
๋ฐ์ดํธ์ฝ๋๋ ์ค์ ์ ๊ธฐ๊ณ์์ ์ง์ ์คํ๋๋ ๊ฒ์ด ์๋๋ผ JVM์ ํด์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์คํ๋๋ฏ๋ก Java๋ก ๊ฐ๋ฐ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ค์ดํฐ๋ธ ์ธ์ด[4]๋ณด๋ค ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค. ๊ณผ๊ฑฐ์๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ํ๊ฒ ์ธํฐํ๋ฆฌํธํ์ฌ ๋งค์ฐ ๋๋ ธ์ผ๋ ํ์ฌ๋ JIT ์ปดํ์ผ์ ๋์
๊ณผ ํ๋์จ์ด์ ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ์ด ๊ฐ์ ๋์๋ค.
JVM์ ์ถ์์ ์ธ ๋จธ์ ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ์ ๊ฐ์ ๋จธ์ ์ฐจ์์์ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฏ๋ก ๋ฐํ์์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค. ๋งค์ฐ ๊ทน๋จ์ ์ด๊ณ ํน์ํ ์ํฉ์ ๊ฐ์ ํ๋ฉด ๊ทนํ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ํด์๋ ๋ค์ดํฐ๋ธ ์ธ์ด๋ณด๋ค ๋ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ฌ ์ฃผ๊ธฐ๋ ํ๋ค. ํ์ง๋ง JIT ์ปดํ์ผ ์๊ฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํ ์๊ฐ ๋ฑ์ด ํ์ํ๋ฏ๋ก ๊ทผ๋ณธ์ ์ธ ํ๊ณ๊ฐ ์๋ค.[5]
JVM์ ์ถ์์ ์ธ ๋จธ์ ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ์ ๊ฐ์ ๋จธ์ ์ฐจ์์์ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฏ๋ก ๋ฐํ์์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค. ๋งค์ฐ ๊ทน๋จ์ ์ด๊ณ ํน์ํ ์ํฉ์ ๊ฐ์ ํ๋ฉด ๊ทนํ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ํด์๋ ๋ค์ดํฐ๋ธ ์ธ์ด๋ณด๋ค ๋ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ฌ ์ฃผ๊ธฐ๋ ํ๋ค. ํ์ง๋ง JIT ์ปดํ์ผ ์๊ฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํ ์๊ฐ ๋ฑ์ด ํ์ํ๋ฏ๋ก ๊ทผ๋ณธ์ ์ธ ํ๊ณ๊ฐ ์๋ค.[5]
4.1. ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)[ํธ์ง]
JVM์ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ํํ์ฌ ํ ๋น๋์๋ค๊ฐ ๋ ์ด์ ์ฐ์ด์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ๋ค. Full GC(์ ์ฒด ๊ฐ๋น์ง ์ปฌ๋ ์
)์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์ํ์ ์ผ์ ์ ์ง(Stop-the-World) ์์ผ๋๊ณ ํ ์๋ฐ์ ์๋๋ฐ, ๋ ์ด๊ฒ Java ํ๋ก๊ทธ๋จ์ด ๊ท์น์ ์ด์ง๋ ์๊ณ ์ด์ ๋ ์์ด ๋๋ ๋๊ธด๋ค๋ ์
๋ช
์ ๋จ์น๋๋ฐ ๊ณตํํ๋ค. ๋๊ท๋ชจ ์๋น์ค์ ์ด์ ์ Full GC๋ ์ฑ๋ฅ์ ์๋นํ ์ฌ๊ฐํ ์ํฅ์ ์ฃผ๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ์ GC ํ๋์ด ํ์๋ก ๋ค์ด๊ฐ๋ค. ์ต์ ๋ฒ์ (11~12 ์ดํ)์ JVM์๋ ํ์ ํฌ๊ธฐ์ ์๊ด์์ด(์๋ฐฑ MB ~ ์์ญ TB๊น์ง) ์ผ์์ ์ง ์๊ฐ์ด 10ms ์ดํ์ธ GC ์๊ณ ๋ฆฌ์ฆ๋ค(ZGC, Shenandoah)์ด ํ์ฌ๋์ด ์๋ค.
JVM ๋ชจ๋ํฐ๋ง ํด๋ผ์ด์ธํธ VisualVM[6]๊ณผ ๊ทธ ํ๋ฌ๊ทธ์ธ Visual GC๋ฅผ ์ค์นํ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์๋ค. # VisualVM ๋๋ ํ ๋ฆฌ์ etc ํด๋์ ๊ฐ๋ฉด visualvm.conf๋ผ๋ ํ์ผ์ด ์๋๋ฐ, ์ด ํ์ผ์ ์ ํ ์๋ visualvm_jdkhome ํญ๋ชฉ์ ์ฃผ์(#)์ ์ ๊ฑฐํ ํ JDK ํด๋์ ๊ฒฝ๋ก๋ฅผ ์ ์ผ๋ฉด ์์ ์ด ์ํ๋ ๋ฒ์ ์ JDK๋ก ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๋ค.
GC์ ์์ธํ ๋์ ๊ณผ์ ์ ๋ํด์๋ ์ด ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ ๊ฒ.
JVM ๋ชจ๋ํฐ๋ง ํด๋ผ์ด์ธํธ VisualVM[6]๊ณผ ๊ทธ ํ๋ฌ๊ทธ์ธ Visual GC๋ฅผ ์ค์นํ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์๋ค. # VisualVM ๋๋ ํ ๋ฆฌ์ etc ํด๋์ ๊ฐ๋ฉด visualvm.conf๋ผ๋ ํ์ผ์ด ์๋๋ฐ, ์ด ํ์ผ์ ์ ํ ์๋ visualvm_jdkhome ํญ๋ชฉ์ ์ฃผ์(#)์ ์ ๊ฑฐํ ํ JDK ํด๋์ ๊ฒฝ๋ก๋ฅผ ์ ์ผ๋ฉด ์์ ์ด ์ํ๋ ๋ฒ์ ์ JDK๋ก ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๋ค.
GC์ ์์ธํ ๋์ ๊ณผ์ ์ ๋ํด์๋ ์ด ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ ๊ฒ.
5. JVM ๊ธฐ๋ฐ ์ธ์ด[ํธ์ง]
์ด๋ฆ์ Java๊ฐ ๋ค์ด ์์ง๋ง JVM์ ์์ ์ด ๋ฌด์จ ์ธ์ด๋ฅผ ์คํํ๋์ง ์ ํ ๊ด์ฌ์ด ์๋ค. ํ์๋ง ์ฌ๋ฐ๋ก ์ง์ผ์ ๋ง๋ค์ด์ก๋ค๋ฉด Java๊ฐ ์๋๋ผ Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ง๋๋ ๋ค๋ฅธ ์ธ์ด๋ ์ผ๋ง๋ ์ง ์คํํ ์ ์๋ ๊ฒ.
JVM์ ํ๋ซํผ ๋ ๋ฆฝ์ฑ๊ณผ ์ค์ํ ์ฑ๋ฅ, ๊ทธ๋ฆฌ๊ณ Java ์ฝ๋์์ ์์ฌ์ด ์ํธ์์ฉ ๋ฑ์ ํน์ง์ผ๋ก ์ธํ์ฌ JVM์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Java ์ด์ธ์ ์ธ์ด๋ค๋ ๋ง์ด ๊ฐ๋ฐ๋์ด ์๋ค.
JVM์ ํ๋ซํผ ๋ ๋ฆฝ์ฑ๊ณผ ์ค์ํ ์ฑ๋ฅ, ๊ทธ๋ฆฌ๊ณ Java ์ฝ๋์์ ์์ฌ์ด ์ํธ์์ฉ ๋ฑ์ ํน์ง์ผ๋ก ์ธํ์ฌ JVM์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Java ์ด์ธ์ ์ธ์ด๋ค๋ ๋ง์ด ๊ฐ๋ฐ๋์ด ์๋ค.
5.1. ๊ธฐ์กด ์ธ์ด์ JVM ๊ตฌํ[ํธ์ง]
5.2. JVM ๊ธฐ๋ฐ์ ์ธ์ด[ํธ์ง]
5.3. ๊ด๋ จ ๋ฌธ์[ํธ์ง]
6. ๊ด๋ จ ๋ฌธ์[ํธ์ง]
[3] MS์ ์ด๋ฌํ ํ๋ณด์๋ ์๋์ ์ธ ๋นํธํ์ฑ์ ํตํด ๊ฒฐ๊ตญ Java์ ๋ฐ๋ชฉ์ ์ก๊ฒ ํ๋ ค๋ ๊ผผ์๊ฐ ์์๋ค๋ ์ง์ ์ด ๋ง์๋ค. ๋น์ทํ ์๋ก JavaScript๋ฅผ ๋ง๊ฐ์กฐํ JScript๊ฐ ์์ผ๋ฉฐ, ์ด ์ญ์ IE 9์์ ECMA ํ์ค์ ๋ฐ๋ฅด๋๋ก ๋ณ๊ฒฝ๋๋ฉด์ ๋ ๊ฑฐ์ ์ง์์ผ๋ก๋ง ๋จ๊ฒ ๋์๋ค.
[5] ์ด ๋ถ๋ถ์ด ๋งค์ฐ ์ค์ํด์ JVM์ด๋ .NET CLR ๋ฑ ๊ฐ์๋จธ์ ๊ธฐ๋ฐ์์ ๋ฒค์น๋งํฌ๋ฅผ ๋๋ฆด ๋๋ 1~5ํ ์ ๋ ์์
์ ํ ํ์ ์ธก์ ํ๋ค.