Java 영역

김정현·2024년 4월 22일
0

JAVA

목록 보기
10/19
package exam13;

public interface Calculator {
    int add(int num1, int num2);
}

위 인터페이스를 객체화.

package exam13;

public class Outer {

    public Calculator method(int num3) {   //데이터 영역에 num3이 할당됨(상수)
        Calculator cal = new Calculator() {
            public int add(int num1, int num2) {
                return num1 + num2 + num3;
            }
        };

        return cal;
    }
}
  • method를 실행시킨후 add함수를 실행켰을때 메모리 영역

-데이터 (메서드) 영역
num3
바이트 코드

-스택 영역
cal 변수:
method 메서드 내에서 Calculator 인터페이스를 구현한 익명 내부 클래스의 인스턴스를 가리키는 참조 변수

-힙 영역
cal 객체: Calculator 인터페이스를 구현한 익명 내부 클래스의 인스턴스, add 메서드를 포함하고 있으며, num3 변수를 참조할 수 있다.

add메서드 실행과정

->
1. 함수가 호출되면 해당 함수의 코드가 실행

  1. 함수 내에서 사용되는 객체의 인스턴스는 힙 영역에 생성된다. 이 객체는 해당 클래스의 바이트코드를 가지고 있다.

  2. 함수 내에서 사용되는 메서드가 호출되면, 해당 메서드의 바이트코드는 메서드 영역에서 가져와서 해석 (메서드 테이블 은 힙영역에 존재하고 객체는 포인터를 통해 테이블에 접근하여 메서드에 접근할 수 있는 주소를 가져옴)

  3. 메서드의 실행 코드가 로딩되면, 그 코드는 해당 객체의 메서드를 참조하여 실행

  4. 이때 메서드는 함수 내에서 사용되는 객체의 데이터를 참조하여 원하는 동작을 수행

0개의 댓글