πŸ₯•
TIL
  • [TIL] Studying tech / computer science knowledge
  • KeyMap
  • μ•Œκ³ λ¦¬μ¦˜
    • λ³΅μž‘λ„ 계산 ( Computational Complexity )
    • DisjointSet-unionFind
    • Bellman-ford Algorithm
    • Dijkstra's Algorithm
    • DP ( Dynamic Programming , 동적 κ³„νšλ²• )
    • ν”Œλ‘œμ΄λ“œ-μ›Œμ…œ μ•Œκ³ λ¦¬μ¦˜ (Floyd-Warshall algorithm)
    • Kruskal's Algorithm
    • 졜μž₯ 증가 μˆ˜μ—΄ (Longes Increasing Subsequence)
    • Prim's Algorithm
    • μ •λ ¬
    • μ‹œκ°„λ³΅μž‘λ„ 와 κ³΅κ°„λ³΅μž‘λ„ ( Time Complexity & Space Complexity )
    • Topological Sort (μœ„μƒ μ •λ ¬)
  • μ±… μ½κ³ λ‚œ ν›„ μš”μ•½
    • ν”„λ‘œκ·Έλž˜λ° λŒ€νšŒμ—μ„œ λ°°μš°λŠ” μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν•΄κ²° μ „λž΅
    • cleancode
    • 도메인 주도 μ„€κ³„λ‘œ μ‹œμž‘ν•˜λŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 개발
    • 였브젝트
  • CDC
    • debzium
    • kafka
  • 개발 상식
    • asciidoctor
    • 컴파일러
    • ELK μŠ€νƒ
    • μ—”λ””μ•ˆ
    • git
    • Gitmoji
    • ν…ŒμŠ€νŠΈ μ’…λ₯˜
    • λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬
    • μ •κ·œ ν‘œν˜„μ‹
    • REST API
    • 동기와 비동기 / Blockingκ³Ό NonBlocking
    • Transaction Script와 Domain Model
    • λ””μžμΈ νŒ¨ν„΄
      • 행동 νŒ¨ν„΄
      • 객체 생성 νŒ¨ν„΄
        • 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄
        • λΉŒλ” νŒ¨ν„΄
        • νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄
        • [생성 νŒ¨ν„΄] ν”„λ‘œν†  νƒ€μž… (Prototype Parttern)
        • 싱글톀
      • ꡬ쑰 νŒ¨ν„΄
        • μ–΄λŒ‘ν„° νŒ¨ν„΄
        • λΈŒλ¦Ώμ§€ νŒ¨ν„΄
        • 컴포짓(Composite) νŒ¨ν„΄
        • λ°μ½”λ ˆμ΄ν„°
        • ν”„λ‘μ‹œ
    • refactoring
      • 쀑볡 μ½”λ“œ
      • μ „μ—­ 데이터
      • κΈ΄ ν•¨μˆ˜
      • κΈ΄ λ§€κ°œλ³€μˆ˜ λͺ©λ‘
      • κ°€λ³€ 데이터
      • μ΄ν•΄ν•˜κΈ° νž˜λ“  이름
  • 자료ꡬ쑰
    • AVL Tree
    • Splay Tree
    • aaTree
    • array-list
    • 자료ꡬ쑰 μ‹œκ°„/곡간 λ³΅μž‘λ„
    • κ·Έλž˜ν”„
    • νž™
    • Red Black Tree
    • stack-queue
    • 트리 ( Tree )
  • DevOps
    • MSA
    • Kubernetes
      • AccessingAPI
      • controller
      • dashboard
      • kubernetes
      • object
      • pod
      • service
      • volume
  • Java
    • μ–΄λ…Έν…Œμ΄μ…˜
    • μ œμ–΄λ¬Έ
    • 데이터 νƒ€μž…
    • Enum
    • jvm
    • μ—°μ‚°μž
    • thread
    • Java8
      • CompletableFuture
      • Date/Time
      • μ–΄λ…Έν…Œμ΄μ…˜κ³Ό λ©”νƒ€μŠ€νŽ˜μ΄μŠ€
      • μΈν„°νŽ˜μ΄μŠ€
      • λžŒλ‹€μ‹
      • Optional
      • 슀트림
  • JavaScript
    • moduleProject
    • webpack-babel
    • μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ
      • array
      • ν•¨μˆ˜ 바인딩
      • λ°μ½”λ ˆμ΄ν„°μ™€ ν¬μ›Œλ”©
      • Class
      • 비ꡐ μ—°μ‚°μž
      • Date λ‚΄μž₯ 객체
      • destructuring-assignment
      • function
      • ν•¨μˆ˜μ˜ prototype ν”„λ‘œνΌν‹°
      • κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ ( Garbage Collection )
      • JSON (JavaScript Object Notation)
      • map-set
      • λ‚΄μž₯ ν”„λ‘œν† νƒ€μž…
      • newμ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜
      • 객체
      • Object.keys, values, entries
      • μ˜΅μ…”λ„ 체이닝 '?.'
      • ν”„λ‘œνΌν‹° ν”Œλž˜κ·Έ
      • ν”„λ‘œνΌν‹° μ’…λ₯˜
      • ν”„λ‘œν†  νƒ€μž…
      • 호좜 μŠ€μΌ€μ€„λ§ ( scheduling a call )
      • scope
      • this
      • type-conversions
      • type
      • ν•¨μˆ˜μ˜ μžλ£Œν˜•
      • var_let_const
  • Linux
    • κΈ°λ³Έ λͺ…λ Ήμ–΄
    • 파일 μ’…λ₯˜
    • λ¦¬λˆ…μŠ€
  • λ„€νŠΈμ›Œν¬
    • μ‘μš© 계측 ( Application Layer )
    • 였λ₯˜ κ²€μΆœκ³Ό 였λ₯˜ μ •μ •
    • Http
    • Http Header
    • 컴퓨터 λ„€νŠΈμ›Œν¬λž€
    • λ„€νŠΈμ›Œν¬ 계측
    • λ„€νŠΈμ›Œν¬ μ œμ–΄ μ˜μ—­
    • 전솑 계측 ( Transport Layer )
  • PHP
    • Facade
    • composer
    • scopeResolutionOperator
    • Laravel
      • SocialProvider
      • architecture
      • blade
      • controller
      • db
      • dbArchitecture
      • debug
      • eloquent
      • email
      • event
      • exceptionHandling
      • middleware
      • model
      • modelFactory
      • pagingLoading
      • queryBuilder
      • route
      • scout
      • seeding
      • tntsearch
      • validate
      • view
  • React
    • Next.js
    • React λž€?
  • Spring
    • Controller
    • μš”μ²­μ΄ λ“€μ–΄μ™”μ„λ•Œ μŠ€ν”„λ§μ΄ μ²˜λ¦¬ν•˜λŠ” 방법 ( 내뢀ꡬ쑰 )
    • ConfigurationProperties
    • Entity / DTO / VO
    • Maven
    • Repository와 DAO
    • μŠ€ν”„λ§ 빈
    • Spring Framework
    • MVC νŒ¨ν„΄
    • 도메인 μž…λ ₯κ°’ 검증
    • Spring Cloud
      • Spring Cloud
      • Eureka
    • Spring Data
      • JPA
      • JPA μ–΄λ…Έν…Œμ΄μ…˜
      • μ—”ν‹°ν‹° 비ꡐ
      • 볡합 킀와 식별 관계 λ§€ν•‘
      • JPA μ˜ˆμ™Έμ²˜λ¦¬
      • 객체지ν–₯ 쿼리
      • EntityManagerFactory와 EntityManager
      • JPA μ΅œμ ν™”
      • ν”„λ‘μ‹œμ™€ 연관관계 λ§΅ν•‘
      • 연관관계
      • 상속관계 λ§΅ν•‘
      • νŠΈλžœμž­μ…˜ λ²”μœ„μ™€ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ
      • 데이터 νƒ€μž…
      • MySQL μ—°κ²°
      • Pageable
    • Spring Projectλ“€κ³Ό library
      • Custom Serialize
      • Elasticsearch Index API
      • Spring HATEOAS
      • lombok (둬볡)
      • Model Mapper
      • Object Mapper
      • Representation Model
      • Spring REST Docs
      • Spring Boot
    • Spring Security
      • Spring Security
      • Authentication
      • Authentication Filter
      • Authorization Filter
      • Filter Chain
      • SecurityContext
      • Spring OAuth2.0
    • Spring Test
      • AssertJ
      • Junit5
      • JunitParams
      • Mock Object
  • DataBase
    • ALIAS
    • CONCAT
    • CTE
    • Group By
    • HAVING
    • IFNULL
    • 인덱슀
    • JOIN
    • ORDER BY
    • ROLLUP
    • SELECT
    • SELECT DISTINCT
    • SQL
    • WHERE
  • Web 상식
    • OAuth
    • WAS
    • HTTP톡신 기반 인증
    • λΈŒλΌμš°μ €
    • CSR κ³Ό SSR
    • HTTPS
    • Web
