2022-04-23-자바의-메모리-모델과-Object-클래스
본문 바로가기
CS Study/JAVA

2022-04-23-자바의-메모리-모델과-Object-클래스

by KyeongMin 2022. 4. 24.
728x90
반응형

01.자바 가상머신의 메모리 모델

  • 운영체제 관점에서 가상머신도 그냥 프로그램
    • 운영체제가 일반 프로그램에게 4G의 메모리 공간을 할당해주면 JVM에게도 4G메모리 공간을 할당
  • 자바 프로그램이 두 개 실행 되면 가상머신도 두개 실행

01.1 메모리영역의 종류

메소드 영역

  • 메소드의 바이트 코드, static 변수

스택 영역

  • 지역변수, 매개변수

힙영역

  • 인스턴스

02.메모리 모델 설명

  • 대게 Hello.java -> xxx.class 이렇게 생성이되는데
    • xxx에는 컴파일러의 결과 같은 실행 명령어들이 있음
    • 즉, 자바소스코드의 바이트 코드가 담김
  • 우리가 만드는 소스는 main -> 메소드들을 호출하는 식인데
    • 메소드의 호출에 대한 정보가 담긴다고 생각하면 쉬울듯

03.메소드 영역

  • 메소드 영역에는 바이트 코드와 static 변수가 있는데
    • 이것들의 특징은 프로그램 종료시 까지 필요한 것들
  • 프로그램 종료시까지 사라지면 안되는 것들이 들어간다고 생각하면 좋음
    • 주로 메소드들이 많긴함

04.스택 영역

  • 지역변수와 매개변수가 들어감
    • 임시저장의 요소가 들어간다고 생각하면 쉬움
public static void adder(int n1, int n2){
	int result = n1 + n2;
}
  • 위와 같이 있는 경우

05.힙 영역

  • 인스턴스가 저장되는 영역
    • 왜 힙에 인스턴스를 저장하는가?
    • 참조변수인 지역변수는 스택에 있는데 같이 스택에 있으면 안되는지에 대한 대답
    • 스택에 저장되는 것들은 대게 리턴을 만나면 사라지는데 만약에 우리가 참조변수로 인스턴스를 참조했는데 그 참조가 끊어졌을때
    • 그냥 같이 사라져도 되지 않는다라는 의문이 생김
    • 그렇게 되면 한개일때는 문제가 되지 않지만 두개를 참조하고 있다면
      • 그렇게 되면 안됨
      • 참조가 하나 지워졌다고 인스턴스가 같이 지우면 문제생기기때문에 따로 관리를 함
      public static void simple(){
      	String str1 = new String("abc");
          String str2 = str1;
      }
  • 하나의 인스턴스를 둘 이상 참조변수가 참조하는 경우가 힙에 저장하는 이유이고
  • 이 참조변수가 끊어짐을 판별하여 jvm에서 하는 액션 그것을 가비지 컬렉션이라고하는데 지워주는일을 대신해준다.

https://3dpit.github.io/Java/2022-04-23-%EC%9E%90%EB%B0%94%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%AA%A8%EB%8D%B8%EA%B3%BC-Object-%ED%81%B4%EB%9E%98%EC%8A%A4/

 

자바의 메모리 모델과 Object 클래스

2022-04-23-자바의-메모리-모델과-Object-클래스 목차 01.자바 가상머신의 메모리 모델 01.1 메모리영역의 종류 메소드 영역 스택 영역 힙영역 02.메모리 모델 설명 03.메소드 영역 04.스택 영역 05.힙 영

3dpit.github.io

 

 

728x90
반응형

'CS Study > JAVA' 카테고리의 다른 글

2022-05-15-쓰레드와동기화  (0) 2022.05.16
2022-04-23-자바-기초정리1  (0) 2022.04.24
2021.10.05_java-static  (0) 2021.10.05
2021.10.03_정보은닉과 캡슐화  (0) 2021.10.03
2021.09.13_자바기초정리1  (0) 2021.09.14

댓글