λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
개발 이야기/JAVA

Java - μžλ°” ν”„λ‘œκ·Έλž˜λ°

by 0_0πŸ–€ 2023. 6. 28.
λ°˜μ‘ν˜•

 

μ‹€ν–‰ κ³Όμ •

 

μžλ°” ν”„λ‘œκ·Έλž¨μ€ 일반 ν”„λ‘œκ·Έλž¨λ³΄λ‹€ μžλ°” 가상 λ¨Έμ‹ μ΄λΌλŠ” ν•œ 단계λ₯Ό 더 거쳐야 ν•˜λ―€λ‘œ μƒλŒ€μ μœΌλ‘œ μ‹€ν–‰ 속도가 λŠλ¦¬λ‹€λŠ” 단점을 가지고 μžˆλ‹€.

 

 

 

μžλ°” 컴파일러 (Java compiler)

μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ°”λ₯Ό 가지고 μž‘μ„±ν•œ μžλ°” μ†ŒμŠ€ μ½”λ“œλ₯Ό μžλ°” 가상 머신이 이해할 수 μžˆλŠ” μžλ°” λ°”μ΄νŠΈ μ½”λ“œ(0κ³Ό 1둜 이루어진 μ½”λ“œ)둜 λ³€ν™˜ν•œλ‹€. μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ°”λ₯Ό μ„€μΉ˜ν•˜λ©΄ javac.exe μ‹€ν–‰ 파일 ν˜•νƒœλ‘œ μ„€μΉ˜λœλ‹€.

 

- JIT컴파일(Just In Time) : μ‹€ν–‰ν™˜κ²½μ— λ§žλŠ” JVM을 μ„€μΉ˜ν•˜λ©΄ 운영체제 λ³„λ‘œ μ½”λ“œλ₯Ό 읽을 수 μžˆλ„λ‘ 컴파일 μ‹œμ μ— λ§žμΆ°μ„œ λ²ˆμ—­

 

 

 

μžλ°” λ°”μ΄νŠΈ μ½”λ“œ (Java bytecode)

μžλ°” 가상 머신이 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ λ³€ν™˜λœ μžλ°” μ†ŒμŠ€ μ½”λ“œλ₯Ό 의미.

μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λ˜λŠ” μ½”λ“œμ˜ λͺ…λ Ήμ–΄ 크기가 1λ°”μ΄νŠΈλΌ 뢙여진 λͺ…μΉ­μœΌλ‘œ μžλ°” λ°”μ΄νŠΈ μ½”λ“œμ˜ ν™•μž₯μžλŠ” .class이닀. μžλ°” λ°”μ΄νŠΈ μ½”λ“œλŠ” μžλ°” 가상 λ¨Έμ‹ λ§Œ μ„€μΉ˜λ˜μ–΄ 있으면 μ–΄λ–€ μš΄μ˜μ²΄μ œμ—μ„œλ„ μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€.

 

 

 

μžλ°” 가상 λ¨Έμ‹  (java Virtual Machine, JVM)

μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚€κΈ° μœ„ν•œ κ°€μƒμ˜ 기계.

μžλ°”λ‘œ μž‘μ„±λœ λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ μžλ°” 가상 λ¨Έμ‹ μ—μ„œλ§Œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ―€λ‘œ μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ μžλ°” 가상 머신이 μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

λ”°λΌμ„œ μ˜€λΌν΄μ€ λŒ€λΆ€λΆ„μ˜ μ£Όμš” 운영체제 뿐 μ•„λ‹ˆλΌ μ›Ή λΈŒλΌμš°μ €, 슀마트 폰, κ°€μ „κΈ°κΈ° λ“±μ—μ„œλ„ μžλ°” 가상 머신을 μ†μ‰½κ²Œ μ„€μΉ˜ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜κ³  μžˆλ‹€.

단, JVM은 μš΄μ˜μ²΄μ œμ— μ’…μ†μ μ΄λ―€λ‘œ 각 μš΄μ˜μ²΄μ œμ— λ§žλŠ” μžλ°” 가상 머신을 μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€.

 

 

 

μžλ°” 가상 λ¨Έμ‹  JVM ꡬ성

1. μžλ°” 인터프리터(Interpreter) : μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λœ μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό 읽고 해석

2. 클래슀 λ‘œλ”(class loader) : λ™μ μœΌλ‘œ 클래슀λ₯Ό λ‘œλ”©ν•΄μ£ΌλŠ” μ—­ν• 

3. JIT 컴파일러(Just-In-Time compiler) : 싀행쀑인 λŸ°νƒ€μž„μ— μ‹€μ œ 기계어(μ›μ‹œ μ‹œμŠ€ν…œ μ½”λ“œ)둜 λ³€ν™˜ν•΄μ£ΌλŠ” 컴파일러

    동적 λ²ˆμ—­(dynamic translation)이라고도 λΆˆλ¦¬λŠ” κΈ°λ²•μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 속도λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 개발.

4. 가비지 컬렉터(garbage collector) : 더이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ νšŒμˆ˜ν•΄ κ°œλ°œμžκ°€ λ”°λ‘œ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜μ§€ μ•Šμ•„λ„ 되게 함.

 

 

 

μžλ°” λŸ°νƒ€μž„ ν™˜κ²½ (Java Runtime Environment, JRE)

κ°œλ°œμžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ„œλΉ„μŠ€κ°„μ— μ™„λ²½ν•œ 데이터 연결을 ꡬ좕할 수 μžˆλ„λ‘ 지원.

- λŸ°νƒ€μž„(Runtime) : ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” μ‹œμ 

 

μ°Έκ³  - 2023.06.27 - [sw 개발 κ°œμš”] - 개발 ν™˜κ²½ ꡬ좕

 

 

 

 

λ°˜μ‘ν˜•