Powered by GitBook
On this page
  • JVM
  • 컴파일 ν•˜λŠ” 방법
  • 컴파일 κ³Όμ •
  • 싀행방법
  • λ°”μ΄νŠΈμ½”λ“œλž€
  • JVM κ΅¬μ„±μš”μ†Œ
  • Runtime Data Area
  • JDK와 JRE 차이
  • OracleJDK 와 OpenJDK의 차이
  • Reference
  1. Java

jvm

JVM

Java Virtual Machine의 μ•½μžλ‘œ Java와 OSμ‚¬μ΄μ—μ„œ μ€‘κ°œμž 역할을 ν•˜μ—¬ λ©”λͺ¨λ¦¬ 관리, GC(garbage collection)을 μˆ˜ν–‰ν•˜λŠ” μŠ€νƒκΈ°λ°˜μ˜ κ°€μƒλ¨Έμ‹ μœΌλ‘œ C++,C와 같은 μ–Έμ–΄λ“€κ³Ό λ‹€λ₯΄κ²Œ OS에 상관없이 λ™μž‘μ΄ κ°€λŠ₯ν•˜λ‹€.

JavaλŠ” Cλ‚˜ C++κ³Ό 같이 λ°”λ‘œ μ»΄νŒŒμΌλ˜λŠ” 컴파일 μ–Έμ–΄κ°€ μ•„λ‹ˆλ‹€. μ»΄νŒŒμΌμ–Έμ–΄λŠ” 컴파일 ν™˜κ²½μ— 따라 λ‹€λ₯΄κ²Œ 컴파일이 λœλ‹€λŠ” νŠΉμ§•μ„ κ°€μ§€κ³  있기 λ•Œλ¬Έμ— Java의 κ°€μž₯ 큰 νŠΉμ§•μΈ os와 ν™˜κ²½μ— ꡬ애받지 μ•ŠλŠ” λ‹€λŠ” 점을 μœ„λ°˜ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. (νŒŒμ΄μ¬μ΄λ‚˜, JSλŠ” 인터프리터 μ–Έμ–΄)

