Java programming

μžλ°” λ©”λͺ¨λ¦¬ λͺ¨λΈ - JVM λŸ°νƒ€μž„ 데이터 μ˜μ—­ (Runtime Data Area)

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 3. 11.

κ°œμš”

μžλ°”λŠ” ν”Œλž«νΌ 독립적인 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œμ„œ, JVM(Java Virtual Machine)을 톡해 λ‹€μ–‘ν•œ μš΄μ˜μ²΄μ œμ—μ„œ λ™μΌν•˜κ²Œ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€. JVM은 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 싀행을 κ΄€λ¦¬ν•˜λ©°, 이λ₯Ό μœ„ν•΄ μ—¬λŸ¬ κ°€μ§€ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. 이 λ©”λͺ¨λ¦¬ μ˜μ—­λ“€μ€ μžλ°” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ 데이터λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

μžλ°” λ©”λͺ¨λ¦¬ λͺ¨λΈ(Java Memory Model, JMM)은 μ΄λŸ¬ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ ꡬ쑰와 λ™μž‘ 방식을 μ •μ˜ν•˜μ—¬, μžλ°” ν”„λ‘œκ·Έλž¨μ΄ 일관성 있고 효율적으둜 싀행될 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

JVM λŸ°νƒ€μž„ 데이터 μ˜μ—­(Runtime Data Area)은 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μ‚¬μš©λ˜λŠ” μ—¬λŸ¬ λ©”λͺ¨λ¦¬ μ˜μ—­μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. 이듀 각각의 μ˜μ—­μ€ νŠΉμ •ν•œ 역할을 λ‹΄λ‹Ήν•˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ μƒνƒœ, λ©”μ„œλ“œ 호좜, 객체 생성 및 μ“°λ ˆλ“œ κ°„μ˜ 데이터 곡유 등을 κ΄€λ¦¬ν•©λ‹ˆλ‹€. JVM λŸ°νƒ€μž„ 데이터 μ˜μ—­μ€ 크게 λ‹€μŒκ³Ό 같은 ꡬ성 μš”μ†Œλ‘œ λ‚˜λ‰©λ‹ˆλ‹€

μ•Όλ†€μž ν…Œν¬ 슀쿨 κ·Έλ£ΉμŠ€ν„°λ”” λ°œν‘œμ—μ„œ μ œκ°€ λ°œν‘œν•œ λ‚΄μš©μ„ λ°œμ·Œν•˜μ—¬ 닀듬어 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

이미지 좜처: https://tape22.tistory.com/28

 

  1. λ©”μ„œλ“œ μ˜μ—­(Method Area): 클래슀, λ©”μ„œλ“œ, ν•„λ“œ 정보와 μƒμˆ˜ 풀을 μ €μž₯ν•©λ‹ˆλ‹€.
  2. νž™ μ˜μ—­(Heap): 객체와 배열을 μ €μž₯ν•©λ‹ˆλ‹€.
  3. μŠ€νƒ μ˜μ—­(Stack): 각 μŠ€λ ˆλ“œλ§ˆλ‹€ μƒμ„±λ˜λ©°, λ©”μ„œλ“œ 호좜 μ‹œ ν”„λ ˆμž„μ„ μ €μž₯ν•©λ‹ˆλ‹€.
  4. PC λ ˆμ§€μŠ€ν„°(Program Counter Register): ν˜„μž¬ μ‹€ν–‰ 쀑인 λͺ…λ Ήμ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  5. λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒ(Native Method Stack): λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ ν˜ΈμΆœμ— μ‚¬μš©λ©λ‹ˆλ‹€.

 

λ©”μ„œλ“œ μ˜μ—­(Method Area)

