[Java] Java의 메모리 구조, NullPointerException, String
Java

[Java] Java의 메모리 구조, NullPointerException, String

반응형

 

메모리 사용 영역

1. 메서드 영역

  • 코드에서 사용되는 클래스들을 클래스 로더로 읽음
  • 정적(static) 변수, 정적 메서드
  • JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역

 

 

2. 힙 영역

  • 객체와 배열이 생성되는 영역
  • JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
  • 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 쓰레기로 취급하고, JVM은 GC를 실행시켜 힙 영역에서 자동으로 제거함

 

 

3. 스택 영역

  • 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당됨
  • 메서드를 호출할 때마다 프레임을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.
  • 기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만, 참조 타입 변수는 값이 아니라 힙 영역이나 메소드 영역의 객체 주소를 가진다.
  • 선언된 변수는 실행 순서에 따라 스택에 생성되고 소멸된다.

 

NullPointerException

  • 참조 타입 변수 잘못 사용하면 발생
  • 참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없음
  • 참조 타입 변수 사용 → 객체 사용인데 참조할 객체가 없으므로 사용할 수 없음

 

String

  • 자바는 문자열을 String 변수에 저장함
  • 문자열을 String 변수에 저장한다는 말은 틀린 표현 → 문자열은 String 객체로 생성되고 변수는 String 객체를 참조함

 

아래 둘은 다른 주소를 가짐

String name = "이범진";
String name1= "자바";

 

 

자바는 문자열 리터럴이 동일하다면 String 객체를 공유한다.

String name1 = "이범진";
String name2 = "이범진";

 

new 연산자를 사용해 String 객체를 생성하면 다른 주소를 참조한다.

String name1 = new String("이범진");
String name2 = new String("이범진");

 

 

출처

https://sites.google.com/site/kingcallkorea/web/gyoyugq-a/javagibonmemoligujo

반응형

'Java' 카테고리의 다른 글

[Java] 상속, final, 자동 형변환  (0) 2021.06.22
[Java] 객체지향 프로그래밍(OOP)이란?  (0) 2021.06.22
[Java] 기본 타입과 참조 타입  (0) 2021.06.21
[Java] JVM이란?  (0) 2021.06.21
[Java] Java의 특징  (0) 2021.06.21