데이터 저장장소
레지스터 : CPU에 있으며 가장 처리속도가 빠르다. 개수가 정해져 있어서 컴파일러가 필요할떄 할당.
우리가 직접 제어하지는 않고, 프로그램에서도 따로 언급하지 않는다.
스택(Stack) : RAM 영역에 있으며 스택 포인터를 이용해서 프로세서가 관리한다. 스택포인터는 데이터를 넣고 꺼낼때 그 값이 변경
된다. 자바 컴파일러는 스택에 저장할 데이터의 크기와 생명 주기를 정확히 알아야한다. 스택 포인터의 값을 변동시키는 코드를 생성
해야하기 때문이다. 이 영역은 프로그램의 유연성을 제한하므로 자바는 객체참조의 경우 이곳에 할당 하지만 객체 자신의 데이터는
이곳에 저장하지 않는다.
힙 (Heap) : RAM 영역에 있으며 자바의 모든 객체는 여기에 위치한다. 컴파일러는 얼마만큼의 힙 영역이 필요한지 얼마나 사용하는지
알 필요 없다. 이것이 힙의 장점이다. 그러므로 이 영역을 사용하면 프로그램의 유연성이 좋아진다. 객체 생성시에는 new 키워드를
사용하고 이를 실행할때 객체에 필요한 힙 영역이 할당된다. 그러나 스택에 비해서 메모리 할당시간이 오래 걸린다.
static 영역 : Static 도 RAM영역에 위치한다. 프로그램 실행동안 데이터를 계속 보존할 필요가 있을때 Static을 사용한다.
상수영역 : 프로그램 코드에 바로 지정한 상수영역
비 메모리 영역 : 데이터가 프로그램 밖에 저장되여있으면 프로그램이 실행되지 않아도 존재하며 프로그램의 제어를 받지 않는다.
예를들면 스트림 객체는 객체가 다른 매체에 저장될수 있도록 바이트 스트림으로 바뀐것으로 필요할때는 다시 메모리 객체로 환원한다.