λ©”μ„œλ“œ μ˜μ—­(Method Area)은 JVM이 μ‹œμž‘λ  λ•Œ μƒμ„±λ˜λŠ” κ³΅κ°„μœΌλ‘œ, λ°”μ΄νŠΈ μ½”λ“œ(.class)λ₯Ό λ©”λͺ¨λ¦¬ 곡간에 처음 올릴 λ•Œ μ΄ˆκΈ°ν™”λ˜λŠ” λŒ€μƒμ„ μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ κ³΅κ°„μž…λ‹ˆλ‹€. 이 μ˜μ—­μ€ JVM이 λ™μž‘ν•˜λ©΄μ„œ ν΄λž˜μŠ€κ°€ λ‘œλ“œλ  λ•Œ μ μž¬λ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λ©λ‹ˆλ‹€. λ©”μ„œλ“œ μ˜μ—­(Method Area)은 Class Areaλ‚˜ Static Areaλ‘œλ„ 뢈리며, λͺ¨λ“  μ“°λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. 이 μ˜μ—­μ—λŠ” λ‹€μŒκ³Ό 같은 μ΄ˆκΈ°ν™” μ½”λ“œ 정보듀이 μ €μž₯λ©λ‹ˆλ‹€

  1. Field Info: 멀버 λ³€μˆ˜μ˜ 이름, 데이터 νƒ€μž…, μ ‘κ·Ό μ œμ–΄μžμ˜ 정보
  2. Method Info: λ©”μ†Œλ“œ 이름, λ°˜ν™˜ νƒ€μž…, ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜, μ ‘κ·Ό μ œμ–΄μžμ˜ 정보
  3. Type Info: ν΄λž˜μŠ€μΈμ§€ μΈν„°νŽ˜μ΄μŠ€μΈμ§€ μ—¬λΆ€, νƒ€μž…μ˜ 속성, 이름, 슈퍼 클래슀의 이름

λ˜ν•œ λŸ°νƒ€μž„ μƒμˆ˜ ν’€(Runtime Constant Pool): 클래슀 νŒŒμΌμ— μ •μ˜λœ μƒμˆ˜ ν’€(Constant Pool)도 λ©”μ„œλ“œ μ˜μ—­μ— ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŠ” μƒμˆ˜ 값을 μ €μž₯ν•˜κ³  λ©”μ„œλ“œ 호좜, ν•„λ“œ μ°Έμ‘° 등을 μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μžλ°”μ—μ„œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ€ ν΄λž˜μŠ€κ°€ λ‘œλ“œλ  λ•Œ λ©”μ†Œλ“œ μ˜μ—­μ˜ μƒμˆ˜ 풀에 μ €μž₯λ©λ‹ˆλ‹€. μ΄λŠ” JVM이 λ™μΌν•œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ„ κ³΅μœ ν•˜λ„λ‘ ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.

μƒμˆ˜ 풀에 μ €μž₯된 λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ€ λ™μΌν•œ 값을 κ°€μ§„ λ‹€λ₯Έ λ¦¬ν„°λŸ΄μ΄ λ‹€μ‹œ μƒμ„±λ˜λ©΄, μƒˆλ‘œ μƒμ„±ν•˜μ§€ μ•Šκ³  μƒμˆ˜ 풀에 μ €μž₯된 κΈ°μ‘΄ λ¦¬ν„°λŸ΄μ„ μ°Έμ‘°ν•©λ‹ˆλ‹€.

 

λ©”μ„œλ“œ μ˜μ—­μ€ μžλ°” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 μ€‘μš”ν•œ 역할을 ν•˜λ©°, JVM이 ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κ³  μ‹€ν–‰ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

 

μ£Όμš” νŠΉμ§•

 

  • 클래슀 λ‘œλ”©, 링크 및 μ΄ˆκΈ°ν™”: λ©”μ„œλ“œ μ˜μ—­μ€ JVM이 클래슀 λ‘œλ”©, 링크(Linking), μ΄ˆκΈ°ν™”(Initialization) λ‹¨κ³„μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. 클래슀 λ‘œλ”λŠ” 클래슀λ₯Ό λ©”μ„œλ“œ μ˜μ—­μ— λ‘œλ“œν•˜κ³ , 링크 λ‹¨κ³„μ—μ„œλŠ” λ©”μ„œλ“œ μ˜μ—­μ˜ 정보가 μ‚¬μš©λ©λ‹ˆλ‹€.
  • λŸ°νƒ€μž„ μƒμˆ˜ ν’€(Runtime Constant Pool): 클래슀 νŒŒμΌμ— μ •μ˜λœ μƒμˆ˜ ν’€(Constant Pool)도 λ©”μ„œλ“œ μ˜μ—­μ— ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŠ” μƒμˆ˜ 값을 μ €μž₯ν•˜κ³  λ©”μ„œλ“œ 호좜, ν•„λ“œ μ°Έμ‘° 등을 μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ“°λ ˆλ“œ μ•ˆμ „μ„±: λ©”μ„œλ“œ μ˜μ—­μ€ λͺ¨λ“  μ“°λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” μ˜μ—­μ΄λ―€λ‘œ, μ“°λ ˆλ“œ μ•ˆμ „μ„±μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. JVM은 λ‚΄λΆ€μ μœΌλ‘œ 이 μ˜μ—­μ„ λ³΄ν˜Έν•˜κΈ° μœ„ν•œ λ©”μ»€λ‹ˆμ¦˜μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

 

