JVM의 메모리 구조, 기본형 매개변수와 참조형 매개변수

Jaeho Kim·2022년 2월 24일
1

자바의정석

목록 보기
1/7
post-thumbnail

✏️ JVM의 메모리 구조

  • JVM ( 자바가상머신, Java Virtual Machine )
  • OS에 종속적이지 않음
    ( JVM을 통한 .java -> .class (bytecode 변환) -> jvm을 통한 해석 )
  • 메모리관리, Garbage collection 수행, 스택기반의 가상머신(스택, LIFO)
  • JVM 구성요소( 3가지 주요 영역 Method Area, Call stack, Heap )

스택 메모리 - 객체 참조변수
힙 영역 - 인스턴스

// 생성자를 통해 값을 넣었다면 값도 같이 저장

// 모든 메모리는 각자의 주소를 가지고 있음.
// 이는 jvm 스택구조이기 떄문에

Java Heap / 값 저장

  • 객체와 JRE 클래스들에게 메모리를 할당할때 사용
  • 우리가 객체를 만들 때 항상 힙 공간에 만들어짐
  • 가비지컬렉션은 더이상 힙 메모리에 참조하지 않는
    객체 정리
    java.lang.OutOfMemoryError

Java Stack / 실행 순서(스레드) 저장

  • LIFO (Last-In-First-Out)
  • 스레드를 실행하기 위해 사용.

✏️ 기본형 매개변수와 참조형 매개변수

  • 기본형 : 변수의 값을 일기만 할 수 있다.
  • 참조형 : 변수의 값을 읽고 변경할 수 있다.

예제 6-12) 직접대입하지 않아도, 해당 배열 주소값을 통해 그 배열의 값을 바꿀 수 있다.
예제 6-13) 직접 값을 반환해주지 않아도, 적용할 수 있다.

=> 값이 저장된 주소값을 안다면 그 대상에게 영향을 끼칠 수 있다.

✏️ 참조형 반환타입

예제 6-14) copy안에 d를 넣었기때문에 이 값을 받기위해 d로 받게되면 copy메서드가 종료되면서, 새로운 객체의 참조가 사라지기 때문에 더이상 이 객체를 사용할 방법이 없다.

=> 반환타입이 '참조형'이라는 것은 메서드가 '객체의 주소'를 반환한다는 것을 의미한다.

✏️ 재귀호출(recursive call)

  • 메서드 내부에서 자신을 다시 호출하는 것 ( 값에 의한 호출, call by value )
  • 반복문보다는 성능이 떨어지지만 재귀호출이 주는 논리적 간결함, 특정상황에서의 사용
  • 대표적인 예시 : 팩토리얼, 피보나치, 배열최대값 등등
  • Stack Overflow Error 주의 ( 매개변수의 유효성 검사 )

✏️ 클래스 메서드(static메서드)와 인스턴스 메서드

  • class method : 메서드 앞에 static이 붙어 있다. 객체생성x 'className.메서드이름' 호출 가능
  • instance method : 반드시 객체생성

  • class 설계시, member변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
    (모든 인스턴스에서 같은 값을 유지해야 하는 변수는 static을 붙여서 클래스변수로 정의)
  • class 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.(메모리 올라갈때 자동생성)
  • class 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
    (인스턴스 생성 없이 호출가능하므로 클래스 메서드가 호출되었을 때, 인스턴스가
    존재하지 않을수도 있다. 그래서 클래스 메서드에서 인스턴스 변수의 사용을 금지한다.)
  • 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static 사용하는게 더 빠르다.

✏️ 클래스 멤버와 인스턴스 멤버간의 참조와 호출

  • 같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출 가능
    (단, 클래스멤버가 인스턴스 멤버를 참조 또는 호출하고자 하는 경우에는 인스턴스 생성.
    그 이유는 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에 인스턴스 멤버가 졵재하지 않을 수도 있기 때문이다.)
  • 인스턴스 멤버간의 호출에는 아무런 문제가 없다.
profile
Hello, World!

0개의 댓글