μ»΄νŒŒμΌλŸ¬λŠ” 전체 μ†ŒμŠ€μ½”λ“œλ₯Ό 톡해 λΆ„μ„ν•˜μ—¬ 였λ₯˜κ°€μžˆλŠ”μ§€ ν™•μΈν•˜λ©° μž¬κ΅¬μ„±ν•˜μ—¬ κΈ°κ³„μ–΄λ‘œ λ°”κΎΈλŠ” 반면, μΈν„°ν”„λ¦¬ν„°λŠ” ν•œ ν–‰μ”© μ‹€ν–‰ν•˜λ©° λΆ„μ„μ„ν•˜κ³ (쀑간 μ½”λ“œλ‘œ λ³€ν™˜) 쀑간에 μ—λŸ¬κ°€ λ°œμƒμ‹œ κ·Έ μ΄ν›„μ˜ μ½”λ“œλŠ” ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€.

JavaλŠ” ν™˜κ²½μ— ꡬ애받지 μ•ŠλŠ”λ‹€λŠ” νŠΉμ§•λ•Œλ¬Έμ— μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ μžλ°”μ½”λ“œλ₯Ό λ°”μ΄νŠΈ μ½”λ“œ(.class파일)둜 λ³€ν™˜ν•˜κ³  이λ₯Ό κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•΄μ£ΌλŠ” 과정을 κ±°μΉ˜λŠ” 인터프리터와 컴파일러λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜λŠ” 언어이닀.