νž™ μ˜μ—­ (Heap Area)

νž™ μ˜μ—­μ€ λ©”μ„œλ“œ μ˜μ—­κ³Ό ν•¨κ»˜ λͺ¨λ“  μ“°λ ˆλ“œκ°€ κ³΅μœ ν•˜λ©°, JVM이 κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨ μƒμ—μ„œ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ λŸ°νƒ€μž„ μ‹œ λ™μ μœΌλ‘œ ν• λ‹Ήν•˜μ—¬ μ‚¬μš©ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. 객체와 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ 이 μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.

즉, new μ—°μ‚°μžλ‘œ μƒμ„±λ˜λŠ” 객체와 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, λ°°μ—΄ νƒ€μž… λ“± μ°Έμ‘° νƒ€μž…(Reference Type)이 μ €μž₯λ˜λŠ” κ³³μž…λ‹ˆλ‹€. λ©”μ„œλ“œ μ˜μ—­μ— μ €μž₯된 클래슀 μ •λ³΄λ§Œμ„ 기반으둜 객체가 νž™ μ˜μ—­μ— μƒμ„±λ˜μ–΄ μ μž¬λ©λ‹ˆλ‹€.

μœ μ˜ν•  점은 νž™ μ˜μ—­μ— μƒμ„±λœ 객체와 배열은 μ°Έμ‘° νƒ€μž…(Reference Type)μœΌλ‘œμ„œ, JVM μŠ€νƒ μ˜μ—­μ˜ λ³€μˆ˜λ‚˜ λ‹€λ₯Έ 객체의 ν•„λ“œμ—μ„œ μ°Έμ‘°λœλ‹€λŠ” μ μž…λ‹ˆλ‹€. 즉, νž™μ˜ μ°Έμ‘° μ£Όμ†ŒλŠ” μŠ€νƒμ΄ κ°–κ³  있으며, ν•΄λ‹Ή 객체λ₯Ό ν†΅ν•΄μ„œλ§Œ νž™ μ˜μ—­μ— μžˆλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 핸듀링할 수 μžˆμŠ΅λ‹ˆλ‹€.

νž™ μ˜μ—­μ€ μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯κ³Ό λ©”λͺ¨λ¦¬ μ‚¬μš© νš¨μœ¨μ„±μ„ 크게 μ’Œμš°ν•©λ‹ˆλ‹€.

μ£Όμš”νŠΉμ§•

  1. 동적 ν• λ‹Ή: λŸ°νƒ€μž„ μ‹œ 객체와 배열이 λ™μ μœΌλ‘œ ν• λ‹Ήλ©λ‹ˆλ‹€.
  2. κ°€λΉ„μ§€ μ»¬λ ‰μ…˜: μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œν•˜λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Garbage Collection)이 μˆ˜ν–‰λ©λ‹ˆλ‹€.
  3. μ“°κΈ° 속도와 νš¨μœ¨μ„±: νž™ μ˜μ—­μ€ λ§Žμ€ 데이터λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— 효율적인 λ©”λͺ¨λ¦¬ 관리가 ν•„μš”ν•©λ‹ˆλ‹€.

 

μŠ€νƒ μ˜μ—­(Stack Area)

μŠ€νƒ μ˜μ—­μ€ int, long, boolean λ“± κΈ°λ³Έ μžλ£Œν˜•μ„ 생성할 λ•Œ μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ, μž„μ‹œμ μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ³€μˆ˜λ‚˜ 정보듀이 μ €μž₯λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

