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에서 하는 액션 그것을 가비지 컬렉션이라고하는데 지워주는일을 대신해준다.
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 |
댓글