μ»΄νŒŒμΌλŸ¬λŠ” κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μΈλ° 기계어가 μ•„λ‹Œ λ°”μ΄νŠΈμ½”λ“œλ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μžλ°” 컴파일러라고 λΆ€λ₯΄λŠ” μ΄μœ λŠ” λ°”μ΄νŠΈμ½”λ“œλŠ” κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” JVM을 μœ„ν•œ 언어이고 JVM도 기계이기 λ•Œλ¬Έμ— μžλ°” 컴파일러라고 λΆ€λ₯Έλ‹€.

μžλ°” μΈν„°ν”„λ¦¬ν„°λŠ μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λœ λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ‹€λ₯Έ ν™˜κ²½μ˜ JVMμ—μ„œ μ‹€ν–‰ν•  수 μžˆλ„λ‘ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” 역할을 ν•œλ‹€.

ν™˜κ²½μ— ꡬ애받지 μ•ŠλŠ”λ‹€λŠ” μΈν„°ν”„λ¦¬ν„°μ˜ μž₯점을 μ΄μš©ν•˜κΈ° μœ„ν•΄ 컴파일러둜 μ€‘κ°„μ–Έμ–΄λ‘œ λ³€ν™˜ ν›„ 이λ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜λŠ” 방식을 μ΄μš©ν•œλ‹€.

컴파일 ν•˜λŠ” 방법

컴파일 이름 κ·ΈλŒ€λ‘œ μžλ°” 컴파일러λ₯Ό μ΄μš©ν•΄ μžλ°”μ½”λ“œλ₯Ό λ°”μ΄νŠΈμ½”λ“œ(.class파일)둜 λ³€ν™˜ν•˜λŠ” κ²ƒμœΌλ‘œ μ„€μΉ˜ν•œ jdk의 binν΄λ”μ•ˆμ— javacμ΄λΌλŠ” μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 이λ₯Ό μ΄μš©ν•˜λ©΄ λœλ‹€.

javac hello.world.java

컴파일 κ³Όμ •

  1. μ–΄νœ˜ 뢄석 : public, class, operator(μ—°μ‚°μž,κ΄„ν˜Έλ“±), λ¦¬ν„°λŸ΄(μƒμˆ˜), λ“±μœΌλ‘œ λΆ„μ„ν•˜μ—¬ λ‚˜λˆˆκ²ƒμ„ μ–΄νœ˜μ†ŒλΌκ³  ν•˜λ©° 이 μ–΄νœ˜μ†Œλ“€μ„ ν•˜λ‚˜μ˜ 슀트림(토큰 슀트림)으둜 λ§Œλ“œλŠ” κ³Όμ •

  2. ꡬ문 뢄석 : ν† ν°μŠ€νŠΈλ¦Όμ„ 톡해 문법에 λ§žλŠ”μ§€ ν™•μΈν•˜κ³  ν‹€λ Έλ‹€λ©΄ Syntax errorλ₯Ό λ„μš΄λ‹€.

  3. 의미 뢄석 : νƒ€μž…κ²€μ‚¬λ‚˜ μžλ™ νƒ€μž… λ³€ν™˜μ„ μˆ˜ν–‰ν•˜μ—¬ κ²€μ‚¬ν•˜κ³  μ—λŸ¬λ₯Ό λ„μš΄λ‹€.

  4. 쀑간 μ½”λ“œ(λ°”μ΄νŠΈ μ½”λ“œ) 생성

