Java Max Direct 메모리 크기 설정

2438 단어 Java
지난 자바 Executor Service 에서 제 가 언급 한 task 는 OutofMemory Error: Direct Buffer Memory 가 자바 Executor Service 에 의 해 의외로 중단 되 었 습 니 다.다음은 시스템 에 왜 OOM 오류 가 발생 했 는 지 연구 해 야 한다.처음에는 메모리 설정 이 부족 하 다 고 의심 했다.그럼 우 리 는 DirectMemory 설정 에 대해 조 사 를 진행 했다.우리 시스템 에 서 는 MaxDirectMemory Size 매개 변 수 를 사용 하여 DirectMemory Area 크기 를 설정 하지 않 았 습 니 다. 그러면 우 리 는 시스템 의 기본 설정 을 사용 한 것 이 분명 합 니 다.JVM 의 기본 설정 은 무엇 입 니까?sun. misc. VM. 자바 에 기본 directmemory size 를 어떻게 설정 하 는 지 살 펴 보 겠 습 니 다.
public static long maxDirectMemory() {  
    if (booted)  
        return directMemory;  

    Properties p = System.getProperties();  
    String s = (String)p.remove("sun.nio.MaxDirectMemorySize");  
    System.setProperties(p);  

    if (s != null) {  
        if (s.equals("-1")) {  
            // -XX:MaxDirectMemorySize not given, take default  
            directMemory = Runtime.getRuntime().maxMemory();  
        } else {  
            long l = Long.parseLong(s);  
            if (l > -1)  
                directMemory = l;  
        }  
    }  

    return directMemory;  
}  

가장 중요 한 것 은 다음 과 같다. directMemory 의 크기 는 JVM 이 실 행 될 때의 최대 메모리 에 의 해 결정 된다.
 directMemory = Runtime.getRuntime().maxMemory()

그러면 max Memory () 는 native 로 이 루어 집 니 다. 자바 문서 가 어떻게 되 돌아 오 는 지 보 겠 습 니 다. *The maxMemory () method returns the maximum of memory that the VM will attempt to use, alling applications to better manage memory load. If the implementation - dependent - Xmx flag is used then this method will return that value. * 기본 설정 과 Heap 의 크기 차이 가 많 지 않 음 을 알 수 있 습 니 다.우리 시스템 에 서 는 최소 1G 의 Direct Memory Size 를 사용 하도록 제3자 lib 를 사 용 했 습 니 다.우리 시스템 에서 Xmx 설정 은 512 M 입 니 다.그래서 저 희 는 MaxDirectMemory Size 인 자 를 추가 하여 DirectMemory Area 크기 를 지정 합 니 다.

좋은 웹페이지 즐겨찾기