[스프링 입문을 위한 자바 객체 지향의 원리와 이해] - 1

쓰옹·2023년 3월 27일
0

📙 Java 잡아🤏

목록 보기
23/25

이 포스팅은 김종민, ⌜스프링 입문을 위한 자바 객체 지향의 원리와 이해⌟ 을 읽고 정리했습니다.

자바 프로그래밍

자바 개발 환경

  • JDK: Java Development Kit
  • JRE: Java Runtime Environment
  • JVM: Java Virtual Machine

Write Once Run Anywhere
어떤 플랫폼(하드웨어와 OS의 조합)에서 작성했는지는 상관 없이 어디서든 프로그램 구동이 가능한 자바의 특성을 말한다.

데이터 저장 영역 - T 메모리 구조

  • Static 영역: 클래스 멤버 변수 저장
    • JVM 종료시까지 존재
  • Stack 영역: 지역 변수 저장
    • 외부 스택프레임(지역)에서 내부 스택프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능함
    • 지역이 사라지면 그 지역 변수도 메모리에서 사라짐
    • 다른 메서드 스택프레임의 내부 변수는 접근 불가 (메서드의 블랙박스화)
  • Heap 영역: 객체 멤버 변수 저장
    • 참조가 되지 않으면 가비지컬렉터에 의해 회수됨

프로그램 실행과 메모리 변화 예시

package example01;

public class Mouse {
	public String name;
    
    public void sing() {
    	System.out.println(name + "찍찍!");
    }
}

//============================================

package example01;

public class MouseDriver {
	public static void main(String[] args) {
    	Mouse mickey = new Mouse();
        mickey.name = "미키";
        
        mickey.sing();
        
        mickey = null;
    }
}

MouseDriver.class가 실행되면

  • JRE: main()메서드 있는지 확인 -- 존재 --> JVM 부팅
  • JVM: 목적 파일을 받아 실행
    • 전처리; 스태틱 영역에 java.lang 패키지 배치 -> 작성한 모든 클래스와 임포트 패키지 배치
      => static영역 - java.lang , Mouse.class, MouseDriver.class
    • main()메서드 실행
      -> main()스택 프레임에 args 변수공간 확보 -> mickey 변수공간 확보 -> new Mouse(); 힙 영역에 Mouse객체 배치 & 객체 참조변수 mickey== Mouse 객체에 대한 참조변수
      -> mickey가 참조하는 힙 영역 Mouse 객체에 접근해 name thrtjddp "미키" 할당 -> sing() 메서드 코드 실행 영역에서 실행(메모리 상 변화 無)->mickey = null; 객체참조 스택영역 mickey에 null 을 할당하면서 힙 영역에 존재하는 Mouse를 참조하지 않음 -> 가비지컬렉터(Garbage Collector)가 아무도 참조해주지 않는 Mouse 객체 수거 -> 힙 영역 비워짐
    • main() 메서드 닫는 중괄호
      ->스택프레임 소멸
  • JRE: JVM 종료 -> JRE 자체도 운영체제 상의 메모리에서 소멸
    프로그램 종료
profile
기록하자기록해!

0개의 댓글