😀
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • 진행하기에 앞서..
    • Code Review History
      • 한방 쿼리 vs 애플리케이션에서 조립
      • DB에서 TIMESTAMP와 DATETIME 타입의 차이
      • Service는 어떤 dto를 반환해야 할까?
        • 확장 질문
  • Legacy
    • 실무 경험 & 팁
      • Kotlin
        • 파일 조작하기
      • Infra
        • Lightsail
          • 인스턴스 구성 예제
        • 공인 ip 확인하기
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • 정적 문서 내보내기
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request 추적하기 with HAR File
    • Study
      • Language
        • Java
          • Copy
          • 메모리 관리
          • Garbage Collection
          • 자료구조
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql 설정의 단점
          • @GeneratedValue strategy
          • Entity의 field type
        • Logback
          • 기본 설정
        • Monitoring
          • VisualVM
            • 설치
            • 문자열 생성으로 테스트
          • nGrinder
      • Database
        • MySQL
          • SQL 문 수행 절차
          • 트랜잭션과 잠금
          • 인덱스
      • Infra
        • AWS
          • S3
            • 용어
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP 구성
            • HTTP 그외
          • REST API
            • GET 메서드에 payload를 사용해도 되는가?
            • 특정 목적의 API는 어떻게 만들어야 할까?
          • TCP / UDP
          • 인터넷의 작동 원리
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • 한 번에 끝내는 Spring 완.전.판 초격차 패키지 Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot 버전별 변화
          • SpEL, Spring Expression Language
          • Validation
        • 이펙티브 자바 3판
          • 2장 객체 생성과 파괴
            • 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라
            • 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라
            • 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
            • 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라
            • 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
            • 아이템 7. 다 쓴 객체 참조를 해제하라
          • 3장 모든 객체의 공통 메서드
            • 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라
            • 아이템 12. toString을 항상 재정의하라
            • 아이템 14. Comparable을 구현할지 고려하라
          • 4장 클래스와 인터페이스
      • Webinar
        • 요즘 힙한 스타트업의 DBDB DEEP한 이야기
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
  1. Legacy
  2. Study
  3. Language
  4. Java

메모리 관리

PreviousCopyNextGarbage Collection

Last updated 3 years ago

Was this helpful?

자바 애플리케이션은 JVM (Java Virtual Machine) 위에서 돌아가며 JVM 은 프로그램 실행동안 메모리를 관리해줍니다.

메모리 구조

Method

메소드 영역은 자바 프로그램에서 사용되는 클래스에 대한 정보와 함께 클래스 변수 (static variable)가 저장되는 영역입니다. JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일 (*.class)를 읽어들여, 해당 클래스에 대한 정보를 메소드 영역에 저장합니다.

Stack

자바 프로그램에서 메소드가 호출될 때 메소드의 스택 프레임이 저장되는 영역입니다.

  • heap 영역에 생성된 object 타입의 데이터의 참조 값이 할당됩니다.

  • primitive 타입의 데이터는 값과 함께 할당됩니다.

  • 지역변수들은 scope 에 따른 visibility 를 가집니다.

  • 각 thread 는 자신만의 stack 을 가집니다.

Heap

자바 프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역입니다.

  • heap 영역에는 주로 긴 생명주기를 가지는 데이터들이 저장됩니다.

    • 오브젝트는 크기가 크고, 서로 다른 코드 블럭에서 공유되는 경우가 많습니다.

  • stack 에 있는 데이터를 제외한 부분이라고 봐도 됩니다.

  • 모든 object 타입 (Integer, String, ArrayList, ...) 은 heap 영역에 생성됩니다.

  • 몇 개의 스레드가 존재하든 상관없이 하나의 heap 영역만 존재합니다.

  • heap 영역에 있는 오브젝트들을 가리키는 참조 값은 stack 에 있습니다.