Java & Kotlin

[Java] JVM에 λŒ€ν•˜μ—¬.

μžνλ‹ˆ 2022. 2. 15. 17:01

0. πŸšΆλ“€μ–΄κ°€λ©°

 μžλ°” ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€μ— λŒ€ν•΄ κΆκΈˆν•΄μ Έ 검색 쀑 JVMμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό λ°œκ²¬ν–ˆκ³  이에 λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄κ³ μž 글을 μ“°κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


1. πŸ’»JVMμ΄λž€ 무엇인가?

Write Once, Run Anywhere.

 

 JVM은 Java Virtual Machine의 μ•½μžλ‘œ μžλ°” 가상 머신이라고 λΆ€λ¦…λ‹ˆλ‹€. μžλ°”λŠ” ν•œλ²ˆ μž‘μ„±ν•˜λ©΄ ν”Œλž«νΌμ— ꡬ애받지 μ•Šκ³  μž‘λ™λ˜μ–΄μ•Ό ν•œλ‹€λŠ” ν‘œμ–΄λ₯Ό λ‚΄μ„Έμš°κ³  μžˆμŠ΅λ‹ˆλ‹€. JVM은 μžλ°”μ™€ 운영체제 μ‚¬μ΄μ—μ„œ μ€‘κ°œμž 역할을 ν•˜μ—¬ μš΄μ˜μ²΄μ œμ— 상관없이 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

 

 λ˜ν•œ JVM의 μ€‘μš”ν•œ μ—­ν•  쀑 ν•˜λ‚˜λŠ” λ©”λͺ¨λ¦¬ κ΄€λ¦¬μž…λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” λ©”λͺ¨λ¦¬ 관리λ₯Ό κ°€λΉ„지 컬렉터(GC)λ₯Ό μ‚¬μš©ν•΄ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이에 λŒ€ν•œ λ‚΄μš© μ—­μ‹œ λ‹€λ£° 것이 λ§Žμ•„ 관심이 μžˆμœΌμ‹œλ‹€λ©΄ μ•„λž˜ 글을 μ°Έκ³ ν•΄μ£Όμ„Έμš”!

 

[Java] Garbage Collection(GC)에 λŒ€ν•˜μ—¬.

0.πŸšΆλ“€μ–΄κ°€λ©°  μ΄μ „ κΈ€μ—μ„œ JVM의 μ€‘μš”ν•œ μ—­ν•  쀑 ν•˜λ‚˜κ°€ λ©”λͺ¨λ¦¬ 관리라고 μ†Œκ°œν–ˆμŠ΅λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” λ©”λͺ¨λ¦¬ 관리λ₯Ό 가비지 컬렉터(GC)λ₯Ό μ‚¬μš©ν•΄ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” GC에 λŒ€ν•΄

kjhoon0330.tistory.com

 

 

 κ°€μƒλ¨Έμ‹ μ€ μŠ€νƒ μŠ€νƒ 기반, λ ˆμ§€μŠ€ν„° 기반 두 가지 λ°©μ‹μœΌλ‘œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. μ΄λŠ” ν”Όμ—°μ‚°μžλ₯Ό μ €μž₯ν•˜κ³  λ‹€μ‹œ κ°€μ Έμ˜€λŠ” λ©”μ»€λ‹ˆμ¦˜ μ°¨μ΄μΈλ°μš”. JVM은 μŠ€νƒ 기반으둜 λ™μž‘ν•©λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ²Œ μŠ€νƒ κΈ°λ°˜μ΄λž€ 무엇인지에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 μœ„ κ·Έλ¦Όκ³Ό 같이 μŠ€νƒ 기반 가상 머신은 ν”Όμ—°μ‚°μžλ₯Ό μŠ€νƒμ—μ„œ κ΄€λ¦¬ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€. μŠ€νƒμ—μ„œ POPκ³Ό PUSH만 해도 ν”Όμ—°μ‚°μžλ“€μ„ μ°Ύκ³  μ €μž₯ν•  수 있기 λ•Œλ¬Έμ— λ”°λ‘œ ν”Όμ—°μ‚°μžμ˜ λ©”λͺ¨λ¦¬λ₯Ό κΈ°μ–΅ν•  ν•„μš”κ°€ μ—†λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.


2. πŸ“šμžλ°” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •

