JVM

JDK, JRE, JVM

  • JDK, JRE, JVM에 λŒ€ν•œ μš©μ–΄λ₯Ό 정리 ν•˜κ² μŠ΅λ‹ˆλ‹€.

  • JDK : Java Development Kit / μžλ°” 개발 도ꡬ

  • JRE : Java Runtime Environment / μžλ°” μ‹€ν–‰ ν™˜κ²½

  • JVM : Java Virtual Machine / μžλ°” 가상 기계

Java의 ν˜Έν™˜μ„±

  • μ•ž Chapterμ—μ„œ μ•Œμ•„λ³΄κΈ°λ‘œ ν•œ C언어와 Java의 차이점을 ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • JavaλŠ” Write Once Use Anywhere μ΄λΌλŠ” λͺ©μ μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€! λ²ˆμ—­ν•˜μžλ©΄, "μ†ŒμŠ€νŒŒμΌμ„ ν•˜λ‚˜λ§Œ μž‘μ„±ν•˜λ©΄ μ–΄λ””μ—μ„œλ“ μ§€ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€!" μž…λ‹ˆλ‹€.

  • λ°˜λ©΄μ— Cμ–Έμ–΄λŠ” One Source Multi Object Use Anywhere λ²ˆμ—­ν•˜μžλ©΄, "ν•˜λ‚˜μ˜ μ†ŒμŠ€νŒŒμΌλ‘œ 각 기계에 λ§žλŠ” λͺ©μ νŒŒμΌλ‘œ λ§Œλ“€μ–΄ μ–΄λ””λ“  μ‚¬μš© κ°€λŠ₯ν•˜λ‹€!" μž…λ‹ˆλ‹€.

  • 정리해 보자면, ν•˜λ‚˜μ˜ λͺ©μ νŒŒμΌλ‘œ μ–΄λ””λ“  싀행이 κ°€λŠ₯ν•˜λƒ, λ‹€μˆ˜μ˜ λͺ©μ  νŒŒμΌμ„ λ§Œλ“€μ–΄μ„œ 각 기계에 맞게 μ‚¬μš©ν•˜λƒμ˜ 차이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • κ²°λ‘ , μš°λ¦¬λŠ” Javaλ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°κ³„μ˜ 기쒅별 즉, μš΄μ˜μ²΄μ œμ— ꡬ애받지 μ•Šκ³  κ°œλ°œμ„ ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • μ—¬κΈ°μ„œ Java의 λͺ©μ νŒŒμΌμ€ λ°˜κΈ°κ³„μ–΄μΈ λ°”μ΄νŠΈμ½”λ“œ(.class)인데 μ΄λŠ” μš΄μ˜μ²΄μ œκ°€ μ•„λ‹ˆλΌ JVMμ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

  • μ†ŒμŠ€μ½”λ“œλ₯Ό λ°”μ΄νŠΈ μ½”λ“œλ‘œ 컴파일 ν•΄μ£ΌλŠ”κ²Œ μžλ°” 컴파일러(javac)μž…λ‹ˆλ‹€.

  • 그럼 λ‹€μŒμœΌλ‘œ Javaκ°€ μ–΄λ–€ 과정을 톡해 μ»΄νŒŒμΌλ˜μ–΄ μ‹€ν–‰λ˜λŠ”μ§€ λ³΄κ² μŠ΅λ‹ˆλ‹€.

Java의 μ‹€ν–‰ κ³Όμ •

  1. κ°œλ°œμžλŠ” μžλ°” μ†ŒμŠ€νŒŒμΌ(.java)λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

  2. JDKκ°€ μ œκ³΅ν•˜λŠ” javacλ₯Ό μ‚¬μš©ν•˜μ—¬ μ†ŒμŠ€νŒŒμΌμ„ μ»΄νŒŒμΌν•©λ‹ˆλ‹€.

  3. JVM의 Class LoaderλŠ” 컴파일둜 μƒμ„±λœ λ°”μ΄νŠΈ μ½”λ“œ(.class)λ₯Ό 전달 λ°›μ•„ 동적 λ‘œλ”©μ„ 톡해 싀행에 ν•„μš”ν•œ ν΄λž˜μŠ€λ“€μ„ λ‘œλ”©ν•˜μ—¬ JVM λ‚΄λΆ€ Runtime Data Area에 λ‘œλ“œν•©λ‹ˆλ‹€.

  4. JVM의 Execution에 μ˜ν•΄ κΈ°κ³„μ–΄λ‘œ ν•΄μ„λ˜μ–΄ μ‹€ν–‰λ©λ‹ˆλ‹€.

