2009-10-13 3 views
2

우리의 주 프로그램은 java이지만 저장소에서 데이터를 추출하는 코드는 C로 작성되었습니다. 추출 된 데이터로 HDF5 파일을 작성해야합니다. JNI를 사용하여 C 코드를 호출하여 데이터를 얻은 다음 Java에서 HDF5 파일을 작성하거나 C 코드에서 HDF5를 빌드하는 것이 더 좋을까요?JNI 성능

나는 JNI 또는 C

우리의 주요 기준 중 하나 성능이 작은 경험이 있습니다. JNI를 사용할 때 얼마나 많은 성능이 저하됩니까?

답변

6

함수 호출 경계가 "느립니다". 따라서 네이티브 루틴으로 많은 호출을 수행하면 성능이 저하됩니다.

은 JNI로 이동에서 혜택을 (자바는 충분히 빨리 많은 목적을 위해보다 더 때문에 내가 수도을 강조) 수 물건의 종류의 예에 이미지 처리의 일종을 할 수있는 일상적인 것 큰 비트 맵. 그러나 각 픽셀에 대한 JNI 루틴을 호출하는 것은 순수 Java의 루프 내에서 수행하는 것보다 훨씬 느립니다.

한 형식에서 다른 형식으로 데이터를 추출하는 것은 솔직히 파이썬 같은 "스크립팅"언어에서 가장 잘 수행되는 것으로, CPU에 의해 결코 제한되지 않습니다. 오히려 디스크 속도는 어느 언어 통역사보다 느릴 것입니다.

1

C가 거의없는 경험이 있기 때문에 최상의 선택은 Java withing에서 수행하는 것입니다. JNI는 그렇게 나쁘지 않습니다.

0

C보다 HDF 인터페이스가 익숙하지 않아서 필자와 비교할 수 없다.

나는 이것이 다른 모든 인터페이스에서 사용하는 API라는 것을 지적 했으므로 최대 성능을 이끌어 낼 필요가 있다는 것을 알게되면 C API가 최고가 될 것입니다.

API의 어떤 부분을 사용할 수 있는지에 대한 질문이 있습니다. 예를 들어 원래는 C++ 인터페이스로 시작했습니다. 일부 API는 C API에서만 계속 사용할 수있었습니다. 이것은 C & C++를 사용할 때 문제가되지 않지만 필요한 API를 사용할 수없는 경우 문제가 될 수 있습니다.

그런데, 당신은 당신의 머리를 C의 객체 모델의 관점에서 망쳐 놓아야합니다. 포인터, 핸들 등의 사용