2010-02-14 7 views
4

지금 자바 기반 통신을 위해 JNA를 사용하고 있으며 단순성에 만족합니다. 그러나 성능을 최적화해야하고 다른 바인딩을 사용하는 것을 고려하고 있습니다.자바 고유의 통신 성능 해석

제 질문은 이것입니다 : Java- 기본 통신의 어떤 부분이 "비싼"부분입니까? 그들 사이의 데이터 전달인가?

다른 방법으로 알려 드리겠습니다. 현재 JNA 인터페이스가 호출하는 함수는 Java에 데이터를 전혀 전달하지 않으며 함수는 자주 호출되지도 않습니다. 즉, Java는 라이브러리 호출을 호출하고 라이브러리 호출은 잠시 동안 자신의 일을 수행하고 원시 유형을 리턴합니다. JNI/Swig/etc는 그러한 상황에서 JNA보다 더 빠를 수 있습니까?

답변

6

유스 케이스를 감안할 때 JNI는 JNA보다 빠르지 않습니다.

Java와 네이티브 상호 작용이 많은 양의 메모리를 전송하는 것은 비쌉니다. 특히 네이티브 코드에서 Java 메모리를 사용할 수있게하는 것은 매우 비쌉니다. IIRC는 부분적으로 자바가 메모리를 분할 할 수 있기 때문에 선택할 수 있지만 네이티브 코드는 연속적인 메모리 덩어리를 기대할 것입니다. 메모리 이동/복사에는 어느 정도 시간이 걸립니다.

성능에 신경 쓰면 JNA 코드가 원래 인터페이스 스타일 액세스가 아닌 "직접"스타일 액세스를 사용해야합니다.

또한 Java와 원시 코드간에 많은 양의 메모리를 전송해야하는 경우 가능한 한 최초의 직접 할당을 사용하고 정기적으로 해당 메모리를 재 할당하지 않는 것이 좋습니다. 이 방법으로 할당 비용을 한 번만 지불하면 처음에는 비용이 많이 들지 않으므로 많은 비용이 들게됩니다.