본문 바로가기

Java

자바 메모리 영역

1) 메소드(Method) 영역

 

클래스를 로더로 읽어 클래스 별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 생성자 코드 등으로 분류해서 저장,

 

전역변수, static변수 할당, JVM 시작시 생성, 모든 스레드가 공유

 

2) 스택(Stack) 영역

 

매개변수(파라미터), 지역변수(로컬변수), 함수(메소드)등 할당

 

LIFO방식, 사용이 끝나면 바로 소멸, 컴파일 시 메모리 할당

 

3) 힙(Heap) 영역  

 

객체(인스턴스) 저장, 가비지컬렉터가 메모리 관리

 

참조하는 변수나 필드가 없으면 의미 없는 객체로 분류하여 제거

 

 

 

 

 

+++

전역/지역/정적 변수란?

 

1) 전역변수 - 프로그램에서 전반적으로 다 사용가능

 

2) 지역(로컬)변수 - 함수 안에서만 사용가능

 

3) 정적(Static)변수 - 한 번 정의하면 프로그램 종료 시까지 메모리에 남아있음

 

 

 

+++

자바 데이터 타입

 

1) 기본형(Primitive Type) :

변수에 값 자체를 저장하는 int, char, boolean,,,  8가지

스택 메모리 영역에 실제 값을 저장

 

2) 참조형(Reference Type) :

기본형 이외 모든 것(String, array, 클래스, 인터페이스,,,)

실제 값은 힙 영역에 저장하고 스택 영역에 그 주소(위치)를 저장

 

 

 

+++

call by referencecall by value 의 차이점?

 

call by reference : 매개변수로 원래 주소 값을 전달하는 방식, 자바에서는 객체를 매개변수로 전달하였을 경우에 해당한다.

 

call by value : 매개변수로 기본 데이터 형을 사용한다. 주어진 값을 복사하여 처리하는 방식으로 함수 내의 처리결과는 함수 밖의 변수에는 영향을 미치지 않는다(C언어의 Swap()).

728x90
반응형