싀행방법

λŒ€λΆ€λΆ„μ€ IDEλ₯Ό 톡해 μ‹€ν–‰ν•˜λ‚˜ CLI의 javaλͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜μ—¬ 싀행이가λŠ₯ν•˜λ‹€.

default νŒ¨ν‚€μ§€λΌλ©΄ λ°”λ‘œ 파일λͺ…을 톡해 싀행이 κ°€λŠ₯ν•˜λ©° packageλ₯Ό λͺ…μ‹œν•˜μ—¬ 싀행도 κ°€λŠ₯ν•˜λ‹€.

java hello_world

java java.me.example.hello_world

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

μœ„μ—μ„œ μ„€λͺ…것 처럼 JVMμ΄λΌλŠ” 기계가 이해할 수 μžˆλŠ” 언어이닀.

λ•Œλ¬Έμ— μžλ°”μ½”λ“œλ₯Ό λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ³€ν™˜ν•˜λŠ” 것을 μžλ°” 컴파일러라고 λΆ€λ₯Έλ‹€.

JVM κ΅¬μ„±μš”μ†Œ

  • Class Loader : λ°”μ΄νŠΈ μ½”λ“œ(.class 파일)λ₯Ό JVMλ‚΄λ‘œ λ‘œλ”©ν•˜κ³  링크λ₯Ό 톡해 λ°°μΉ˜ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰

    λŸ°νƒ€μž„ μ‹œμ— λ™μ μœΌλ‘œ ν΄λž˜μŠ€λ“€μ„ λ‘œλ“œν•˜κΈ° λ•Œλ¬Έμ— μ΄λ•Œ 클래슀λ₯Ό 처음 μ°Έμ‘°ν•œλ‹€.

    λ‘œλ”©μ‹œμ— ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 클래슀λ₯Ό 찾을 μˆ˜μ—†λ‹€κ³  μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

  • Execution Engine : 클래슀λ₯Ό μ‹€ν–‰ μ‹œν‚€λŠ” μ—­ν• λ‘œ JVM을 μœ„ν•œ λ°”μ΄νŠΈμ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€κ²½ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰

    • Interpreter : λ°”μ΄νŠΈ μ½”λ“œλ₯Ό λͺ…λ Ήμ–΄ λ‹¨μœ„λ‘œ μ½μ–΄μ„œ μ‹€ν–‰ν•˜κ³  ν•œ 쀄씩 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 속도가 λŠλ¦¬λ‹€λŠ” 말이 λ‚˜μ˜¨λ‹€.

    • JIT (Just In Time) : μΈν„°ν”„λ¦¬ν„°μ˜ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•œ 컴파일러둜 인터프리터 λ°©μ‹μœΌλ‘œ μ‹€ν–‰ν•˜λ‹€κ°€ μ μ ˆν•œ μ‹œμ μ— λ°”μ΄νŠΈμ½”λ“œ 전체λ₯Ό μ»΄νŒŒμΌν•˜μ—¬ κΈ°κ³„μ–΄λ‘œ λ°”κΎΈμ–΄ μ‹€ν–‰ν•˜λŠ” 방식

      κΈ°κ³„μ–΄λŠ” μΊμ‹œμ— λ³΄κ΄€ν•˜κΈ° λ•Œλ¬Έμ— ν•œ 번 컴파일된 μ½”λ“œλŠ” λΉ λ₯΄κ²Œ μˆ˜ν–‰μ΄ κ°€λŠ₯ν•˜λ‚˜ ν•œ 번만 μ‹€ν–‰λ˜λŠ” μ½”λ“œλΌλ©΄ μ»΄νŒŒμΌν•˜μ§€ μ•Šκ³  μΈν„°ν”„λ¦¬νŒ…ν•˜λŠ” 것이 μœ λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— JIT컴파일러λ₯Ό μ‚¬μš©ν•˜λŠ” JVM듀은 λ‚΄λΆ€μ μœΌλ‘œ λ©”μ„œλ“œμ˜ λΉˆλ„λ₯Ό μ²΄ν¬ν•˜κ³  정도λ₯Ό λ„˜μ—ˆμ„ 경우 μˆ˜ν–‰ν•˜λŠ” μ‹μœΌλ‘œ μŠ€μΌ€μ€„λ§ν•œλ‹€.

    • Garbage Collector : μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μ²΄ν¬ν•˜κ³  μ œκ±°ν•˜λŠ” garbage Collection을 μˆ˜ν–‰ν•˜λŠ” μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•œλ‹€.

