본문 바로가기

(Java) 클래스, 객체, 인스턴스

2021. 3. 11.

클래스

  • 객체를 정의 한 것
  • 객체의 설계도, 틀

객체

  • 실제 존재하는 것
  • TV, 컴퓨터

인스턴스

  • 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
  • 객체를 소프트웨어에 실체화 한 것
  • OOP 관점에서 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.

클래스 구성 멤버

public class ClassName {
    // 필드
    int fieldName;
    // 생성자
    ClassName() { ... }
    / 메소드
    void methodName() { ... }

}

오버로딩과 오버라이딩

오버로딩

  • 같은 이름의 함수가 여러개 있는 상황에서 매개 변수의 유형, 갯수로 호출할 함수를 구분 할 수 있다.
public class OverLoading {
    void A() { }
    void A(int a) { }
    void A(int a, int b) { }
    // 호출할 함수를 매개변수를 사용해서 호출 할 수 있다.
}

오버라이딩

  • 하위 클래스에서 상위 클래스를 상속하여 사용할 때 상위 클래스의 같은 이름의 메소드를 재 정의해서 사용하는 것
public class Employee {
    String name;
    String age;

    public void info() {
        System.out.println("employee");
    }
}

public class Manager extends Employee {
    String job;

    public void info() {
        System.out.println("manager");
    }

}

JVM (Java Virual Machine)

역할

자바 어플리케이션을 클래스 로더를 통해 읽고, Java API와 함께 실행 하는 것. Java와 OS사이 중계자 역할을 수행해 OS에 구애받지 않고 재사용 가능하게 해준다. 또한, 메모리관리, Garbage Collection을 수행.

활용

메모리를 효율적으로 사용해 최고의 성능을 내기 위해서 JVM을 알아야 한다.

실행 과정

  1. 프로그램이 실행되면 JVM이 OS에서 메모리 할당받는다.
  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환시킨다.
  3. Class Loader를 통해 Class 파일들을 JVM으로 로딩.
  4. 로딩된 Class파일들은 ExCution engine을 통해 해석.
  5. 해석된 바이트코드는 Runtime Data Areas에 배치된다.
  6. 이 과정에서 JVM은 스레드 동기화, GC 관리작업 수행

JVM 메모리 구조

JVM 메모리 구조와 Garbage Collector | 세상에 잘못된 경험은 없어

JVM 구성

클래스 로더

JVM에 클래스 파일을 로드하고 링크를 통해 배치하는 작업을 수행. 사용하지 않는 클래스들은 메모리에서 삭제.

ExCution Engine(실행 엔진)

바이트코드를 실제로 JVM내부에서 실행할 수 있는 형태로 변경

Interpreter

바이트 코드를 명령어 단위로 읽어서 실행. 한 줄씩 수행하므로 느림.

JIT (Just - In - Time)

인터프리터 방식의 단점을 보안하기 위한 컴파일러. 자주 수행되는 메서드의 바이트 코드를 네이티브 코드로 변경후 캐시에 보관.

Garbage Collector

GC를 수행하는 모듈이 존재

Runtime Data Area

PC Register

Thread가 어떤 명령을 실행할지 기록하는 부분. 현재 수행 중인 JVM 명령어 주소를 갖는다.

JVM 스택 영역

변수, 스레드, 메소드 정보를 저장. 호출된 메소드의 매개변수, 지역변수, 리턴 값 들을 임시로 저장

Native method stack

기계어로 작성된 프로그램을 실행 시키는 영역. 커널이 스택을 잡아 독자적으로 프로그램을 실행시키는 영역

Method Area

초기화되는 대상을 저장하기 위한 메모리 공간

Heap 영역

OutOfMemory Java Heap Space – Take Action – About Software Development

New/Young 영역

  • Eden : 객체들이 최초로 생성되는 공간
  • Survivor 0, 1 : Eden에서 참조되는 객체들이 저장되는 공간

Old 영역

삭제되지 않고 일정시간 동안 살아남은 객체들이 저장되는 공간

'Java' 카테고리의 다른 글

(Java) steam + filter 중복 객체 제거  (0) 2021.03.23
(Java) Comparable과 Comparator 개념  (0) 2020.12.16
댓글