λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Study/Java

[TIL] μžλ°” 가상 λ¨Έμ‹ 

by hong- 2022. 5. 22.

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

 - μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€λŠ” 도ꡬ

  - μžλ°”λ‘œ μž‘μ„±ν•œ μ†ŒμŠ€ μ½”λ“œλ₯Ό ν•΄μ„ν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” λ³„λ„μ˜ ν”„λ‘œκ·Έλž¨

  - μžλ°” ν”„λ‘œκ·Έλž¨κ³Ό 운영체제 μ‚¬μ΄μ˜ 톡역가

  - μžλ°”λŠ” C++처럼 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•˜λ©΄μ„œλ„ 운영체제둜 λΆ€ν„° λ…λ¦½λ˜μ–΄μžˆμŒ

     → μžλ°”μ˜ 독립성을 κ΅¬ν˜„ν•˜λŠ” 것이 JVM

 

 - μžλ°”λŠ” JVMκ³Ό λ§€κ°œν•˜μ—¬ μš΄μ˜μ²΄μ œμ™€ μ†Œν†΅

 - 각 μš΄μ˜μ²΄μ œμ— μ ν•©ν•œ λ²„μ „μ˜ JVM이 λ”°λ‘œ μ‘΄μž¬ν•¨

   → μš΄μ˜μ²΄μ œμ— 맞게 μ½”λ“œλ₯Ό λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰ν•˜μ—¬ 독립성을 κ°€μ§ˆ 수 있음


πŸ“ JVM λ©”λͺ¨λ¦¬ ꡬ쑰 : Runtime Data Area

  - JVM에 μžλ°” ν”„λ‘œκ·Έλž¨μ΄ λ‘œλ“œλ˜μ–΄ 싀행될 λ•Œ νŠΉμ • κ°’μ΄λ‚˜ λ°”μ΄νŠΈμ½”λ“œ, 객체, λ³€μˆ˜ λ“±μ˜ 데이터가 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄μ•Ό 함

     → μ΄λ“€μ˜ 정보λ₯Ό λ‹΄λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ΄ Runtime Data Area !!


πŸ“ Stack μ˜μ—­

  - μŠ€νƒμ€ ν”„λ‘œκ·Έλž¨μ΄ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 방식인 자료ꡬ쑰 쀑 ν•˜λ‚˜ ! 

  - 데이터 μž…μΆœλ ₯ μˆœμ„œ 원칙 ' LIFO (Last In First Out) ' κ°€μž₯ λ§ˆμ§€λ§‰μ— λ“€μ–΄κ°„ 데이터가 κ°€μž₯ λ¨Όμ € λ‚˜μ˜΄


πŸ“ Heap μ˜μ—­

  - μ‹€μ œ 객체의 값이 μ €μž₯λ˜λŠ” 곡간

  - νž™μ€ JVM에 단 ν•˜λ‚˜ 쑴재 ( JVM μž‘λ™λ˜λ©΄ μžλ™ 생성 )

  - 객체, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 배열이 μ €μž₯됨

  - 객체λ₯Ό 닀룬닀 ? Stack의 μ°Έμ‘° λ³€μˆ˜λ₯Ό 톡해 Heap의 객체λ₯Ό λ‹€λ£¬λ‹€λŠ” 의미

  - new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ Heap에 μ €μž₯된 데이터λ₯Ό 읽어 μŠ€νƒμ— μ €μž₯된 참쑰값을 뢈러 리턴함


πŸ“Garbage Collection : GC

  - κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ€ 더 이상 μ‚¬μš©ν•˜μ§€ μ•Šμ„ 객체λ₯Ό μ°Ύμ•„ μ‚­μ œν•˜κ±°λ‚˜ μ œκ±°ν•˜μ—¬ λ©”λͺ¨λ¦¬ 확보 및 관리

Car car = new Car();
car.setColor("red");
car = null;  → κ°€λΉ„μ§€μ»¬λ ‰μ…˜ λ°œμƒ 
                      : 아무도 μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” 객체가 λ˜μ–΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μœΌλ‘œ μ‚­μ œλ¨

  β–ͺ️ λ™μž‘ 방식

'Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[TIL] 자료ꡬ쑰 : μŠ€νƒ, 큐  (0) 2022.05.27
[TIL] μž¬κ·€ν•¨μˆ˜  (0) 2022.05.24
[TIL] μŠ€λ ˆλ“œ  (0) 2022.05.22
[TIL] 파일 μž…μΆœλ ₯  (0) 2022.05.21
[TIL] 슀트림  (0) 2022.05.21