2014-07-08 2 views
0

매우 간단한 질문입니다. Linux에서이 경우를 가정하면 이 아니라 windows입니다.MappedByteBuffer는 linux에서 mmap을 사용합니까?

버퍼 크기가 매우 큰 거대한 파일에 대해 MappedByteBuffer를 얻으려고하면 JVM이 가상 메모리를 사용합니까?

또한 MappedByteBuffer에는 실제로 페이지 오류가 있습니까? RAM에 약속 된 버퍼 크기로 여유 공간이 있는지 확인해야합니까?

+0

"페이지 폴트가 있음"은 무엇을 의미합니까? VM 시스템에서는 페이지 폴트가 항상 발생하며 걱정할 필요가 없습니다. – chrylis

+0

이 질문은 이해가되지 않습니다. 파일을 'mmap'하면 그 파일은 프로세스 가상 주소 공간의 일부가됩니다. 가상 주소 공간이 충분하지 않은 경우 (예 : 32 비트 시스템에서 2Gb 파일을 매핑하려는 경우) 매핑이 실패합니다. – kdgregory

+0

해결하려는 실제 문제는 무엇입니까? – kdgregory

답변

1

MappedByteBuffer 대한 설명서 명확 상태 : 그 콘텐츠

직접 바이트 버퍼 파일의 메모리 맵 영역이다.

POSIX 시스템에서 이는 JRE가 mmap을 사용하여 파일 내용을 메모리에 매핑한다는 것을 의미합니다. 어떤 이유로 파일이 메모리에 이미 존재하지 않으면 누락 된 각 페이지에 대한 첫 번째 액세스에서 페이지 오류가 발생하고 가상 메모리 시스템은 할당 된 메모리에 대해 언제든지 페이지 오류가 발생할 수 있습니다. 시스템 I/O를 모니터링하여 응용 프로그램을 실행하는 시스템에 충분한 RAM이 있는지 확인하지만 커널은 필요한 경우 내용을 언제 바꿔 넣을 것인지 결정할 때 좋습니다.

+0

내가 제공하는 크기가 프리 램 + virtual_mem보다 작거나 같으면 괜찮을까요? –

관련 문제