Class Loader

  • ν”„λ‘œκ·Έλž¨ μƒμ˜ μž‘μ„±ν•œ λͺ¨λ“  클래슀, λ³€μˆ˜ 및 λ©”μ„œλ“œμ˜ 정보λ₯Ό Method Area에 λ°°μΉ˜ν•©λ‹ˆλ‹€.

  • JVM 내뢀에 λ°”μ΄νŠΈ μ½”λ“œλ₯Ό λ‘œλ“œν•˜κ³  링크λ₯Ό 톡해 λ°°μΉ˜ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€.

  • 싀행될 λ•Œ λ™μ μœΌλ‘œ 클래슀λ₯Ό λ‘œλ“œν•˜κ³  jar 파일 내뢀에 μ €μž₯λ˜μ–΄ μžˆλŠ” ν΄λž˜μŠ€λ“€μ„ JVM에 λ‘œλ“œν•©λ‹ˆλ‹€.

  • static(정적) λ³€μˆ˜μ™€ λ©”μ„œλ“œλŠ” Heap Area에 λ°°μΉ˜ν•©λ‹ˆλ‹€.

Execution(μ‹€ν–‰ μ—”μ§„)

  • InterpreterλŠ” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό ν•œμ€„ μ”© 읽고 λ²ˆμ—­ν•΄ μ£ΌλŠ”λ° λŠλ¦¬λ‹€λŠ” 단점이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

  • κ·Έλž˜μ„œ 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λ‚˜μ˜¨ 것이 JIT μ»΄νŒŒμΌλŸ¬μž…λ‹ˆλ‹€.

  • JIT μ»΄νŒŒμΌλŸ¬λŠ” Interpreter λ°©μ‹μœΌλ‘œ 싀행을 ν•˜λ‹€κ°€ μ λ‹Ήν•œ μ‹œμ μ— λ°”μ΄νŠΈ μ½”λ“œ 전체λ₯Ό μ»΄νŒŒμΌν•˜μ—¬ μΊμ‹±ν•©λ‹ˆλ‹€.

  • 캐싱 즉, 컴파일된 μ½”λ“œλ₯Ό μ €μž₯ν•΄ 두기 λ•Œλ¬Έμ— 이 μ½”λ“œλ“€μ€ Interpreterλ₯Ό 톡해 μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹ˆλΌ λ°”λ‘œ 싀행이 λ©λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ 속도가 맀우 λΉ¨λΌμ§‘λ‹ˆλ‹€.

  • Garbage CollectorλŠ” κ°„λ‹¨ν•˜κ²Œ μ„€λͺ… ν•˜μžλ©΄ μœ νš¨ν•˜μ§€ μ•Šμ€ 즉, μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μΆ”μ ν•˜μ—¬ λΉ„μ›Œμ£ΌλŠ” κΈ°λŠ₯을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • μΆ”κ°€λ‘œ 인터프리터 언어와 컴파일 언어에 λŒ€ν•΄ ν•œλ²ˆ μ •λ¦¬ν•˜κ³  κ°€κ² μŠ΅λ‹ˆλ‹€.

Compile 언어와 Interpreter μ–Έμ–΄

Compile μ–Έμ–΄

  • μ†ŒμŠ€νŒŒμΌ 전체λ₯Ό 컴파일 ν•œ ν›„ 기계어λ₯Ό CPU와 λ©”λͺ¨λ¦¬λ₯Ό 톡해 μ½μ–΄μ„œ λ°”λ‘œ μ‹€ν–‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘μ΄ λ˜λŠ” μ–Έμ–΄

  • μ’…λ₯˜ : C, C++, Java, C# ...

  • νŠΉμ§•

    • μ†ŒμŠ€νŒŒμΌμ˜ 크기가 크면 컴파일 과정이 였래 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€.

    • 컴파일이 된 후에 κΈ°κ³„μ–΄λ‘œ λ°”λ‘œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ 속도가 λΉ λ¦…λ‹ˆλ‹€.

    • JavaλŠ” javac에 μ˜ν•΄ λ°”μ΄νŠΈμ½”λ“œλ‘œ 컴파일 λ˜μ§€λ§Œ JVMμ—μ„œλŠ” μΈν„°ν”„λ¦¬ν„°λ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ Compile μ–Έμ–΄μ΄μ§€λ§Œ, Interpreter μ–Έμ–΄μ˜ νŠΉμ§•μ„ λ™μ‹œμ— κ°€μ§‘λ‹ˆλ‹€.

