2012-04-30 2 views
2

16 코어 CPU에서 간단한 독립 실행 형 Java 프로그램을 사용하여 일부 JNI 호출을 테스트하는 중입니다. 나는 64 비트 JVM을 사용하고있다 & OS는 Linux AS5이다. 그러나 64 비트 C++ 라이브러리로 테스트 프로그램을 시작하자마자 'SIZE'열이 16G임을 알 수 있습니다. 상위 명령 출력은 다음과 같이이다 :Java 프로그램을 시작하자마자 Java 프로세스가 시작되는 이유

 PID PSID USERNAME THR PRI NICE SIZE RES STATE TIME  CPU COMMAND 
    3505 31483 xxxxxxx 23 16 0 16G 215M sleep 0:02 0.00% java

내 힙이 확인하지만, JNI 메모리는 프로세스의 크기를 증가시킬 수 있음을 이해하지만, 나는 그것이 16G로 시작하는 이유에 대한 혼란 스러워요 - 내가 생각하는, SIZE 가상 메모리 크기입니까? 정말 그 많은 기억을 가지고 있니? 내가 그것에 관심을 가져야 하는가?

+5

27.2 시간의 CPU 시간을 가진 프로세스를 보여줍니다. 이것은 "테스트 프로그램을 시작하자 마자"스냅 샷이 아닙니다. – Gabe

+0

감사합니다. 게이. 방금 2 초의 가동 시간으로 정확한 스냅 샷으로 질문을 업데이트했습니다. – endless

+0

가상 주소 공간은 거의 무료입니다. 프로세스가 * 현재 * 215 메가 바이트 만 차지하고 있음을 알 수 있습니다. '-Xms' 또는 JVM에 대한 다른 명령 행 옵션의 가치는 무엇입니까? –

답변

0

이상하지만 JNI 호출이 어떻게 든 빠르게 메모리를 누설하거나 대량의 메모리 덩어리를 할당 할 수 있습니다. JVM을 시작하기 위해 어떤 명령 행을 사용하고 있습니까? JNI 코드는 무엇을하고 있습니까?

+0

테스트는 약 20MB xml을 전달하여 원시 객체를 생성 한 다음이를 폐기합니다. 이것은 루프에서 10000 번 수행합니다. 그러나 2 초 만에 일반적으로 10 배 미만일 수 있습니다. – endless

+0

다음과 같이 프로그램을 시작합니다. java -Djava.library.path = MyTest , 클래스 경로에는 jar의 보트로드가 있습니다. 그건 중요하지 않아야 할 것 같아. – endless

+0

글쎄, 파싱하고 20MB에 가까운 것을 유지한다면, 메모리를 적절히 공개하지 못할 수도 있습니다. – Femi

0

Greg Hewgill의 의견에 따르면 기본적으로 모두 215MB의 실제 메모리 만 사용하고 있습니다. 내 컴퓨터에서 VM 인수가없는 Java 프로세스는 8GB가됩니다. 4 배의 코어가 있으므로 2 배의 메모리로 시작하는 것이 나에게 의미가 있습니다.

이 숫자는 2 * 48 B 또는 2 * 64 B와 같은 가상 주소 공간을 사용하므로 실제로 사용되지 않습니다. 메모리를 1GB로 제한하기 위해 -mx1G을 사용할 수 있지만 하드 한도이며 프로세스가 더 필요할 때 OOME을 얻게됩니다.

관련 문제