μš°μ„  μš°λ¦¬κ°€ μž‘μ„±ν•œ. java 파일이 κΈ°κ³„μ–΄λ‘œ λ³€κ²½λ˜μ–΄ 싀행될 λ•ŒκΉŒμ§€μ˜ 과정을 κ°„λ‹¨νžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 μœ„ 그림은 .java 파일이 컴파일러λ₯Ό 톡해 .classλΌλŠ” λ°”μ΄νŠΈμ½”λ“œλ‘œ λ³€ν™˜λ˜κ³  JVM에 μ˜ν•΄ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λ˜μ–΄ μ‹€ν–‰λ˜λŠ” 과정을 κ°„λž΅ν•˜κ²Œ 보여주고 μžˆμŠ΅λ‹ˆλ‹€. 이제 쑰금 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

 μ΄ 그림이 μ•žμ„œ λ³Έ 그림보닀 쑰금 더 μ‹€ν–‰ 과정을 μžμ„Ένžˆ ν‘œν˜„ν•œ κ·Έλ¦Όμž…λ‹ˆλ‹€. λ³΅μž‘ν•΄ λ³΄μ΄μ§€λ§Œ μžλ°” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 과정을 μ°¨κ·Όμ°¨κ·Ό μ‚΄νŽ΄λ³΄κ³  κ·Έ ν›„ 각 ꡬ성 μš”μ†Œκ°€ μ–΄λ–€ κΈ°λŠ₯을 ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

 

1) μžλ°” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •

1. μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄ JVM은 OSλ‘œλΆ€ν„° ν”„λ‘œκ·Έλž¨μ΄ ν•„μš”λ‘œ ν•˜λŠ” λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›μŠ΅λ‹ˆλ‹€. JVM은 이 λ©”λͺ¨λ¦¬λ₯Ό μš©λ„μ— 따라 μ—¬λŸ¬ μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΄€λ¦¬ν•©λ‹ˆλ‹€. (뒀에 μ„œμˆ ν•  Runtime Data Area)

 

2. μžλ°” 컴파일러(javac)κ°€ μžλ°” μ†ŒμŠ€μ½”λ“œ(.java)λ₯Ό 읽어 λ“€μ—¬ μžλ°” λ°”μ΄νŠΈμ½”λ“œ(.class)둜 λ³€ν™˜μ‹œν‚΅λ‹ˆλ‹€. κ·Έλ¦Ό μ™Όμͺ½ 상단 λΆ€μ˜ μž‘μ—…μ΄ λ˜κ² μŠ΅λ‹ˆλ‹€.

 

# μžλ°” λ°”μ΄νŠΈμ½”λ“œλž€?

  • JVM이 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ λ³€ν™˜λœ μžλ°” μ†ŒμŠ€ μ½”λ“œμž…λ‹ˆλ‹€.
  • μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λ˜λŠ” μ½”λ“œμ˜ λͺ…λ Ήμ–΄ 크기가 1λ°”μ΄νŠΈλΌμ„œ μžλ°” λ°”μ΄νŠΈμ½”λ“œλΌκ³  λΆˆλ¦½λ‹ˆλ‹€.
  • μžλ°” λ°”μ΄νŠΈμ½”λ“œλŠ” JVM만 μ„€μΉ˜λ˜μ–΄ 있으면, μ–΄λ–€ μš΄μ˜μ²΄μ œμ—μ„œλΌλ„ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.

3. Class Loaderλ₯Ό 톡해 class νŒŒμΌλ“€μ„ JVM으둜 λ‘œλ”©ν•©λ‹ˆλ‹€.

4. λ‘œλ”©λœ classνŒŒμΌλ“€μ€ Execution engine을 톡해 ν•΄μ„λ©λ‹ˆλ‹€.
5. ν•΄μ„λœ λ°”μ΄νŠΈμ½”λ“œλŠ” Runtime Data Areas 에 λ°°μΉ˜λ˜μ–΄ μ‹€μ§ˆμ μΈ μˆ˜ν–‰μ΄ μ΄λ£¨μ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ μ‹€ν–‰κ³Όμ • μ†μ—μ„œ JVM은 ν•„μš”μ— 따라 Thread Synchronizationκ³Ό GC같은 κ΄€λ¦¬μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