Interpreter μ–Έμ–΄

  • μ†ŒμŠ€νŒŒμΌμ„ μ»΄νŒŒμΌν•˜μ§€ μ•Šκ³ μ„œ Interpreterλ₯Ό μ‚¬μš©ν•˜μ—¬ μ†ŒμŠ€νŒŒμΌμ„ ν•œμ€„ μ”© λ²ˆμ—­ν•˜λ©΄μ„œ μ‹€ν–‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘μ΄ λ˜λŠ” μ–Έμ–΄

    • Interpreter : μ†ŒμŠ€ μ½”λ“œλ₯Ό λ°”λ‘œ λ²ˆμ—­ν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž¨ ν˜Ήμ€ ν™˜κ²½

  • μ’…λ₯˜ : Javascript, Ruby, Python ...

  • νŠΉμ§•

    • 컴파일 μ–Έμ–΄μ²˜λŸΌ λ³„λ„μ˜ λͺ©μ νŒŒμΌμ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • 컴파일 κ³Όμ • 없이 λ°”λ‘œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μˆ˜μ • 및 λ””λ²„κΉ…μ‹œ νŽΈν•©λ‹ˆλ‹€.

    • Interpreter 만 μ‘΄μž¬ν•˜λ©΄ μ–΄λ””μ„œλ“ μ§€ 싀행이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 자유둭고 독립적 μž…λ‹ˆλ‹€.

    • μ‹€μ‹œκ°„μœΌλ‘œ λ²ˆμ—­ λ˜λ©΄μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ 속도가 λŠλ¦½λ‹ˆλ‹€.

JVM

JVM은 Java ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” 가상 컴퓨터라고 μƒκ°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

  • μœ„ 이미지 처럼 JVM은 λ‚΄λΆ€μ μœΌλ‘œ λ³΅μž‘ν•œ ꡬ쑰λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€!

  • μš°λ¦¬λŠ” 이 μ€‘μ—μ„œ Runtime Data Areasλ₯Ό κ°„λ‹¨ν•˜κ²Œ 정리해 λ³΄κ² μŠ΅λ‹ˆλ‹€.(Java 8 이후 κΈ°μ€€)

μ „ 처리 κ³Όμ • μ΄ν•΄ν•˜κΈ°

  • Runtime Data Areasλ₯Ό ν•™μŠ΅ν•˜κΈ° 전에 μ „ 처리 과정에 λŒ€ν•΄ ν•™μŠ΅ν•˜κ² μŠ΅λ‹ˆλ‹€.

  • μœ„μ—μ„œ JREλŠ” Java의 μ‹€ν–‰ ν™˜κ²½μ΄λΌκ³  λ°°μ› μŠ΅λ‹ˆλ‹€.

  • JREλŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° 전에 λ¨Όμ € ν”„λ‘œκ·Έλž¨μ— 메인 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜κ³  μ‘΄μž¬ν•œλ‹€λ©΄ JVM을 λΆ€νŒ…μ‹œν‚΅λ‹ˆλ‹€.

  • λΆ€νŒ…μ΄λœ JVM은 전달받은 μ½”λ“œλ₯Ό μ‹€ν–‰ μ‹œν‚€λŠ”λ° μ΄λ•Œ κ°€μž₯ λ¨Όμ € ν•˜λŠ” 일이 μ „ 처리라고 ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

μ „ 처리 κ³Όμ •

  1. λͺ¨λ“  Java ν”„λ‘œκ·Έλž¨μ€ λ°˜λ“œμ‹œ java.lang νŒ¨ν‚€μ§€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. λ”°λΌμ„œ JREλŠ” ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό Method Area에 λ°°μΉ˜ν•©λ‹ˆλ‹€.

  2. ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•˜κΈ°μœ„ν•΄ importν•œ νŒ¨ν‚€μ§€λ“€λ„ μ‘΄μž¬ν•  κ²λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ Method Area에 λ°°μΉ˜ν•©λ‹ˆλ‹€.

  3. ν”„λ‘œκ·Έλž¨ μƒμ˜ μž‘μ„±ν•œ λͺ¨λ“  클래슀, λ³€μˆ˜ 및 λ©”μ„œλ“œμ˜ 정보λ₯Ό Method Area에 λ°°μΉ˜ν•©λ‹ˆλ‹€.

  4. static(정적) λ³€μˆ˜μ™€ λ©”μ„œλ“œλŠ” Heap Area에 λ°°μΉ˜ν•©λ‹ˆλ‹€.

