정리정리정리

java null 키워드로 메모리 효율적으로 관리하기. 본문

JAVA/기본이 중요하지.

java null 키워드로 메모리 효율적으로 관리하기.

_JSPark 2016. 5. 4. 22:39

자바 기본형(Primitive Type) 변수들(boolean, char, byte, short, int, long, float, double)은 가각 변수형에 따라서 기본값이 존재한다.

ex) boolean : false, int : 0


이외의 참조형(Reference Type) 변수들은 기본값이 존재하지 않는다. 이런 변수들은 값이없는 상태로 이름만 가지고 있으며 이런상태의 변수는 널(null) 값을 가지고 있다고 말하며 자바에서도 이러한 상태를 나타내는 null 키워드가 존재한다.


변수에 값을 넣는다는 의미는 곧 메모리에 데이터를 새롭게 생성했다는 의미이며 

String value = null; 와같이 선은을 하면 value 라는 변수는 JVM 메모리에서 참조하는 변숫값이 없음을 의미한다.

곧 value 라는 변수는 초기화될때 어떤 값으로도 초기화 되지 않음을 의미한다. 비록 값이 없는 변수라도 value라는 변수는 초기화 되었으므로 개발자는 코딩 시에 value라는 변수를 사용할수 있다.


혼동하지 말아야 할 것은 널(null)과 빈 값(blank, 더블쿼테이션 마크 두개 붙여사용)은 서로 같지 않다는 것이다.



 public class StringTest {

public static void main(String[] args) {

String str1 = null;

String str2 = "";

System.out.println("str1 : "+System.identityHashCode(str1));

System.out.println("str2 : "+System.identityHashCode(str2));

}


 }



str1 : 0

str2 : 366712642 


str1과 str2의 식별 해시코드가 서로 같지 않다.

null 키워드로 선언한 변수 str1의 해시코드는 항상 0이다. 이와 반대로 str2 변수는 366712642라는 해시 코드를 가지고 있다.


결론적으로 빈값은 blank 문자로 JVM에서 하나의 메모리를 참조하고 있다.

그러므로 blank 문자와 null키워드는 자바를 다룰때에 항상 구분해서 사용하여야 한다.

2 Comments
  • 프로필사진 만델라 2016.12.23 00:42 신고 님 잘읽었어요~!!!!
    요새 저도 메모리관리에 관심이 있는데요
    글은 읽고 있지만..이게 맞는질 확인할 방법이 있어야지 말이지요.

    메모리에 할당시킨 객체를 참조하는 참조변수
    예를 들어 Student s = new Student();

    해두고 s를 null로 하면 s가 가리키고 있던 객체값은 바로 사라지나요???
    그 가비지컬렉터라는놈이 언제 가져가는지 아시나요???
    null; 하자마자 바로 사라지는건가요???
    가비지컬렉터라는 것도 활동하는 주기가 있을까요???
    가비지컬렉터가 참조변수에 의해 가리켜지고 있지 않는 객체값들을 어떠한 주기에 의해 소멸시키나욤?
    (질문을 드리다보니 있을것 같아보이네요...결국 null을 한다해서 바로 사라지진 않겠구나 하는 예상도 되구요..맞을까요?ㅎ)

    초면에 죄송하지만 답변 주시면 감사하겠습니다~!
  • 프로필사진 _JSPark 2016.12.27 22:06 신고 안녕하세요.
    저도 배우는 입장이라 답변을 드리기가 조심스럽네요. 제가 아는 한에 간단히 답변을 드리자면 null을 가르키게 한다고 해서 바로 메모리에서 삭제되지는 않습니다. GC가 발생하는 시점에서 해당 객체가 사용되지 않음이 판단되는 시점에 제거가 되겠지요. GC도 주기가 있습니다. 수동으로 강제로 작동시킬수도 있고 튜닝도 가능하구요.
    관련해서 좋은글도 많겠지만
    http://jusungpark.tistory.com/12 (JVM (Java Virtual Machine)) 장 한번 보시면 쫌더 대략적인 그림을 그리실수 있을것 같습니다.
댓글쓰기 폼