3. πŸ“–JVM의 ꡬ성 μš”μ†Œ

1) Class Loader (클래슀 λ‘œλ”)

 JVMλ‚΄λ‘œ 클래슀(.class파일)λ₯Ό λ‘œλ“œν•˜κ³ , 링크λ₯Ό 톡해 λ°°μΉ˜ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€. jar파일 λ‚΄ μ €μž₯된 ν΄λž˜μŠ€λ“€μ„ JVMμœ„μ— νƒ‘μž¬ν•˜κ³  μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν΄λž˜μŠ€λ“€μ€ λ©”λͺ¨λ¦¬μ—μ„œ μ‚­μ œν•©λ‹ˆλ‹€.

 

 μžλ°”λŠ” λŸ°νƒ€μž„μ— 클래슀λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. 즉, 클래슀λ₯Ό 처음으둜 μ°Έμ‘°ν•  λ•Œ ν•΄λ‹Ή 클래슀λ₯Ό λ‘œλ“œν•˜κ³  λ§ν¬ν•˜λŠ” 것이고 κ·Έ 역할을 클래슀 λ‘œλ”κ°€ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

2) Execution Engine (μ‹€ν–‰ 엔진)

 ν΄λž˜μŠ€λ₯Ό μ‹€ν–‰μ‹œν‚€λŠ” 역할을 ν•©λ‹ˆλ‹€. 클래슀 λ‘œλ”κ°€ JVMλ‚΄μ˜ λŸ°νƒ€μž„ 데이터 μ˜μ—­(Runtime Data Area)에 λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ°°μΉ˜μ‹œν‚€κ³ , 이것은 μ‹€ν–‰ 엔진에 μ˜ν•΄ μ‹€ν–‰λ©λ‹ˆλ‹€.

 

 μžλ°” λ°”μ΄νŠΈμ½”λ“œλŠ” 기계가 λ°”λ‘œ μˆ˜ν–‰ν•  수 μžˆλŠ” μ–Έμ–΄κ°€ μ•„λ‹ˆκ³  비ꡐ적 인간이 보기 νŽΈν•œ ν˜•νƒœλ‘œ 기술된 κ²ƒμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ μ‹€ν–‰ 엔진은 이와 같은 λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€μ œ JVMλ‚΄λΆ€μ—μ„œ 기계가 μ‹€ν–‰ν•  수 μžˆλŠ” ν˜•νƒœλ‘œ λ³€κ²½ν•œλ‹€.

 

 μ΄ λ•Œ μ•„λž˜ 두 가지 방식을 같이 μ‚¬μš©ν•©λ‹ˆλ‹€.

(1) Interpreter (인터프리터)

  μ‹€ν–‰ 엔진은 μžλ°” λ°”μ΄νŠΈμ½”λ“œλ₯Ό λͺ…λ Ήμ–΄ λ‹¨μœ„λ‘œ μ½μ–΄μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 방식은 인터프리터 μ–Έμ–΄μ˜ 단점인 느린 μˆ˜ν–‰ 속도λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

 

 μ΄ 뢀뢄을 보면 μžλ°”κ°€ 컴파일 μ–Έμ–΄μ΄μž 인터프리터 언어이닀 λΌλŠ” 말을 이해할 수 있게 λ©λ‹ˆλ‹€.