Runtime Data Area

JVMλ‚΄μ˜ λ©”λͺ¨λ¦¬

  • PC Register : μŠ€λ ˆλ“œκ°€ μ–΄λ–€ 뢀뢄을 μ–΄λ–€ λͺ…λ ΉμœΌλ‘œ μ‹€ν–‰ν• μ§€λ₯Ό κΈ°λ‘ν•˜λŠ” λΆ€λΆ„μœΌλ‘œ ν˜„μž¬ 싀행쀑인 λ©”μ„œλ“œκ°€ λ„€μ΄ν‹°λΈŒκ°€ μ•„λ‹ˆλ©΄ JVMλͺ…λ Ήμ–΄ μœ„μΉ˜μ— μ €μž₯되고 λ„€μ΄ν‹°λΈŒμ΄λ©΄ μ €μž₯λ˜λŠ” 값은 μ •μ˜ λ˜μ§€ μ•Šκ³  CPU의 Register와 λ‹€λ₯΄κ²Œ 연산을 μœ„ν•΄ ν•„μš”ν•œ ν”Όμ—°μ‚°μžλ₯Ό μž„μ‹œλ‘œ μ €μž₯ν•˜κΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.

    ν˜„μž¬ μˆ˜ν–‰μ€‘μΈ JVM λͺ…λ Ήμ˜ μ£Όμ†Œλ₯Ό κ°–λŠ”λ‹€.

  • JVM Stack : λ§€κ°œλ³€μˆ˜, μ§€μ—­λ³€μˆ˜, 리턴 κ°’λ“± μŠ€λ ˆλ“œλ‚˜ λ©”μ„œλ“œμ˜ 데이터듀을 μž„μ‹œλ‘œ μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ μŠ€λ ˆλ“œλ§ˆλ‹€ λ³„λ„μ˜ 곡간을 κ°–κ³ μžˆμœΌλ©°, λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ λ•Œλ§ˆλ‹€ ν”„λ ˆμž„μ΄ μƒμ„±λ˜μ–΄ 이곳에 μž„μ‹œ λ°μ΄ν„°κ³΅κ°„μœΌλ‘œ μ‚¬μš©ν•˜κ³  λ©”μ„œλ“œκ°€ λλ‚˜λ©΄ ν”„λ ˆμž„μ€ μ‚­μ œλ˜λ©° μŠ€λ ˆλ“œκ°€ μ’…λ£Œμ‹œ μŠ€νƒκ³΅κ°„λ„ μ œκ±°λœλ‹€.

  • Native Method Stack : λ°”μ΄νŠΈ μ½”λ“œκ°€ μ•„λ‹Œ κΈ°κ³„μ–΄λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€λŠ” κ³΅κ°„μœΌλ‘œ μžλ°”κ°€ μ•„λ‹Œ λ‹€λ₯Έμ–Έμ–΄λ‘œ μž‘μ„±λœ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μŠ€νƒμ΄λ‹€.

  • Heap : μΈμŠ€ν„΄μŠ€ν™” 된 λͺ¨λ“  ν΄λž˜μŠ€μ™€ λ°°μ—΄, 객체λ₯Ό μ €μž₯ν•˜λŠ” 가상 λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ λͺ¨λ“  JVMμŠ€λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” μžμ›μ΄κ³  GC에 μ˜ν•΄μ„œλ§Œ μžμ›μ΄ νšŒμˆ˜κ°€λŠ₯ν•˜λ‹€.

    • Permanent Generation : μƒμ„±λœ κ°μ²΄λ“€μ˜ 정보 μ£Όμ†Œκ°’μ΄ μ €μž₯된 κ³΅κ°„μœΌλ‘œ 클래슀 λ‘œλ”μ— μ˜ν•΄ λ‘œλ“œλ˜λŠ” class,Methodλ“±μ˜ 메타정보가 μ €μž₯λ˜λŠ” μ˜μ—­

      Reflection(객체λ₯Ό 톡해 클래슀의 정보λ₯Ό λΆ„μ„ν•΄λ‚΄λŠ” ν”„λ‘œκ·Έλž¨ 기법)을 μ‚¬μš©ν•˜μ—¬ λ™μ μœΌλ‘œ ν΄λž˜μŠ€κ°€ λ‘œλ”©λ˜λŠ” κ²½μš°μ—λ„ μ‚¬μš©λœλ‹€.

    • Young Generation

      • Eden : 객체듀이 졜초둜 μƒμ„±λ˜λŠ” 곡간

      • Survivor 0/1 : Edenμ—μ„œ μ°Έμ‘°λ˜λŠ” 객체듀이 μ €μž₯λ˜λŠ” 곡간

      λŒ€λΆ€λΆ„μ˜ 객체듀이 금방 μ ‘κ·Ό λΆˆκ°€ μƒνƒœκ°€ 되기 λ•Œλ¬Έμ— λ§Žμ€ 객체가 이 μ˜μ—­μ— μƒμ„±λ˜μ—ˆλ‹€κ°€ 사라지고 이 μ˜μ—­μ—μ„œ 객체가 μ‚¬λΌμ§ˆλ•Œ Minor GCκ°€ λ°œμƒν•œλ‹€κ³  ν•œλ‹€.

    • Old Generation : μ ‘κ·Ό λΆˆκ°€λŠ₯ μƒνƒœλ‘œ λ°”λ€Œμ§€ μ•Šκ³  Young μ˜μ—­μ— 남아 μžˆλŠ” 객체가 μ—¬κΈ°λ‘œ λ³΅μ‚¬λ˜λ©°, Young μ˜μ—­λ³΄λ‹€ 크게 ν• λ‹Ήλ˜κ³  GCλŠ” 적게 λ°œμƒν•œλ‹€.

      이 μ˜μ—­μ—μ„œ 객체가 μ‚¬λΌμ§ˆ λ•Œ Major GCκ°€ λ°œμƒν•œλ‹€κ³  ν•œλ‹€.

  • Method Area : 클래슀 정보λ₯Ό 처음 λ©”λͺ¨λ¦¬ 곡간에 μ˜¬λ¦΄λ•Œ μ΄ˆκΈ°ν™” λŒ€μƒμ„ μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ λŸ°νƒ€μž„ μƒμˆ˜ ν’€, ν•„λ“œμ™€ λ©”μ„œλ“œ 데이터, μƒμ„±μž, λ©”μ„œλ“œμ˜ μ½”λ“œ λ‚΄μš©μ„ μ €μž₯ν•œλ‹€. (사싀상 컴파일 된 λ°”μ΄νŠΈμ½”λ“œμ˜ λŒ€λΆ€λΆ„μ΄ λ©”μ†Œλ“œ λ°”μ΄νŠΈ μ½”λ“œμ΄κ³  λ°”μ΄νŠΈμ½”λ“œμ—λŠ” λŸ°νƒ€μž„ μƒμˆ˜ν’€μ΄ μ•„λ‹ˆλΌ κ·Έλƒ₯ μƒμˆ˜ν’€μ΄ ν¬ν•¨λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— 거의 λͺ¨λ“  λ°”μ΄νŠΈμ½”λ“œκ°€ μ˜¬λΌκ°„λ‹€κ³  봐도 λ¬΄λ°©ν•˜λ‹€.)

    λŸ°νƒ€μž„ μƒμˆ˜ν’€μ€ 이 μƒμˆ˜ν’€μ„ λ°”νƒ•μœΌλ‘œ λŸ°νƒ€μž„(λ©”μ„œλ“œ μ˜μ—­μ— μ €μž₯λ λ•Œ)에 λ§Œλ“€μ–΄μ§„λ‹€.

    - λŸ°νƒ€μž„ μƒμˆ˜ν’€ : μ»΄νŒŒμΌνƒ€μž„μ— 이미 μ•Œ 수 μžˆλŠ” 숫자 λ¦¬ν„°λŸ΄ κ°’λΆ€ν„° λŸ°νƒ€μž„μ— ν•΄μ„λ˜λŠ” λ©”μ„œλ“œμ™€ ν•„λ“œμ˜ μ°Έμ‘°κΉŒμ§€λ₯Ό ν¬κ΄„ν•˜λŠ” μ—¬λŸ¬ μ’…λ₯˜μ˜ μƒμˆ˜κ°€ 포함

