문제

나는 현재에서 개발하는 프로젝트 written in Java.우리는 우리 무리가 알고리즘의 서면에서 C/C++(적어도 몇 백)해야 하는 통에서 우리의 프로젝트입니다.우리의 두 가지 옵션을 사용하는 사용자 이 코드를 호출하거나,다시 작성한 모든 알고리즘에서 Java.

나의 인식을 사용하는 결과 JNI,그것을 열 수 있는 새로운 설정의 문제는 이유입니다,다시 작성한 모든 코드를 자바도 고려하고 있습니다.하지만의 생각이 다시 쓰기 보인...잘못입니다.알고리즘을 테스트하고 작업으로 지금까지 내가 아는,그들은 그냥 잘못된 언어입니다.

이 상황에서는 것입 JNI 이 작업이 쉽?는 것 그것이 원인이 더 많은 두통이 다시 작성하는 코드에서 Java 가?


편집#1: 관련 질 유용성의 JNI


편집#2: FYI-우리는 Java 프로젝트는 것을 의미하지 않는 휴대용됩니다.할 수 있는 제거 하나의 단점 JNI 에서는 아마도 그것을 줄일 수 휴대 가능이 있습니다.

도움이 되었습니까?

해결책

간단한 대답은 경우,코드가 될 것이라고 많고 성능이 중요한 다음 변환하 Java.

더 복잡한 답변:

  • 는 경우 라이브러리를 쉽게 감싸에서 JNI 다음과 JNI
  • 는 경우 테스트를 위한 C/C++코드에 쉽게 변환하 Java 다음에 대한 포트

내가 수행하려면 다음과 같이 합니다:

  • 하나의 알고리즘 및 포장 JNI
  • 같은 알고리즘과로 변환하 Java
  • 시는 고통의 더 많은 것을 할
  • 는 경우 속도가 문제 다음 프로파일 두 버전 모두고 있는 그들은 수락가능합니다.

다른 팁

나는 생각한 대답은 양의 연결이있을 것이 전화 java 코드를 호출된 C/C++코드고 수준에서의 노력을 재작성을 수반.경 C 코드는 몇 가지 정수,일부 털이 계산 및 반환 또 다른 int.JNI 를 사용.이 많을 경우에는 복잡한,앞뒤로만 알고리즘에 합리적으로 간단하고,다시 쓰기'em.결함을 줄입니다 JNI 를 연결합니다.는 경우에는 것은 복잡할 수 있습 끝까지 자세히 작성하는 사용자 인터페이스 코드는 것보다 당신이 알고리즘 코드를 위해 다시 작성되었습니다.

는 경우에"알고리즘은"잘 포장하는,아마도 그것은 몇 가지를 만들은 자동 접착제 코드를 통해,JNI?는 위험을 줄이려는 오류(을 만드는 수백 개의 개별 구성 요소를 수동으로 위험한 소리),그리고 비용의 독립적인 알고리즘의 수를 추가하고,더 많거나 적습니다.

다시 쓰는 수백개의 구성 요소의 소리는 매우 위험하다,나는 확실히 이상하는 것이 좋습을 조사하 JNI 를 더욱 밀접하게 처음이다.

What I/O 요구 사항을 수행 알고리즘과 관련하여 나머지 부분의 프로젝트가 있습니까?는 경우 그들은 매우 느슨하게 결합,아마도 그것은 것을 실행 가능한 그들의 무료 서 있는 별도의 프로그램으로 호출되는 하위스 프로세스에서 Java 를 사용하여 예를 들어stdio 데이터를 공유?

난 당신을 사용하는 것을 사용하지 않으로 어려운 것으로 이전에서 다이빙을.거기에 몇 가지 중요한 무역-offs 및 제한을 하지만 일반적으로 JNI 잘 작동하고 합리적으로 쉽게 활용이 의도한 대로.

로 다른 말로 최고의 케이스 JNI 입니다:

  • 복잡한 기본 코드(보너스는 포인트는 경우에는 코드가 이미 입증된 매우 신뢰할 수)
  • 최소한의 앞뒤로 사이에 자바고 기본 코드(을 최소화하려면 여행에 걸쳐 JNI 층)
  • 합리적으로 간단한 인터페이스를 호출하여 기본 코드(나는 또한 다 Java 는 경우 당신이 기본 코드의 요구를 활용하여 Java 체/법)

그것은 확실히 가능하여 자동화하거나 유사-자동 생성하는 사용자 계층을 위한 합리적으로 구조화된 설정의 기본 구성 요소입니다.는 것을 잘 가치가있는 경우 그것을 구성 요소의 수를 포장 큰 것입니다.

좋은 소식과 함께 JNI 해야한다는 것입니다 그것은 간단한 당신을 구축하고 테스트 할 수있는 이 인터페이스 예를 들어,당신이 할 수 있어야한 테스트를 작성하는 경우에서 Java 을 악용하는 기존의 알고리즘 동작하고 있는 경우 문제들이 가장 가능성이 될 것에 JNI 층을 자체가 아니라 알고리즘은(주에 자신감을 기본 구현).

다시 쓰기의 큰 숫자는 C/C++알고리즘에서 Java 는 것은 훨씬 더 위험하게 사용하는 것보다 JNI.세부 사항을 알고 있기 없기 어렵게이지는 물론,하지만 거기에 사이에 미묘한 차이는 기술을 수 있는 상상에 영향을 미치의 실제 구현 알고리즘,언급하지만 투명한 엔지니어링 노력의 위험과 오류가 있습니다.