λ©”μ„œλ“œ 호좜 μ‹œλ§ˆλ‹€ 각각의 μŠ€νƒ ν”„λ ˆμž„(ν•΄λ‹Ή λ©”μ„œλ“œλ§Œμ„ μœ„ν•œ 곡간)이 μƒμ„±λ©λ‹ˆλ‹€. 이 μŠ€νƒ ν”„λ ˆμž„μ—λŠ” 호좜된 λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜, μ§€μ—­ λ³€μˆ˜, 리턴 κ°’ 및 μ—°μ‚° μ‹œ μƒμ„±λ˜λŠ” 값듀이 μž„μ‹œλ‘œ μ €μž₯λ©λ‹ˆλ‹€. λ©”μ„œλ“œ μˆ˜ν–‰μ΄ λλ‚˜λ©΄ ν•΄λ‹Ή λ©”μ„œλ“œμ˜ μŠ€νƒ ν”„λ ˆμž„μ€ μ‚­μ œλ©λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ€ 각 μ“°λ ˆλ“œλ§ˆλ‹€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•˜λ©°, μ“°λ ˆλ“œκ°€ μ‹œμž‘λ  λ•Œ ν• λ‹Ήλ©λ‹ˆλ‹€. 각 μ“°λ ˆλ“œλŠ” 독립적인 μŠ€νƒμ„ κ°€μ§€λ―€λ‘œ, ν•˜λ‚˜μ˜ μ“°λ ˆλ“œμ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λŠ” λ‹€λ₯Έ μ“°λ ˆλ“œμ—μ„œ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

μ£Όμš” νŠΉμ§•

  1. κΈ°λ³Έ μžλ£Œν˜• μ €μž₯: int, long, boolean λ“± κΈ°λ³Έ μžλ£Œν˜• λ³€μˆ˜λ“€μ΄ μ €μž₯λ©λ‹ˆλ‹€.
  2. μŠ€νƒ ν”„λ ˆμž„: λ©”μ„œλ“œ 호좜 μ‹œλ§ˆλ‹€ μƒˆλ‘œμš΄ μŠ€νƒ ν”„λ ˆμž„μ΄ μƒμ„±λ˜λ©°, λ©”μ„œλ“œκ°€ μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή μŠ€νƒ ν”„λ ˆμž„μ€ μ‚­μ œλ©λ‹ˆλ‹€.
  3. μ“°λ ˆλ“œλ³„ ν• λ‹Ή: 각 μ“°λ ˆλ“œλŠ” 독립적인 μŠ€νƒμ„ κ°€μ§€λ©°, μ“°λ ˆλ“œκ°€ μ‹œμž‘λ  λ•Œ ν• λ‹Ήλ©λ‹ˆλ‹€.
  4. λΉ λ₯Έ μ ‘κ·Ό 속도: μŠ€νƒμ€ LIFO(Last In First Out) ꡬ쑰둜 λ˜μ–΄ μžˆμ–΄, λ°μ΄ν„°μ˜ 좔가와 μ œκ±°κ°€ 맀우 λΉ λ¦…λ‹ˆλ‹€.
  5. μžλ™ λ©”λͺ¨λ¦¬ 관리: μŠ€νƒ ν”„λ ˆμž„μ€ λ©”μ„œλ“œ 호좜과 ν•¨κ»˜ μƒμ„±λ˜κ³  λ©”μ„œλ“œ μ’…λ£Œμ™€ ν•¨κ»˜ μ‚­μ œλ˜λ―€λ‘œ, λͺ…μ‹œμ μΈ λ©”λͺ¨λ¦¬ 관리가 ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ€ μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 쀑 λ©”μ„œλ“œ 호좜과 κ΄€λ ¨λœ λͺ¨λ“  데이터λ₯Ό κ΄€λ¦¬ν•˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯에 μ€‘μš”ν•œ 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.

 

PC λ ˆμ§€μŠ€ν„° (Program Counter Register)

PC λ ˆμ§€μŠ€ν„°λŠ” 각 μ“°λ ˆλ“œκ°€ μ‹œμž‘λ  λ•Œ μƒμ„±λ˜λ©°, ν˜„μž¬ μˆ˜ν–‰ 쀑인 JVM λͺ…λ Ήμ–΄μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€. 이 λ ˆμ§€μŠ€ν„°λŠ” μ“°λ ˆλ“œκ°€ μ–΄λ–€ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ 기둝을 κ°€μ§€κ³  μžˆμ–΄, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ˜ 흐름을 μ œμ–΄ν•©λ‹ˆλ‹€.

 

