작성
·
426
1
안녕하세요 백기선님! static변수에 관한 질문이 있습니다
static 변수는 컴파일 시점에 메모리에 안착되어 프로그램이 종료될때 까지 살아있다. 그러므로 static 변수가 점유하고 있는 메모리는 가비지컬렉터에 의해 회수되지 않는다. 로 알고 있습니다.
https://openjdk.java.net/jeps/122
아래는 해당링크의 일부 내용을 발췌한 것입니다.
Class metadata, interned Strings and class static variables will be moved from the permanent generation to either the Java heap or native memory. The code for the permanent generation in the Hotspot JVM will be removed. Application startup and footprint will not regress more than 1% as measured by a yet-to-be-chosen set of benchmarks.
1. java8 부터는 static 변수/함수를 남발한다는 이유만으로 메모리 부족 문제가 생길 가능성이 희박해 진걸가요? 'static 변수를 남발해도 시스템에 크게 지장이없다?'
2. heap 영역으로 옮겼다면 GC의 관리영역으로 들어와서 mark & swap 인 가능해 진 건가요?
개발자 꿈나무입니다 ! 답변의 수준이 낮더라도 이해 부탁드리겠습니다 ㅠㅠ!
답변 1
0
The proposed implementation will allocate class meta-data in native memory and move interned Strings and class statics to the Java heap.
1. 이런 정보도 있네요. class static을 쓴다면 여전히 힙 영역을 많이 쓸테니 문제가 생길 여지가 있는거죠.
2. 네, 여전히 힙 영역에 남아있는 것들은 GC의 대상이 되는 것이고 해당 GC가 마크 & 스왑 알고리듬을 사용하는 GC라면 그렇게 되겠죠.