IT모아

자바 perm 영역 본문

Java(자바)

자바 perm 영역

아롱사태남 2018.09.20 18:54







펌( PERM : Permanent Generation) 영역은 객체의 생명주기가 영구적일 것으로 생각하는 객체들을 관리한다. 이 영역은 GC대상에서 제외된다. 주로 자바의 Class 객체들이나 문자열에 속한 String 객체들이 위치한다.

Class 객체들은, 시스템의 Classpath에 잡힌 객체들 또는 사용자에 의해 다이나믹하게 로드되는 클래스들이 있다. Spring같은 프레임워크들은 다이나믹하게 사용자가 정의한 클래스 정보를 로드한다. 주로 이 때 다이나믹하게 로드되는 클래스들에 의해 PERM영역의 OOME가 발생한다.

어떤 클래스 정보를 로드할 때, 해당 클래스의 정보만 로드하는 것이 아니라,  클래스에 연관된 다른 클래스들도 같이 로드되고 펌 영역에 할당된다

DaoFactory와 같이 싱글톤 방식으로 하나만 생성해서 어플리케이션이 동작하는 동안 유지되어야 하는 객체들이 있다. 주로 이러한 객체들이 코딩실수로 여러개 생성되어 PERM 영역에서 자리를 많이 차지할 경우 OOME가 발생한다.

PERM OOME 예

Java의 Reflection 기능을 이용하거나 이용하거나 Spring이나 MyBatis와 같은 프레임워크를 사용하는 경우는 메모리에 대한 고려를 하여 설계를 하여야 한다. 



[출처] [JVM] PERM 영역 이해하기|작성자 



또한 

클래스의 메타 데이터 정보는 JVM의 Perm 영역에 저장됩니다. 만약 Class 클래스를 사용하여 엄청나게 많은 클래스를 동적으로 생성하는 일이 벌어지면 Perm 영역이 더이상 사용할 수 없게 되어 OutOfMemoryError가 발생할 수도 있습니다. 


'Java(자바)' 카테고리의 다른 글

자바 클래스 로딩 과정  (0) 2019.01.10
자바 perm 영역  (0) 2018.09.20
자바 POJO  (0) 2017.03.17
자바 FAIL-FAST 방식이란?  (0) 2017.03.06
자바 로드타임 로딩 및 런타임 로딩 이해하기(ClassLoader)  (0) 2016.10.20
자바 enum을 활용하여 if문 줄이기  (0) 2016.05.14
0 Comments
댓글쓰기 폼