■ 자바의 경우는 int arr[ ]; 로 표현한다. 즉 시작주소를 위처럼 쓰지 않는다. (위는 C언어이다.)
■ HEAP
STACK은 임시 저장 공간이며, 크기가 작음 (지역변수를 저장하는 공간)
HEAP은 반 영구적 저장 공간이며, 크기가 큼 (new를 해줘야 한다.) 저장공간이 크기 때문에 heap을 쓴다.
Java의 배열은 HEAP을 사용
■ 포인터 형 변수
주소를 저장하는 변수
Java의 배열은 포인터 형 변수
■ Garbage Collector
JVM은 HEAP 공간 할당과 반환을 수행
개발자의 오류를 최소화 함
프로그램의 안전성을 확보
■ 아래에서 위의 내용을 자세히 들여다보자.
■ 각 arr, newarr 마다 heap을 지정함
■ 여기서 문제가 발생한다.
arr 와 newarr 모두 같은 heap, 즉 같은 공간을 가리키게 된다. 이름만 다를 뿐 서로 같은 heap을 가리킨다.
■ 만약 arr, newarr 모두 heap의 데이터를 정리할려고 한다. arr는 아래쪽을 가리키니 아래쪽을 지운다. 그런데 newarr도 같은 공간을 가리키니 똑같이 해당 공간을 정리한다. 문제 발생한다! 지운곳을 또 지우니까! 그래서 오류가 나는 것이다. 그리고 arr가 원래 쓰던 heap공간은 계~~~속 떠돌게 된다. 아무도 쓰지 않는 공간을 활용도 못한다.
■ 여기까지는 C언어에서의 특징이다. 근데 java는 garbage collector가 이를 정리해준다. 그래서 좋다!
■위의 메모처럼 2줄로 쓰고 싶다면 new를 써야한다.
■편리한 배열의 초기화 방법 활용예제를 밑에서 보자.
■ 가능
■ 가능
■불가능
■2개씩 2개씩 겹쳐서 비교함. 그래서 스왑이 일어나지 않게되면 정렬을 멈추는 방식이다.
■학습정리
1. HEAP과 STACK
- STACK은 임시 저장 공간이며, 협소한 크기를 가짐
- HEAP은 반 영구적 저장 공간이며, 크기는 RAM과 유사함
2. 배열과 메모리 관리
- 저장 공간은 HEAP에 할당 됨
- 사용 후 반환은 JVM의 Garbage Collector가 대행
'컴퓨터공학 > 자바프로그래밍' 카테고리의 다른 글
11. 다차원 배열 (0) | 2024.07.08 |
---|---|
9. 데이터를 모아서 관리하는 배열 (0) | 2024.07.08 |
8. while문, 반복문의 중첩 (0) | 2024.07.08 |
7. 컴퓨터의 강점을 극대화하는 반복문 (0) | 2024.06.29 |
6. 조건문 심화 (0) | 2024.06.29 |