Runtime Data Areas

  • μ»΄ν“¨ν„°μ—μ„œ λ©”λͺ¨λ¦¬ 같은 역할을 μˆ˜ν–‰ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜μ—¬ λ°œμƒν•˜λŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” 역할을 ν•˜λŠ”λ°, λ°μ΄ν„°μ˜ 속성에 따라 μ˜μ—­μ΄ λΆ„λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

PC Register

  • μŠ€λ ˆλ“œκ°€ μ‹œμž‘λ  λ•Œλ§ˆλ‹€ μƒμ„±λ˜λŠ” κ³΅κ°„μœΌλ‘œ, μŠ€λ ˆλ“œλ§ˆλ‹€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•©λ‹ˆλ‹€.

  • μŠ€λ ˆλ“œκ°€ μ–΄λ–€ λͺ…령에 μ˜ν•΄ μ‹€ν–‰λ˜μ–΄μ•Ό 할지에 λŒ€ν•œ 기둝을 ν•˜λŠ” λΆ€λΆ„μœΌλ‘œ ν˜„μž¬ μˆ˜ν–‰μ„ ν•˜κ³  μžˆλŠ” JVM의 λͺ…λ Ή μ£Όμ†Œλ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

Native Method Stack

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

  • μžλ°” μ΄μ™Έμ˜ μ–Έμ–΄(C, C++, μ–΄μ…ˆλΈ”λ¦¬ λ“±)둜 μž‘μ„±λœ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ, Native Method Stack이 ν• λ‹Ή 되며, 일반적인 C μŠ€νƒμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • Java Native Interfaceλ₯Ό 톡해 λ°”μ΄νŠΈ μ½”λ“œλ‘œ μ „ν™˜ν•˜μ—¬ μ €μž₯λ©λ‹ˆλ‹€.

  • 일반 ν”„λ‘œκ·Έλž¨μ²˜λŸΌ 컀널이 μŠ€νƒμ„ μž‘μ•„ λ…μžμ μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

Method Area(Metaspace, Static Area, Class Area)

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

  • 클래슀의 νƒ€μž…, λ³€μˆ˜ 및 λ©”μ„œλ“œλ“±μ˜ 정보λ₯Ό κ°€μ§€κ³  있으며 λͺ¨λ“  Threadκ°€ κ³΅μœ ν•©λ‹ˆλ‹€.

  • Runtime Constant Pool

    • μƒμˆ˜ μžλ£Œν˜•μ„ μ €μž₯ν•˜μ—¬ μ°Έμ‘°ν•˜κ³  쀑볡을 λ§‰λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

Heap Area

  • 객체(μΈμŠ€ν„΄μŠ€)κ°€ μƒμ„±λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 쀑 μƒμ„±λ˜λŠ” 객체듀은 λͺ¨λ‘ 이곳에 μƒμ„±λ©λ‹ˆλ‹€.

  • Permanent Generation

    • μƒμ„±λœ κ°μ²΄λ“€μ˜ μ •λ³΄μ˜ μ£Όμ†Œκ°’μ΄ μ €μž₯된 κ³΅κ°„μž…λ‹ˆλ‹€.

    • 클래슀 λ‘œλ”μ— μ˜ν•΄ λ‘œλ“œλ˜λŠ” Class, Method 등에 λŒ€ν•œ Meta 정보가 μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ©° JVM에 μ˜ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

    • Reflection을 μ‚¬μš©ν•˜μ—¬ λ™μ μœΌλ‘œ ν΄λž˜μŠ€κ°€ λ‘œλ”©λ˜λŠ” κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€.

    • Java 8 μ΄μ „μ—λŠ” Permanent Generation 이 Heap 내뢀에 쑴재 ν–ˆμ§€λ§Œ 8 이후 제거되고 Method Area 즉, Metaspace 라 뢈리우며 Heap이 μ•„λ‹Œ Native λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€. 이전에 μ œν•œλœ λ©”λͺ¨λ¦¬ 크기 λ•Œλ¬Έμ— λ°œμƒν–ˆλ˜ ν•œκ³„μ μ„ κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • New/Young Generation

    • Eden : 객체듀이 졜초둜 μƒμ„±λ˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

    • Survivor 0,1 : Edenμ—μ„œ μ°Έμ‘°λ˜λŠ” 객체듀이 μ €μž₯λ˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

    • 생λͺ… μ£ΌκΈ°κ°€ 짧은 객체λ₯Ό Garbage Collector 의 λŒ€μƒμœΌλ‘œ ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

    • Eden μ˜μ—­μ— 객체가 κ°€λ“μ°¨κ²Œ 되면 Garbage Collector에 μ˜ν•΄ Eden μ˜μ—­μ— μžˆλŠ” 값듀을 Survivor 1 μ˜μ—­μ— λ³΅μ‚¬ν•˜κ³  이 μ˜μ—­μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 객체듀을 μ‚­μ œν•©λ‹ˆλ‹€.

  • Tenured Generation

    • Old : 이곳의 객체듀은 Garbage Collector 에 μ˜ν•΄ μ‚­μ œλ©λ‹ˆλ‹€.

    • New/Young Generation μ—μ„œ μΌμ •μ‹œκ°„ 참쑰되고 있고 살아남은 객체듀이 μ €μž₯λ˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

    • 생λͺ… μ£ΌκΈ°κ°€ κΈ΄ 객체λ₯Ό Garbage Collector 의 λŒ€μƒμœΌλ‘œ ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