(2) JIT(Just In Time)

  느린 속도λ₯Ό 가진 인터프리터 λ°©μ‹μ˜ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λ„μž…λœ 것이 λ°”λ‘œ JIT μ»΄νŒŒμΌλŸ¬μž…λ‹ˆλ‹€. 인터프리터 λ°©μ‹μœΌλ‘œ μ‹€ν–‰ν•˜λ‹€ μ μ ˆν•œ μ‹œμ μ— λ°”μ΄νŠΈμ½”λ“œ 전체λ₯Ό μ»΄νŒŒμΌν•˜μ—¬ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€. 이후 ν•΄λ‹Ή μ½”λ“œλŠ” 더이상 μΈν„°ν”„λ¦¬νŒ… ν•˜μ§€ μ•Šκ³  λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ 직접 μ‹€ν–‰ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ³€κ²½λœ λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” μΊμ‹œμ— λ³΄κ΄€ν•˜κΈ° λ•Œλ¬Έμ— ν•œ 번 컴파일된 μ½”λ“œλŠ” λΉ λ₯΄κ²Œ μˆ˜ν–‰λ©λ‹ˆλ‹€. 

 

 JIT μ»΄νŒŒμΌλŸ¬κ°€ 컴파일 ν•˜λŠ” 과정은 λΉ„μš©μ΄ λ°œμƒν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. λ”°λΌμ„œ JVM은 λͺ¨λ“  μ½”λ“œλ₯Ό JIT 컴파일러 λ°©μ‹μœΌλ‘œ μ‹€ν–‰ν•˜μ§„ μ•Šκ³ , 인터프리터 방식을 μ‚¬μš©ν•˜λ‹€κ°€ μΌμ •ν•œ κΈ°μ€€(ν•΄λ‹Ή λ©”μ„œλ“œκ°€ μ–Όλ§ˆλ‚˜ 자주 μˆ˜ν–‰λ˜λŠ”μ§€ λ“±)을 λ„˜κΈΈ λ•Œλ§Œ μ»΄νŒŒμΌμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

3) Runtime Data Area

Runtime Data AreaλŠ” JVM이 ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ OSμ—κ²Œ 할당받은 λ©”λͺ¨λ¦¬ κ³΅κ°„μž…λ‹ˆλ‹€.

 

μ•„λž˜ 그림을 μ‚΄νŽ΄λ³΄κ³  ν•˜λ‚˜ν•˜λ‚˜ μ•Œμ•„λ΄…μ‹œλ‹€.

1) Method Area (Static Area)

 Method AreaλŠ” λͺ¨λ“  μŠ€λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μž…λ‹ˆλ‹€. μ΄κ³³μ—λŠ” 클래슀 정보λ₯Ό 처음 λ©”λͺ¨λ¦¬ 곡간에 올릴 λ•Œ μ΄ˆκΈ°ν™”λ˜λŠ” λŒ€μƒμ„ μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ κ³΅κ°„μž…λ‹ˆλ‹€. λŒ€ν‘œμ μœΌλ‘œ 클래슀, μΈν„°νŽ˜μ΄μŠ€, λ©”μ„œλ“œ,  ν•„λ“œ, Static λ³€μˆ˜ λ“±μ˜ λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ³΄κ΄€ν•©λ‹ˆλ‹€. 

2) Heap Area

 κ°μ²΄λ₯Ό μ €μž₯ν•˜λŠ” 가상 λ©”λͺ¨λ¦¬ κ³΅κ°„μž…λ‹ˆλ‹€. new μ—°μ‚°μžλ‘œ μƒμ„±λœ κ°μ²΄λ‚˜ 배열을 μ €μž₯ν•˜κ²Œ 되죠. Method Area에 μžˆλŠ” 클래슀 정보λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό λ§Œλ“€κ²Œ 되면 Heap Area에 생성이 λ©λ‹ˆλ‹€.

 

 νž™ μ˜μ—­μ€ GC와도 λ°€μ ‘ν•œ 관계가 μžˆλŠ”λ° μ΄λŠ” λ‹€μŒ κΈ€μ—μ„œ μžμ„Ένžˆ λ‹€λ€„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3) Stack Area

 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •μ—μ„œ μž„μ‹œλ‘œ ν• λ‹Ήλ˜μ—ˆλ‹€κ°€ λ©”μ†Œλ“œλ₯Ό λΉ μ Έλ‚˜κ°€λ©΄ λ°”λ‘œ μ†Œλ©Έλ˜λŠ” νŠΉμ„±μ˜ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ μ˜μ—­μž…λ‹ˆλ‹€. 각쒅 ν˜•νƒœμ˜ λ³€μˆ˜λ‚˜ μž„μ‹œ 데이터 등을 μ €μž₯ν•©λ‹ˆλ‹€. λ©”μ„œλ“œ 호좜 μ‹œ 각각의 μŠ€νƒ ν”„λ ˆμž„μ΄ 되고 λ©”μ„œλ“œ μˆ˜ν–‰μ΄ λλ‚˜λ©΄ ν”„λ ˆμž„ λ³„λ‘œ μ‚­μ œλ₯Ό ν•˜κ²Œ λ©λ‹ˆλ‹€. ν˜ΈμΆœν•œ λ©”μ„œλ“œμ— 맀개 λ³€μˆ˜, 지역 λ³€μˆ˜, 리턴 κ°’ 등을 μž„μ‹œ μ €μž₯ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

