2014-10-01 4 views
1

ChronicleMap는 :ChronicleMap (및보다 일반적인 오프 힙 데이터 구조) 구현? 자신의 문서에 OpenHFT의 <a href="https://github.com/OpenHFT/Chronicle-Map" rel="nofollow">repository on Github</a> 상태에

Chronicle Map implements the java.util.concurrent.ConcurrentMap, that stores 
    its data off the java heap. 

나는 컴파일러를 내장하고 몇 오프 촬영 언어 '컴파일러 구현에 기여했습니다. 그 중 하나는 스택에 모든 것을 할당하는 것으로 작업했습니다 (코드 생성 중에 사용 가능합니다). JVM과 Java 컴파일러에서 일한 적이 없지만 일반적으로 힙과 스택 만 클래스, 로컬 변수, 함수 매개 변수 등의 인스턴스를 할당 할 수 있다는 것을 알고 있습니다.

ChronicalMap과 같은 데이터 구조를 인스턴스화하도록 컴파일러에 지시 할 수있는 코드를 작성하여 JVM에 의한 가비지 수집에 사용할 수있게하고 (또한 JVM의 일반 메모리 관리 기능을 통해 추적 할 수 있음) 힙?

나는 simple construction documentation and the associate example에 대해 읽었습니다. 나는 how을 본다.하지만 정확히 JVM과 관련하여 무엇이 진행되고 있는지에 대한 근거는 분명하지 않다.

+1

Java 개발자는 이러한 방식으로 오프 힙을 사용할 수 있다는 것을 거의 느끼지 못합니다. 코드를 사용하여 코드를 작성하는 방법은 말할 것도없고, 따라서 이러한 세부 정보를 숨기는 라이브러리가 있습니다. –

답변

3

기억해야 할 중요한 점은 javac 컴파일러가 최적화 방법을 많이하지 않으며 데이터가 저장되는 위치 또는 코드 최적화 방법을 지정하는 방법을 제공하지 않는다는 것입니다. (@ Contended와 같이 Java 8의 몇 가지 예외를 제외하고)

Java는 런타임시 일반적으로 작동하는 라이브러리에서 확장 성을 상당 부분 끌어냅니다. (빌드 타임 옵션도 종종 있습니다.) 실현해야 할 핵심 사항은 Java 프로그램이 실행되는 동안 코드를 생성하고 변경할 수 있다는 것입니다. 따라서 실제로 많은 스마트가 런타임에 발생합니다.

오프 힙 사용의 경우이 기능을 지원하는 라이브러리가 필요하며 이는 직접 또는 간접적으로 sun.misc.Unsafe을 사용합니다 (가장 많이 사용되는 JVM에서).이 클래스를 사용하면 언어에서 지원하지 않는 많은 작업을 수행 할 수 있습니다 , 그러나 당신이 저급 도서관 건축업자 인 경우에는 가지고 있기 위하여 아직도 진짜로 유용하다.

오프 힙 메모리는 GC에서 직접 관리하지 않지만 프록시 객체를 가질 수 있습니다. ByteBufferCleaner이므로 이러한 개체를 GC로 처리 할 때 연관된 힙 메모리도 정리됩니다.

면책 조항, 대부분의 ChronicleMap을 썼습니다.

+1

Peter, 훌륭한 답변과 ChronicleMap에 대한 심층적 인 조사에 감사드립니다. 나는 'sun.miscm.Unsafe'와'Cleaner '를 살펴보고 더 많은 것을 읽습니다. 또한 저는 S.O.에 대한 많은 답변을 제공하는 팬입니다. 감사합니다! (당신이 ChronicleMap를 쓴 방법으로 보는 작은 세계는 그것이 오는 것을 보지 못했다! 하하) 당신은 멋진 한 주를 앞두고 있기를 바랍니다! –

+1

@DevarshDesai 내 회사는 http://openhft.net/about-company/입니다. 새 사진이 필요합니다.) –

1

힙 (off heap)이라는 용어는 java에서 "원시"메모리 버퍼를 사용하는 기능을 나타냅니다. 프로세스 주소 공간 또는 메모리 매핑 파일의 일반 메모리 버퍼 일 수 있습니다.

이러한 버퍼는 "원시"입니다. 사용자가 직접 컨텐트를 관리하므로 가비지 수집기에서 관리하지 않습니다.

+0

약간의 통찰력을 가져 주셔서 감사 드리며 시간을내어 주셔서 감사합니다! –