우리의 주 프로그램은 java이지만 저장소에서 데이터를 추출하는 코드는 C로 작성되었습니다. 추출 된 데이터로 HDF5 파일을 작성해야합니다. JNI를 사용하여 C 코드를 호출하여 데이터를 얻은 다음 Java에서 HDF5 파일을 작성하거나 C 코드에서 HDF5를 빌드하는 것이 더 좋을까요?JNI 성능
나는 JNI 또는 C
우리의 주요 기준 중 하나 성능이 작은 경험이 있습니다. JNI를 사용할 때 얼마나 많은 성능이 저하됩니까?
우리의 주 프로그램은 java이지만 저장소에서 데이터를 추출하는 코드는 C로 작성되었습니다. 추출 된 데이터로 HDF5 파일을 작성해야합니다. JNI를 사용하여 C 코드를 호출하여 데이터를 얻은 다음 Java에서 HDF5 파일을 작성하거나 C 코드에서 HDF5를 빌드하는 것이 더 좋을까요?JNI 성능
나는 JNI 또는 C
우리의 주요 기준 중 하나 성능이 작은 경험이 있습니다. JNI를 사용할 때 얼마나 많은 성능이 저하됩니까?
함수 호출 경계가 "느립니다". 따라서 네이티브 루틴으로 많은 호출을 수행하면 성능이 저하됩니다.
은 JNI로 이동에서 혜택을 (자바는 충분히 빨리 많은 목적을 위해보다 더 때문에 내가 수도을 강조) 수 물건의 종류의 예에 이미지 처리의 일종을 할 수있는 일상적인 것 큰 비트 맵. 그러나 각 픽셀에 대한 JNI 루틴을 호출하는 것은 순수 Java의 루프 내에서 수행하는 것보다 훨씬 느립니다.
한 형식에서 다른 형식으로 데이터를 추출하는 것은 솔직히 파이썬 같은 "스크립팅"언어에서 가장 잘 수행되는 것으로, CPU에 의해 결코 제한되지 않습니다. 오히려 디스크 속도는 어느 언어 통역사보다 느릴 것입니다.
C가 거의없는 경험이 있기 때문에 최상의 선택은 Java withing에서 수행하는 것입니다. JNI는 그렇게 나쁘지 않습니다.
C보다 HDF 인터페이스가 익숙하지 않아서 필자와 비교할 수 없다.
나는 이것이 다른 모든 인터페이스에서 사용하는 API라는 것을 지적 했으므로 최대 성능을 이끌어 낼 필요가 있다는 것을 알게되면 C API가 최고가 될 것입니다.
API의 어떤 부분을 사용할 수 있는지에 대한 질문이 있습니다. 예를 들어 원래는 C++ 인터페이스로 시작했습니다. 일부 API는 C API에서만 계속 사용할 수있었습니다. 이것은 C & C++를 사용할 때 문제가되지 않지만 필요한 API를 사용할 수없는 경우 문제가 될 수 있습니다.
그런데, 당신은 당신의 머리를 C의 객체 모델의 관점에서 망쳐 놓아야합니다. 포인터, 핸들 등의 사용