최종 고려사항이 미래의 생활의 이러한 알고리즘이나 관련된 구성 요소입니다.설정 알고리즘이 더 많거나 적은 완료,또는 당신은 계속 추가?어느 방법이 강한 유지 관리 및/또는 미래의 발전하는 이유를 선호하는 기술로 다른가?예를 들어,다른 모든 경우에서 자바고 모든 새로운 알고리즘에 자바의 거의 모든 팀원들은 거의 항상 코딩에서 Java,재구현에서 Java 보이기 시작합 매력적인 오래-용어입니다.

그러나 심지어는 말했다,일보다 소중 일치한다.대한의 큰 숫자를 잘 작동하는 기본 구성 요소를 내가 여전히는 경향이 있을 시작으로 JNI 경우에도 당신이 가고 있었으로 전환하 Java 오래-용어입니다.

나는 여전히 심각하게 고려한 JNI,특히할 수 있는 경우의 수를 최소화하기 위해 십자가 언어 인터페이스가 있습니다.

는 경우,예를 들어,거기에는 전체 스택은 C 함수는 모두 동일한 입력과 출력,하지만 다른 작업에서 입을 감싸는 단 한 JNI 래퍼로 추가 매개 변수를 지정하는 특정 알고리즘을 사용합니다.

는 경우에 당신은 계획을 쓰는 향후 프로젝트에서 Java 반대로,C/C++.나는 쌩 지금,그리고 포트를 통해 코드를 java.더 이상 기다리는 악화 될 것입니다.JNI 소리가 매력적인 이 경우에는,그러나 당신은 당신의 문제를 누군가를 유지 하는 것 C++코드는 다른 사람들이 재미에 새로운 자바 프로젝트입니다.

만약 이 시간 Java 프로젝트 후,당신은 왜 그것을 쓰는 Java?

브릿지 사이에 C 와 Java 은 비싸다,그래서 만약 당신이 통과 데이터를 많이 앞뒤로 없는 승리를 호출에서는 C 이상 JNI.

본 JNA 로 나열 합리적인 대안을 JNI 많이 덜 고통을 호출하는 방법에 DLL/공유 라이브러리에서 Java 반영에서 같은 방법입니다.내가 노력하지 않습니다.

을 고려할 수 있습니다 C 컴파일하는 코드로 리눅스 MIPS 바이너리에 해석될 수 있 Java.합리적으로 빠르고,조금 힘을 올바르게 설정 합니다.보 http://nestedvm.ibex.org/

또한 사용할 수 있습니다 llvm backend 하는 gcc 컴파일&가벼운 pc 클리너에 바이트할 수 있는 해석 Java.이것은 또한 방법으로 촬영 iPhone SDK afaik Mac OS X. http://llvm.org/

읽는 조엘의 receint 게시물"지불을 아래로 당신의 기술적인 부채"그 후에 가서 변환 지금은 그것보다는 이자를 지불한 다음 몇 년 동안 다음을 지불합니다.

아마도 다시 작성 라이브러리는 데에 도움이 될 수 있습니다 더 많은 장소뿐만 아니라.는 경우 그들은 유용하고 복잡하게 유지하십시오에서 그들 C 고,그들은 더욱 사용하면 패키지에서 재사용할 수 있고,쉽게 배포하고 이해할 수 있다.

이용 상황입니다.내가 당신을 사용하여 멀티 스레드 데이터 구조에서 사용할 수 있는 Java.이 시점에서 당신이 가고 싶지 않을 다시 귀하의 C++데이터 구조다.

당신은 또한 것을 실현할 수 있는 다시 쓰기 사람들 알고리즘이 더 나은 사용하여 더 사려 깊은 기술,더 나은 다형성,어댑터 패턴 등등.

앉아있을 때에는 C/C++코드에,당신이 생각하는 당신에 매달려 있습니다.당신이 생각하고 대해 모든 당신을 사랑합니다.에서 몇 년 동안,당신은 것을 깨닫고 그것에 사용하는 사용자는 괴물을 만들었습니다.할 때마다 프로세스 충돌 후회할을 사용하여 CGI.후에 고정하는 프로세스 충돌,누군가가 수정을 원하는 알고리즘에서는 C++고 당신이 원하는 스로틀니다.그들은 편리한 변명같이"나는 사용하지 않는 Java 아직입니다."

을 살펴 변경할 수 없는 데이터 구조에서 Java.에 대해 생각하지 않는 속도는 이전 C/C++알고리즘 실행됩니다.내가 찾는 새 코드 멀리 보이 어떤 나의 오래된 C/C++코드입니다.

쓰 단위 테스트를 확인할 수 있습니다사용 NetBeans.

종류 감사합니다,

-Stosh

제공하는 사용자니다.다음에 직면하는 경우 모든 문제를 다시 쓸 수도 있습니다 문제가 있는 것 또는 포장 JNI 전화된 웹 서비스에 배포하에서 다른 상자 또는 가상의 박스입니다.

이 경우 윈도우,그리고 그들은 이미 DLL 에서,아마도 JNA 될 것입니다.(면 성능 저하를 위한 함수 호출을 통해 JNA 너무 나쁘지 않)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top