JVM Overview
Java๋ ์ ์ธ๊ณ์์ ๊ฐ์ฅ ํฐ ๊ธฐ์ ํ๋ซํผ ์ค ํ๋๋ก, ์ฝ 900๋ง์์ 1000๋ง ๋ช ์ ๊ฐ๋ฐ์๋ฅผ ๋ณด์ ํ๊ณ ์๋ ๊ฒ์ ์์ฌ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์ค๊ณ์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์์ ์ด ์ฌ์ฉํ๋ ํ๋ซํผ์ ์ ์์ค ๋ณต์ก์ฑ์ ๋ํด ์ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฑ๋ฅ์ ๊ด์ฌ์ด ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ๋ JVM ๊ธฐ์ ์คํ์ ๊ธฐ๋ณธ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. JVM ๊ธฐ์ ์ ์ดํดํ๋ฉด ๊ฐ๋ฐ์๋ ๋ ๋์ ์ํํธ์จ์ด๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๋ ๋ฐ ํ์ํ ์ด๋ก ์ ๋ฐฐ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
์ธํฐํ๋ฆฌํ
๊ณผ ํด๋์ค ๋ก๋ฉ
Java ๊ฐ์ ๋จธ์ ์ ์ ์ํ๋ ๋ช ์ธ์์ ๋ฐ๋ฅด๋ฉด, JVM์ ์คํ ๊ธฐ๋ฐ์ ์ธํฐํ๋ฆฌํฐ ๊ธฐ๊ณ์ ๋๋ค. ์ด๋ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด CPU์ ๊ฐ์ ๋ ์ง์คํฐ ๋์ , ๋ถ๋ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์คํ ์คํ์ ์ฌ์ฉํ๋ฉฐ, ๊ทธ ์คํ์ ์ต์์ ๊ฐ(๋๋ ๊ฐ๋ค)์ ์กฐ์ํ์ฌ ๊ณ์ฐ์ ์ํํจ์ ์๋ฏธํฉ๋๋ค.
JVM ์ธํฐํ๋ฆฌํฐ์ ๊ธฐ๋ณธ ๋์์ ํ๋ก๊ทธ๋จ์ ๊ฐ opcode๋ฅผ ๋ง์ง๋ง ๊ฒ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ํ๊ฐ ์คํ์ ์ฌ์ฉํ์ฌ ์ค๊ฐ ๊ฐ์ ์ ์ฅํ๋ "while ๋ฃจํ ๋ด์ ์ค์์น"๋ก ์๊ฐํ ์ ์์ต๋๋ค.
๋ฐ์ดํธ์ฝ๋ ์คํ
Java ์์ค ์ฝ๋๋ ์คํ ์ ์ ์๋นํ ์์ ๋ณํ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ข
์ข
๋ ํฐ ๋น๋ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ํธ์ถ๋๋ Java ์ปดํ์ผ๋ฌ javac
๋ฅผ ์ฌ์ฉํ ์ปดํ์ผ ๋จ๊ณ์
๋๋ค.
javac
์ ์ญํ ์ Java ์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํฌํจํ๋ .class
ํ์ผ๋ก ๋ณํํ๋ ๊ฒ์
๋๋ค.
์ด๋ Java ์์ค ์ฝ๋๋ฅผ ๋น๊ต์ ์ง์ ์ ์ผ๋ก ๋ฒ์ญํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค.
์ปดํ์ผ ์ค์ javac
๋ ๊ฑฐ์ ์ต์ ํ๋ฅผ ์ํํ์ง ์์ผ๋ฉฐ, ์์ฑ๋ ๋ฐ์ดํธ์ฝ๋๋ ํ์ค javap
๊ณผ ๊ฐ์ ๋์ค์ด์
๋ธ๋ฆฌ ๋๊ตฌ๋ก ๋ณผ ๋ ์ฌ์ ํ ์๋นํ ์ฝ๊ธฐ ์ฝ๊ณ Java ์ฝ๋๋ก ์ธ์ํ ์ ์์ต๋๋ค.
๋ฐ์ดํธ์ฝ๋๋ ํน์ ๊ธฐ๊ณ ์ํคํ ์ฒ์ ์ข ์๋์ง ์์ ์ค๊ฐ ํํ์ ๋๋ค. ๊ธฐ๊ณ ์ํคํ ์ฒ๋ก๋ถํฐ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํฌํฐ๋ธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด๋ ์ด๋ฏธ ๊ฐ๋ฐ๋(๋๋ ์ปดํ์ผ๋) ์ํํธ์จ์ด๊ฐ JVM์ด ์ง์ํ๋ ๋ชจ๋ ํ๋ซํผ์์ ์คํ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ํ Java ์ธ์ด๋ก๋ถํฐ์ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ JVM์ด ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ์์ ์ดํดํ๋ ๋ฐ ์ฒซ ๋ฒ์งธ ์ค์ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ตฌ์ฑ ์์ | ์ค๋ช |
๋งค์ง ๋๋ฒ(Magic number) | 0xCAFEBABE |
ํด๋์ค ํ์ผ ํ์ ๋ฒ์ | ํด๋์ค ํ์ผ์ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉ๋ ๋ง์ด๋ ๋ฐ ๋ฉ์ด์ ๋ฒ์ |
์์ ํ(Constant pool) | ํด๋์ค์ ์์ ํ |
์ก์ธ์ค ํ๋๊ทธ(Access flags) | ํด๋์ค๊ฐ ์ถ์์ ์ธ์ง, ์ ์ ์ธ์ง ๋ฑ์ ์์ ์๋ฅผ ๊ฒฐ์ |
์ด ํด๋์ค(This class) | ํ์ฌ ํด๋์ค์ ์ด๋ฆ |
์ํผ ํด๋์ค(Superclass) | ์ํผ ํด๋์ค์ ์ด๋ฆ |
์ธํฐํ์ด์ค(Interfaces) | ํด๋์ค์ ์ธํฐํ์ด์ค |
ํ๋(Fields) | ํด๋์ค์ ํ๋ |
๋ฉ์๋(Methods) | ํด๋์ค์ ๋ฉ์๋ |
์์ฑ(Attributes) | ํด๋์ค์ ์์ฑ (์: ์์ค ํ์ผ ์ด๋ฆ ๋ฑ) |
๋ชจ๋ ํด๋์ค ํ์ผ์ ๋งค์ง ๋๋ฒ 0xCAFEBABE
๋ก ์์ํ๋ฉฐ, ์ด๋ ํด๋์ค ํ์ผ ํ์์ ๋ํ ์ค์๋ฅผ ๋ํ๋ด๋ ์ฒซ ๋ฒ์งธ 4๋ฐ์ดํธ์
๋๋ค.
๋ค์ 4๋ฐ์ดํธ๋ ํด๋์ค ํ์ผ์ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉ๋ ๋ง์ด๋ ๋ฐ ๋ฉ์ด์ ๋ฒ์ ์ ๋ํ๋ด๋ฉฐ, ์ด๋ ๋์ JVM์ด ํด๋์ค ํ์ผ์ ์ปดํ์ผํ ๋ฒ์ ๋ณด๋ค ๋ฎ์ง ์์์ง ํ์ธํ๊ธฐ ์ํด ๊ฒ์ฌ๋ฉ๋๋ค.
๋ง์ด๋ ๋ฐ ๋ฉ์ด์ ๋ฒ์ ์ ํด๋์ค ๋ก๋์ ์ํด ํธํ์ฑ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ฒ์ฌ๋๋ฉฐ, ํธํ๋์ง ์์ ๊ฒฝ์ฐ ๋ฐํ์์ UnsupportedClassVersionError
๊ฐ ๋ฐ์ํ์ฌ ์คํ ์ค์ธ JVM์ด ์ปดํ์ผ๋ ํด๋์ค ํ์ผ๋ณด๋ค ๋ฎ์ ๋ฒ์ ์์ ๋ํ๋
๋๋ค.
Java์๋ .class
ํ์ผ์ ๊ฒ์ฌํ ์ ์๋ javap
๋ผ๋ ํด๋์ค ํ์ผ ๋์ค์ด์
๋ธ๋ฌ๊ฐ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
HelloWorld.class
ํ์ผ์ ๊ฐ์ ธ์ javap -c HelloWorld
๋ช
๋ น์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ถ๋ ฅ์ด ๋์ต๋๋ค
์ด ๋ ์ด์์์ HelloWorld.class
ํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ค๋ช
ํฉ๋๋ค.
๋ ์์ธํ ๋ด์ฉ์ javap
์ -v
์ต์
์ ์ถ๊ฐํ์ฌ ์ ์ฒด ํด๋์ค ํ์ผ ํค๋ ์ ๋ณด์ ์์ ํ ์ธ๋ถ ์ฌํญ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํด๋์ค ํ์ผ์๋ ๋ ๊ฐ์ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์์ง๋ง, ์์ค ํ์ผ์ ์ ๊ณต๋ ๋จ์ผ main()
๋ฉ์๋๋ง ํฌํจ๋์ด ์์ต๋๋ค.
์์ฑ์์์ ์คํ๋๋ ์ฒซ ๋ฒ์งธ ๋ช
๋ น์ด๋ aload_0
์ผ๋ก, ์ด๋ this
์ฐธ์กฐ๋ฅผ ์คํ์ ์ฒซ ๋ฒ์งธ ์์น์ ๋์ต๋๋ค.
๊ทธ ๋ค์ invokespecial
๋ช
๋ น์ด๊ฐ ํธ์ถ๋๋๋ฐ, ์ด๋ ์ํผ ์์ฑ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํน์ ํ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
๊ธฐ๋ณธ ์์ฑ์์์๋ ํธ์ถ์ด Object
์ ๊ธฐ๋ณธ ์์ฑ์์ ์ผ์นํฉ๋๋ค. ์ด๋ ์ค๋ฒ๋ผ์ด๋๊ฐ ์ ๊ณต๋์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
HotSpot ์๊ฐ
1999๋ 4์, Sun์ ์ฑ๋ฅ ์ธก๋ฉด์์ Java์ ๊ฐ์ฅ ํฐ ๋ณํ๋ฅผ ๊ฐ์ ธ์จ ๊ฒ ์ค ํ๋์ธ HotSpot ๊ฐ์ ๋จธ์ ์ ๋์ ํ์ต๋๋ค. HotSpot ๊ฐ์ ๋จธ์ ์ C ๋ฐ C++์ ๊ฐ์ ์ธ์ด์ ๋น๊ตํ ๋ ๋๋ฑํ๊ฑฐ๋ ๋ ๋์ ์ฑ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ๋ Java์ ํต์ฌ ๊ธฐ๋ฅ์ ๋๋ค
์ธ์ด ๋ฐ ํ๋ซํผ ์ค๊ณ๋ ์ข ์ข ์ํ๋ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ํธ๋ ์ด๋์คํ๋ฅผ ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, "์ ๋ก-์ค๋ฒํค๋ ์ถ์ํ(zero-cost abstractions)"์ ๊ฐ์ ์์ด๋์ด์ ์์กดํ๋ ์ธ์ด์, ๊ฐ๋ฐ์ ์์ฐ์ฑ๊ณผ "์ผ์ ๋๋ด๋ ๊ฒ(getting things done)"์ ์ฐ์ ์ํ๋ ์ธ์ด ๊ฐ์ ๋ถํ ์ด ์ด๋ฃจ์ด์ง๋๋ค.
โBjarne Stroustrup
์ ๋ก ์ค๋ฒํค๋ ์์น์ ์ด๋ก ์์ผ๋ก๋ ํ๋ฅญํ์ง๋ง, ์ด๋ ์ธ์ด ์ฌ์ฉ์ ๋ชจ๋๊ฐ ์ด์ ์ฒด์ ์ ์ปดํจํฐ๊ฐ ์ค์ ๋ก ์๋ํ๋ ์ ์์ค ํ์ค์ ๋ค๋ฃจ์ด์ผ ํจ์ ์๊ตฌํฉ๋๋ค. ์ด๋ ์์ ์ฑ๋ฅ์ ์ฃผ์ ๋ชฉํ๋ก ํ์ง ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ ํฐ ์ถ๊ฐ ์ธ์ง์ ๋ถ๋ด์ ์ค๋๋ค.
๋ฟ๋ง ์๋๋ผ, ์์ค ์ฝ๋๋ฅผ ๋น๋ ์์ ์ ํน์ ํ๋ซํผ์ ๊ธฐ๊ณ ์ฝ๋๋ก ์ปดํ์ผํด์ผ ํ๋ค๋ ์ ๋ ๋ฌธ์ ์ ๋๋คโ์ด๋ ๋ณดํต Ahead-of-Time (AOT) ์ปดํ์ผ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ์ธํฐํ๋ฆฌํฐ, ๊ฐ์ ๋จธ์ ๋ฐ ํฌํฐ๋ธ๋ฆฌํฐ ๋ ์ด์ด์ ๊ฐ์ ๋์ฒด ์คํ ๋ชจ๋ธ์ด ์ ๋ก ์ค๋ฒํค๋๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ "์ฌ์ฉํ๋ ๊ฒ์ ์๋ํ๋ ์์คํ ๋ณด๋ค ๋ ์ ์์ผ๋ก ์ฝ๋ฉํ ์ ์๋ค"๋ ๋ฌธ๊ตฌ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ดํฌํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์๋ํ๋ ์์คํ (์: ์ปดํ์ผ๋ฌ)๋ณด๋ค ๋ ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ๋ก ํฉ๋๋ค. ์ด๋ ์์ ํ ๊ฐ์ ์ด ์๋๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๋ ์ด์ ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ก ์ฝ๋ฉํ๊ณ ์ถ์ดํ์ง ์์ผ๋ฏ๋ก, ์๋ํ๋ ์์คํ (์: ์ปดํ์ผ๋ฌ)์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๋ช ํ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ด์ ์ด ์์ต๋๋ค.
Java๋ ์ ๋ก ์ค๋ฒํค๋ ์ถ์ํ ์ฒ ํ์ ๋ฐ๋ฅด์ง ์์์ต๋๋ค. ๋์ , HotSpot ๊ฐ์ ๋จธ์ ์ด ์ทจํ ์ ๊ทผ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์ ๋ฐํ์ ๋์์ ๋ถ์ํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ฅ ํฐ ์ด์ ์ ์ ๊ณตํ ์ ์๋ ๊ณณ์ ์ง๋ฅ์ ์ผ๋ก ์ต์ ํ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค. HotSpot VM์ ๋ชฉํ๋ JVM์ ๋ง์ถ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ์๊ณกํ๋ ๋์ , ๊ด์ฉ์ ์ธ Java๋ฅผ ์์ฑํ๊ณ ์ข์ ์ค๊ณ ์์น์ ๋ฐ๋ฅผ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
Just-in-Time ์ปดํ์ผ ์๊ฐ
Java ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํธ์ฝ๋ ์ธํฐํ๋ฆฌํฐ์์ ์คํ์ ์์ํ๋ฉฐ, ์ฌ๊ธฐ์ ๋ช ๋ น์ด๊ฐ ๊ฐ์ํ๋ ์คํ ๋จธ์ ์์ ์ํ๋ฉ๋๋ค. CPU๋ก๋ถํฐ์ ์ถ์ํ๋ ํด๋์ค ํ์ผ์ ํฌํฐ๋ธ๋ฆฌํฐ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ์ต๋ ์ฑ๋ฅ์ ์ป์ผ๋ ค๋ฉด ํ๋ก๊ทธ๋จ์ด CPU์์ ์ง์ ์คํ๋์ด์ผ ํ๋ฉฐ, CPU์ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ ํ์ฉํด์ผ ํฉ๋๋ค.
HotSpot์ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ๋จ์๋ฅผ ์ธํฐํ๋ฆฌํฐ๋ ๋ฐ์ดํธ์ฝ๋์์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผํฉ๋๋ค. HotSpot VM์์ ์ปดํ์ผ ๋จ์๋ ๋ฉ์๋์ ๋ฃจํ์ ๋๋ค. ์ด๋ Just-in-Time (JIT) ์ปดํ์ผ์ด๋ผ๊ณ ํฉ๋๋ค.
JIT ์ปดํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ธํฐํ๋ฆฌํฐ ๋ชจ๋์์ ์คํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ฐ์ฅ ์์ฃผ ์คํ๋๋ ์ฝ๋ ๋ถ๋ถ์ ๊ด์ฐฐํ์ฌ ์๋ํฉ๋๋ค. ์ด ๋ถ์ ๊ณผ์ ์์ ๋ ์ ๊ตํ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋ก๊ทธ๋จ์ ์ถ์ ์ ๋ณด๊ฐ ์บก์ฒ๋ฉ๋๋ค. ํน์ ๋ฉ์๋์ ์คํ์ด ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด, ํ๋กํ์ผ๋ฌ๋ ํด๋น ์ฝ๋ ์น์ ์ ์ปดํ์ผํ๊ณ ์ต์ ํํ๋ ค๊ณ ํฉ๋๋ค.
JIT ์ ๊ทผ ๋ฐฉ์์๋ ๋ง์ ์ด์ ์ด ์์ง๋ง, ์ฃผ์ ์ด์ ์ค ํ๋๋ ์ธํฐํ๋ฆฌํฐ ๋จ๊ณ์์ ์์ง๋ ์ถ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปดํ์ผ๋ฌ ์ต์ ํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ HotSpot์ด ๋ ์ ๋ณด์ ์ ๊ฐํ ์ต์ ํ๋ฅผ ์ํํ ์ ์๊ฒ ํฉ๋๋ค.
๋ฟ๋ง ์๋๋ผ, HotSpot์ ์๋ฐฑ ๋ ์ด์์ ๊ณตํ์ ๊ฐ๋ฐ ์๊ฐ์ด ์ถ์ ๋์์ผ๋ฉฐ, ๊ฑฐ์ ๋ชจ๋ ์๋ก์ด ๋ฆด๋ฆฌ์ค๋ง๋ค ์๋ก์ด ์ต์ ํ์ ์ด์ ์ด ์ถ๊ฐ๋๊ณ ์์ต๋๋ค. ์ด๋ HotSpot์ ์ต์ ๋ฆด๋ฆฌ์ค์์ ์คํ๋๋ ๋ชจ๋ Java ์ ํ๋ฆฌ์ผ์ด์ ์ด VM์ ์กด์ฌํ๋ ์๋ก์ด ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํ์ฉํ ์ ์์์ ์๋ฏธํ๋ฉฐ, ์ฌ์ปดํ์ผํ ํ์๋ ์์ต๋๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
C, C++, Objective-C์ ๊ฐ์ ์ธ์ด์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ๊ด๋ฆฌํ ์ฑ ์์ด ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด์ ์๋ช ์ ์ง์ ๊ด๋ฆฌํ๋ ์ด์ ์ ๋ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ๊ณผ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ญ์ ์ ์์ ์๋ช ์ ๋ฌถ์ ์ ์๋ค๋ ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ด์ ์ ํฐ ๋น์ฉ์ ์๋ฐํฉ๋๋คโ์ ํํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ฐํ ์ ์์ด์ผ ํ๋ฉฐ, ์ด๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ํฐ ๋ถ๋ด์ ์ค๋๋ค.
๋ถํํ๋, ์์ญ ๋ ๊ฐ์ ์ค๋ฌด ๊ฒฝํ์ ํตํด ๋ง์ ๊ฐ๋ฐ์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ๊ด์ฉ๊ตฌ์ ํจํด์ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ๋ค๋ ๊ฒ์ด ๋๋ฌ๋ฌ์ต๋๋ค. ์ดํ C++์ Objective-C์ ์ต์ ๋ฒ์ ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋งํธ ํฌ์ธํฐ ๊ด์ฉ๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ Java๊ฐ ๋ง๋ค์ด์ง ๋น์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ฅ์ ์ฃผ์ ์์ธ์ด์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์์ ๊ด๋ฆฌ์๋ค ์ฌ์ด์์ ๋น์ฆ๋์ค ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ๋์ ์ธ์ด ๊ธฐ๋ฅ์ ๋ค๋ฃจ๋ ๋ฐ ๋ง์ ์๊ฐ์ ์๋นํ๋ ๊ฒ์ ๋ํ ์ฐ๋ ค๋ฅผ ๋ถ๋ฌ์ผ์ผ์ผฐ์ต๋๋ค.
Java๋ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ผ๋ก ์๋ ค์ง ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ์ต๋๋ค. ๊ฐ๋จํ ๋งํด, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ JVM์ด ํ ๋น์ ์ํด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ๋ ๋ ์ด์ ํ์ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๊ณ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ํธ๋ฆฌ๊ฑฐ๋๋ ๋น๊ฒฐ์ ๋ก ์ ํ๋ก์ธ์ค์ ๋๋ค.
๊ทธ๋ฌ๋ GC์ ๋ํ ์ด์ผ๊ธฐ๋ ๊ทธ๋ฆฌ ๊ฐ๋จํ์ง ์์ผ๋ฉฐ, Java์ ์ญ์ฌ ๋์ ๋ค์ํ GC ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ๋๊ณ ์ ์ฉ๋์์ต๋๋ค. GC๋ ๋น์ฉ์ ์๋ฐํฉ๋๋ค: ์คํ๋ ๋ ์ข ์ข "Stop The World"๋ผ๋ ๋ป์ผ๋ก, GC๊ฐ ์งํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ผ์ ์ค์ง๋ฉ๋๋ค. ๋ณดํต ์ด๋ฌํ ์ผ์ ์ค์ง๋ ๋งค์ฐ ์๊ฒ ์ค๊ณ๋์์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ฅ์ด ๊ฐํด์ง์๋ก ์ฆ๊ฐํ ์ ์์ต๋๋ค.
์ค๋ ๋ฉ๊ณผ Java ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ
Java๊ฐ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์์ ๋์ ํ ์ฃผ์ ๋ฐ์ ์ค ํ๋๋ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๋ด์ฅ ์ง์์ด์์ต๋๋ค. Java ํ๋ซํผ์ ๊ฐ๋ฐ์๊ฐ ์๋ก์ด ์คํ ์ค๋ ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค.
๋ฟ๋ง ์๋๋ผ, Java ํ๊ฒฝ ์์ฒด๋ ๋ณธ์ง์ ์ผ๋ก ๋ฉํฐ์ค๋ ๋์ด๋ฉฐ, JVM๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋๋ถ๋ถ์ ์ฃผ์ JVM ๊ตฌํ์์, ๊ฐ Java ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ ์ ํํ ํ๋์ ์ ์ฉ ์ด์ ์ฒด์ ์ค๋ ๋์ ์ผ์นํฉ๋๋ค. ๋ชจ๋ Java ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ฅผ ์คํํ๊ธฐ ์ํด ์ค๋ ๋ ํ์ ๊ณต์ ํ๋ ๋์(๊ทธ๋ฆฐ ์ค๋ ๋๋ผ๊ณ ํจ)์ ํ์ฉํ ๋งํ ์ฑ๋ฅ ํ๋กํ์ผ์ ์ ๊ณตํ์ง ๋ชปํ๊ณ ๋ถํ์ํ ๋ณต์ก์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
JVM ๋ชจ๋ํฐ๋ง ๋ฐ ํด๋ง
JVM์ ์ฑ์ํ ์คํ ํ๋ซํผ์ผ๋ก, ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ์ธก, ๋ชจ๋ํฐ๋ง, ๊ฐ์์ฑ์ ์ํ ๋ค์ํ ๊ธฐ์ ๋์์ ์ ๊ณตํฉ๋๋ค. JVM ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ด๋ฌํ ์ ํ์ ๋๊ตฌ๋ค์ ์ฌ์ฉํ ์ ์๋ ์ฃผ์ ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
Java Management Extensions (JMX)
Java ์์ด์ ํธ
JVM Tool Interface (JVMTI)
Serviceability Agent (SA)
Last updated