4) PC Register

 Threadκ°€ μ‹œμž‘λ  λ•Œ μƒμ„±λ˜λŠ” κ³΅κ°„μœΌλ‘œ μŠ€λ ˆλ“œλ§ˆλ‹€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•©λ‹ˆλ‹€. Threadκ°€ μ–΄λ–€ 뢀뢄에 μžˆλŠ” λͺ…령을 μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ 기둝을 ν•˜λŠ” λΆ€λΆ„μœΌλ‘œ ν˜„μž¬ μˆ˜ν–‰ 쀑인 JVM λͺ…λ Ήμ˜ μ£Όμ†Œλ₯Ό κ°–μŠ΅λ‹ˆλ‹€.

5) Native Method stack

  μžλ°” ν”„λ‘œκ·Έλž¨μ΄ μ»΄νŒŒμΌλ˜μ–΄ μƒμ„±λ˜λŠ” λ°”μ΄νŠΈμ½”λ“œκ°€ μ•„λ‹Œ μ‹€μ œ μˆ˜ν–‰ν•  수 μžˆλŠ” κΈ°κ³„μ–΄λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

4. πŸ’¨λ‚˜κ°€λ©°

 μ΄λ²ˆ κΈ€μ—μ„œλŠ” μžλ°”ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” κ³Όμ •κ³Ό JVM에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

 

이번 주제의 λ‚΄μš©μ΄ 쉽진 μ•Šμ•˜μ§€λ§Œ μžλ°” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ ν›‘μ–΄λ³Ό 수 μžˆμ–΄μ„œ 도움이 많이 λ˜μ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

 

클래슀 λ‘œλ”λ‚˜ Runtime Data Area의 경우 μžλ°”λ₯Ό λ°°μš°λŠ”λ° κΉŠμ€ 이해λ₯Ό 쀄 수 μžˆμ„ 것 κ°™μ•„μ„œ 이에 λŒ€ν•΄ κΈ°νšŒκ°€ 되면 λ‹€μ‹œ ν•œλ²ˆ 글을 μž‘μ„±ν•΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.


Reference)

 

#μžλ°”κ°€μƒλ¨Έμ‹ , JVM(Java Virtual Machine)μ΄λž€ 무엇인가?

#JVMμ΄λž€? JVMμ΄λž€ JAVA Virtual Machine, μžλ°” 가상 λ¨Έμ‹ μ˜ μ•½μžλ₯Ό λ”°μ„œ 쀄여 λΆ€λ₯΄λŠ” μš©μ–΄μ΄λ‹€ (κ°€μƒλ¨Έμ‹ μ΄λž€ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ 물리적 λ¨Έμ‹ κ³Ό μœ μ‚¬ν•œ 머신을 μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬ν˜„ν•œ 것이닀.) JV

asfirstalways.tistory.com

 

[JAVA] JVMκ³Ό μžλ°” μ½”λ“œμ˜ λ™μž‘

1. JVMμ΄λž€ 무엇인가? JVM(JAVA Virtual Machine)μ€μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 클래슀 λ‘œλ”λ₯Ό 톡해 읽어 λ“€μ—¬ μžλ°” API와 ν•¨κ»˜ 싀행해주도둝 ν•˜λŠ” 가상 λ¨Έμ‹ μž…λ‹ˆλ‹€. JVM은 JAVA와 OS μ‚¬μ΄μ—μ„œ μ€‘κ°œμž 역할을 ν•˜λŠ”λ°

studyandwrite.tistory.com

 

JVM λ©”λͺ¨λ¦¬ κ΅¬μ‘°λž€? (JAVA)

μ•ˆλ…•ν•˜μ„Έμš”? μ½”λ”© μ€‘λ…μž…λ‹ˆλ‹€. μ˜€λŠ˜μ€ JVM λ©”λͺ¨λ¦¬ ꡬ쑰에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. JVMμ΄λž€? JVM λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ„€λͺ…ν•˜κΈ° 전에 JVM이 무엇인지 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. JVM은 Java Virtual Machine의 μ•½μžλ‘œ, μžλ°” 가상

steady-coding.tistory.com

 

 

 

λ°˜μ‘ν˜•