작성
·
157
0
궁금한 점
static 메서드는 일반메서드처럼 메서드 영역에 위치하나요?
1-1. 맞다면, static 키워드의 단점으로 GC에 대상이 되지 않아서 자주 사용한다면 메모리 효율이 떨어진다고 알고있습니다. 그런데 static 메서드나 일반메서드나 GC 대상이 되지 않는 메모리 영역에 있는거 아닌가요? 아니라면 어디에 위치하는지 궁금합니다.
제가 궁금하게 된 계기가 유틸 클래스를 주로 @Bean이 아닌 staitc 메서드를 모아둔 형태로 사용하는 이유가 궁금해서 찾아보다가 다른 영한님 서포터즈 분이 답변하신 글을 보았습니다.
"사용빈도가 너무 희소하다면, static으로 관리하기 보단 필요할떄마다 new 로 생성해서 쓰는게 더 효율적일 수도 있습니다. GC의 효율이 예전처럼 나쁘지 않습니다. 자주 사용하지 않는 객체를 메모리에 상주시키것이 더 낭비일 수 있습니다."
위 답변으로 미루어 보아 단순히 static 메서드가 메모리에 올라가는게 아니라 힙 영역이 아닌 static 메서드를 가지고 있는 객체 형태(?)로 다른 메모리에 올라간다고 이해해서 헷갈립니다.
답변 1
2
안녕하세요. 구준형님
static이든, static이 아니든 모든 메서드는 메서드 영역에 존재합니다.
인스턴스는 메서드 영역에 존재하는 메서드의 참조 정보를 가지고 있을 뿐입니다.
링크의 답변은 다른 문맥으로 이해하셔야 합니다.
@Bean을 사용해서 싱글톤으로 사용하든, static 메서드를 사용하든 메모리 사용은 같다고 보시면 됩니다.
이 부분은 오히려 편의에 대한 것으로 간단한 유틸리티는 객체생성이나 의존관계 주입 없이 편하게 클래스 메서드(static 메서드)를 바로 호출하는 것이 간단하기 때문에 이렇게 사용합니다.
감사합니다.
이해했습니다. 감사합니다!