클래스의 인스턴스가 무조건 하나만 존재하는 환경에서 static 메서드가 필요할까요?
조회수 910회
제가 만든 클래스가 싱글톤으로 관리되며 단일 쓰레드라 무조건 딱 하나의 인스턴스만 존재한다고 환경이라고 가정했을 때, 또 동기화 문제를 고려하지 않고 초기화 작업도 없다면,
private 메서드를 static으로 만들어야 하나 non-static으로 만들어야 하나 고민이 되는데요. static 메서드가 메모리 관리에서 유리한 점이나 혹 다른 장점이 있을까요?
2 답변
-
자바는 아시다시피 가비지컬렉터가 존재하여 오로지 가비지컬렉터만이 객체정리를 할 수 있습니다. 이말은 돌려 이야기하면 개발자가 객체 라이프 타임을 결정할 수 없다는 뜻 입니다.
static 필드는 해당 클래스를 로딩한 클래스로더가 제거될 때 가비지 컬렉션 대상이 됩니다. 즉 클래스로더를 런타임중에 제거하는 경우는 거의 없으니 영구히 살아있다 판단할 수 있습니다.(물론 was의 핫디폴로이등에 의해 클래스로더가 교체되면 당연히 gc대상입니다.)
그러나 일반 객체는 사용치 않으면(레퍼런스 카운트가 0) 프로모션(제네레이션널 알고리즘일 때) 될 때 정리가 되겠죠.
-
를 읽어보니
클래스에 대한 정보와 static은 Heap에 들어가고, 지역변수는 stack에 들어가는것 간다고 합니다.
하지만 메소드는 static이건 아니건 다 heap에 들어간다네요. 그렇다면 별 차이가 없지 않을까요?
댓글 입력