본문 바로가기

Study/JAVA

Array(1)

 

short a[] = new short[6]; //short 덩어리 6개를 연속해서 만듦

int[] b = new int[3]; //int 덩어리 3개를 연속해서 만듦

 

Reference

System.identityHashCode() : 메모리 상에 존재하는 객체의 hash code 값을 반환

public class Main{
    static void print(int[] a){
        for(int i = 0; i < 5; i++){
            System.out.println(a[i] + ",");
        }System.out.println();
    }
    
    //System.identityHashCode
    //: 메모리 상에 존재하는 개체의 hash code 값 반환
    //메모리 상에서 위치 값을 가지고 있는 개체에 대한 hash code 값은
    //유일한 값이기에 메모리 주소값처럼 생각하면됨
    
    
    public static void main(String[] args){
        int[] a = null;
        System.out.println("address a = " + System.identityHashCode(a));
        
        a = new int[5];
        System.out.println("address a = " + System.identityHashCode(a));
        print(a);
        
        int[] b = null;
        b = a;
        System.out.println("address b = " + System.identityHashCode(b));
        for(int i = 0; i < 5; i++){
            b[i] = i * 10;
        }print(a);
    }
}

 

 

Memory

 

프로그램은 '메모리'에 공간을 만들어서 시작하고, 그 공간을 없애면서 끝이 난다.

 

1. Stack area  스택 영역

- 함수를 구성하다보면 함수 내에서 수많은 변수를 생성하게 된다.

- 인자, 지역변수, 반환변수 등.

- 이 영역의 특성은 일시적임

- 즉, 공간의 생성도 시스템이 알아서 만들어내고, 함수의 실행이 종료되면 해당 공간도 바로 없어져 버림

- 휘발성이 강한 영역이기때문에 해당 영역의 크기가 크지 않음

 

- 시스템 설정에서 Stack Area보다 크게 설정할 수 있지만, 최대치도 크지 않음을 인지해야 함

- 만약, 설정된 크기 이상의 메모리를 할당하려 한다면, 에러인 Stack Overflow가 발생함

- 이것은 할당된 양이 흘러넘쳐 'Heap area'를 침범한 것임

 

- 함수가 호출될 때 시스템에 의해 생성되고 -> 함수가 종료될 때 시스템에 의해 해제됨

 

2. Heap area 메모리에서 가장 많은 영역을 차지하는 공간

- 보통 '동적 할당' 이라고 말을 하는데, 이때 사용되는 메모리 영역임

- 사용자에 의해 아주 많은 공간이 필요하다고 판단되는 경우, Heap Area에 공간을 동적으로 할당하여서 사용하게 됨

- 사용자가 할당하였기 때문에, 사용자가 해제시켜야 하는 것이 원칙이지만,

- java에서는 사용되지 않는 메모리의 영역을 알아서 해제시켜주는 기능이 존재함

 

- 'new' 연산자를 통해 동적으로 메모리에 공간을 할당할 수 있는데,

- 일정한 로직에 의해 System.gc() 함수, 가비지 컬렉션 함수 등을 통해 시스템이 알아서 해제시키도록 처리함

 

- Heap area도 역시나 할당 공간이 부족하여 흘러 넘치게 되면,

- Heap Overflow 에러가 발생함

 

- 임의의 시점에 개발자에 의해 생성되고 -> Idle 시점에 시스템에 의해 해제됨

 

3. Static / Data Area 스태틱 or 데이터 영역

- 정적변수 (Static variable), 전역 변수(Global variable)로 구성된 변수들이 생성되는 공간

 

- 개발자에 의해 만들어지고 ㅅ라지고 하는 동적 움직임이 없는 정적인 영역

- 프로그램이 실행될때 시스템에 의해 공간이 할당되고, 프로그램이 종료될 때 시스템이 본인이 만든 공간을 해제시킴

- 공간이 만들어진 이후 끝날 때까지 해당 공간은 가만히 유지되는것

- 이 공간 역시도 적당한 수준에서 제한적으로 사용하는 것이 좋음

 

- 프로그램이 시작 될때 시스템에 의해 생성되고 -> 프로그램이 종료될 때 시스템에 의해 해제됨

 

 

 

 

 

 

 

 

 

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

bit operator  (0) 2021.02.16
2-D Array  (0) 2021.02.16
1 - D Array  (0) 2021.02.15
Array(2)  (0) 2021.02.15
OkHttp  (0) 2020.12.24