JDK와 JRE 차이

  • JDK : Java Development kit의 μ•½μžλ‘œ 컴파일러,μ—­ μ–΄μ…ˆλΈ”λŸ¬,디버거,μ˜μ‘΄κ΄€κ³„ 뢄석등 κ°œλ°œμ— ν•„μš”ν•œ 도ꡬλ₯Ό 제곡

  • JRE : Java Runtime Envirmont의 μ•½μžλ‘œ Class Loader, μ‹€ν–‰ λͺ…λ Ή(java)와 같이 싀행에 ν•„μš”ν•œ 라이브러리λ₯Ό 제곡

  • JVM : Java Virtual Machine의 μ•½μžλ‘œ 인터프리터, JIT등을 μ΄μš©ν•˜μ—¬ λ°”μ΄νŠΈ μ½”λ“œλ₯Ό OS에 맞게 κΈ°κ³„μ–΄λ‘œ λ³€κ²½ν•˜μ—¬ OS에 λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ 될 수 μžˆλ„λ‘ 좔상화λ₯Ό 제곡

OracleJDK 와 OpenJDK의 차이

JVM은 ORACLEμ΄λΌλŠ” 기업이 JVM의 ν‘œμ€€μ„ μ •μ˜ν•˜λ©΄ Amazonμ΄λ‚˜ Oracle,Azul와 같은 기업듀이 ν‘œμ€€μ— 따라 싀물을 λ§Œλ“€μ–΄ μ œκ³΅ν•˜κ²Œ λœλ‹€.

μ΄λ•Œ, μŠ€νŽ™κ³Ό ν‘œμ€€μ„ μ •μ˜ν•œ Oracle이 λ°°ν¬ν•œ JDKκ°€ OracleJDK이며, 가격 정책이 μ‘΄μž¬ν•œλ‹€.

λ‹€λ₯Έ 기업듀이 무료둜 λ°°ν¬ν•œ JDKλ₯Ό OpenJDK라고 ν•œλ‹€.


Reference

https://asfirstalways.tistory.com/158 https://m.blog.naver.com/ehcibear314/221228200531 https://catch-me-java.tistory.com/9 https://homoefficio.github.io/2019/01/31/Back-to-the-Essence-Java-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C-%EC%8B%A4%ED%96%89%EA%B9%8C%EC%A7%80-2/

PreviousEnumNextμ—°μ‚°μž

Last updated 3 years ago

Garbage Collector의 μžμ„Έν•œ λ‚΄μš©
사진 좜처
사진 좜처
memory
jvm