Stack Area

  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •μ—μ„œ μž„μ‹œλ‘œ 할당이 λ˜μ—ˆλ‹€κ°€ λ©”μ„œλ“œλ₯Ό λΉ μ Έλ‚˜κ°€λ©΄ λ°”λ‘œ μ†Œλ©Έμ΄ λ˜λŠ” νŠΉμ„±μ˜ 데이터듀을 μ €μž₯ν•˜κΈ° μœ„ν•œ μ˜μ—­μž…λ‹ˆλ‹€.

  • μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œ 및 μ€‘κ΄„ν˜Έ 블둝(ifλ¬Έλ“±)에 λŒ€ν•œ 데이터가 μ €μž₯λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

  • κ°€μž₯ 처음 μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œ(main())κ°€ 첫 번째둜 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ³  κ·Έ λ‹€μŒμ— μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œλ“€μ΄ μœ„μ— μŒ“μ΄λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

  • μŒ“μ΄λŠ” λ©”μ„œλ“œμ˜ λ‹¨μœ„λ₯Ό μŠ€νƒ ν”„λ ˆμž„μ΄λΌκ³  λΆ€λ¦…λ‹ˆλ‹€. ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ λ³€μˆ˜ 및 블둝이 μ‘΄μž¬ν•˜λ©΄ μŠ€νƒ ν”„λ ˆμž„ 내뢀에 μŠ€νƒ ν”„λ ˆμž„μ΄ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

  • κ°€μž₯ 큰 νŠΉμ§•μ€ λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ 각 μŠ€λ ˆλ“œκ°€ 고유의 μŠ€νƒ μ˜μ—­μ„ κ°€μ§„λ‹€λŠ” μ μž…λ‹ˆλ‹€.

λ“œλ””μ–΄ λ‹€μŒ Chapter λΆ€ν„° 본격적으둜 Java에 λŒ€ν•΄ ν•™μŠ΅ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€!

ν”„λ‘œμ„ΈμŠ€(process)λž€? μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨

  • μ‚¬μš©μžκ°€ μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μ΄ μš΄μ˜μ²΄μ œμ— μ˜ν•΄ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήλ°›μ•„ μ‹€ν–‰ 쀑인 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

  • ν”„λ‘œμ„ΈμŠ€λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” λ©”λͺ¨λ¦¬λ“±μ˜ μžμ›κ³Ό μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

μŠ€λ ˆλ“œ(thread)λž€?

ν”„λ‘œμ„ΈμŠ€ λ‚΄λΆ€μ—μ„œ μ‹€μ œλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆλŠ” 주체

  • 2개 μ΄μƒμ˜ μŠ€λ ˆλ“œλ₯Ό κ°€μ§€κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λ©€ν‹° ν”„λ‘œμ„ΈμŠ€(multi-threaded process)라고 λΆ€λ¦…λ‹ˆλ‹€.

Reflection μ΄λž€? 객체λ₯Ό 톡해 클래슀의 정보λ₯Ό 뢄석해 λ‚΄λŠ” ν”„λ‘œκ·Έλž˜λ° 기법

  • ꡬ체적인 클래슀 νƒ€μž…μ„ μ•Œμ§€ λͺ»ν•΄λ„, 컴파일된 λ°”μ΄νŠΈ μ½”λ“œλ₯Ό 톡해 μ—­μœΌλ‘œ 클래슀의 정보λ₯Ό μ•Œμ•„λ‚΄μ–΄ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Last updated