μ£Όμš”νŠΉμ§•

  1. μ“°λ ˆλ“œ 독립성: 각 μ“°λ ˆλ“œλŠ” κ³ μœ ν•œ PC λ ˆμ§€μŠ€ν„°λ₯Ό κ°€μ§‘λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ λ™μ‹œμ— 싀행될 λ•Œ, 각 μ“°λ ˆλ“œκ°€ μžμ‹ μ˜ μ‹€ν–‰ μœ„μΉ˜λ₯Ό λ…λ¦½μ μœΌλ‘œ 좔적할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  2. λͺ…λ Ήμ–΄ μ£Όμ†Œ μ €μž₯: PC λ ˆμ§€μŠ€ν„°λŠ” ν˜„μž¬ μ‹€ν–‰ 쀑인 JVM λͺ…λ Ήμ–΄μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λ©°, λ‹€μŒμ— 싀행될 λͺ…λ Ήμ–΄λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(Program Counter) 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  3. JVM λͺ…λ Ήμ–΄ μ œμ–΄: JVM이 λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ, PC λ ˆμ§€μŠ€ν„°λŠ” ν˜„μž¬ λͺ…령어와 λ‹€μŒμ— 싀행될 λͺ…λ Ήμ–΄μ˜ μœ„μΉ˜λ₯Ό μΆ”μ ν•˜μ—¬ ν”„λ‘œκ·Έλž¨ 흐름을 μ œμ–΄ν•©λ‹ˆλ‹€.
  4. λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ: λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ, PC λ ˆμ§€μŠ€ν„°λŠ” νŠΉμ • 값이 μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œκ°€ JVM λ°”μ΄νŠΈμ½”λ“œκ°€ μ•„λ‹Œ λ„€μ΄ν‹°λΈŒ μ½”λ“œ(Cλ‚˜ C++ λ“±)둜 μž‘μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

PC λ ˆμ§€μŠ€ν„°λŠ” μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 κ΄€λ¦¬ν•˜κ³ , μ“°λ ˆλ“œκ°€ μ˜¬λ°”λ₯Έ μˆœμ„œλ‘œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

 

 

λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒ(Native Method Stack)

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

이 μŠ€νƒμ€ μžλ°” μ™Έμ˜ μ–Έμ–΄(C, C++, μ–΄μ…ˆλΈ”λ¦¬ λ“±)둜 μž‘μ„±λœ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 곡간이기도 ν•©λ‹ˆλ‹€. λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ€ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ 호좜 μ‹œ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ΄€λ¦¬ν•˜λ©°, μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 운영 μ²΄μ œλ‚˜ λ„€μ΄ν‹°λΈŒ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μƒν˜Έμž‘μš©ν•  수 있게 ν•©λ‹ˆλ‹€.

 

μ£Όμš” νŠΉμ§•

  1. λ„€μ΄ν‹°λΈŒ μ½”λ“œ μ‹€ν–‰: λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ€ C, C++, μ–΄μ…ˆλΈ”λ¦¬ λ“± μžλ°” μ΄μ™Έμ˜ μ–Έμ–΄λ‘œ μž‘μ„±λœ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ κ³΅κ°„μž…λ‹ˆλ‹€.
  2. JNI(Java Native Interface): μžλ°”λŠ” JNIλ₯Ό 톡해 λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©°, λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ€ 이 κ³Όμ •μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.
  3. μŠ€λ ˆλ“œλ³„ μŠ€νƒ: 각 μŠ€λ ˆλ“œλŠ” κ³ μœ ν•œ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ„ κ°€μ§€λ©°, μ΄λŠ” λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ 호좜 μ‹œ μŠ€νƒ ν”„λ ˆμž„μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  4. JVM κ΅¬ν˜„ μ˜μ‘΄μ„±: λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ˜ κ΅¬ν˜„κ³Ό 관리 방식은 JVM κ΅¬ν˜„μ²΄μ— 따라 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ€ μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό 효율적으둜 μ‹€ν–‰ν•˜κ³  운영 체제의 κΈ°λŠ₯을 ν™œμš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” μ€‘μš”ν•œ ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€.

 

 

 

JVM이 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ μ‚¬μš©ν•˜λŠ” λ‹€μ–‘ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­, λ©”μ„œλ“œ μ˜μ—­, νž™ μ˜μ—­, μŠ€νƒ μ˜μ—­, PC λ ˆμ§€μŠ€ν„°, λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒμ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 각 μ˜μ—­μ€ κ³ μœ ν•œ μ—­ν• κ³Ό νŠΉμ§•μ„ κ°€μ§€κ³  있으며, μžλ°” ν”„λ‘œκ·Έλž¨μ˜ 효율적이고 μΌκ΄€λœ 싀행을 μ§€μ›ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ©”λͺ¨λ¦¬ ꡬ쑰에 λŒ€ν•œ μ΄ν•΄λŠ” μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발과 μ„±λŠ₯ μ΅œμ ν™”μ— μžˆμ–΄μ„œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.

λŒ“κΈ€