2013-07-21 5 views
0

클래스 파일 만있는 Java 벤치 마크가 있습니다.클래스 파일이 주어지면 어떻게 탐지 할 것인가는 JNI를 사용하는 것인가 아닌가?

JNI 호출이있는 벤치 마크를 찾고 싶습니다.

나는 이것이 javap -c의 도움으로 바이트 코드 레벨에서 수행 될지도 모른다고 생각했지만 확실하지는 않습니다.

아이디어가 있으십니까? 프로그래밍 기본 (JNI) 방법을 찾으려면

Class<?> clazz = ... 
List<Method> nativeMethods = new ArrayList<>(); 
for (Method m : clazz.getDelcaredMethods()) { 
    if(Modifier.isNative(m.getModifiers())) { 
     nativeMethods.add(m); 
    } 
} 

답변

0

모든 답변 주셔서 감사합니다.

java -verbose:jni -jar foo.jar

는 기본적으로는 JNI 방법을 보여주는 콘솔에 추적 메시지를 출력 :

나는 다음과 같이 간단한 방법을 발견했다. ref

7

, 당신은 반사를 사용할 수 있습니다.

javap -private java.awt.image.BufferedImage | grep native 
2

그것은 원래의 질문에서 불분명하다 : 당신이 클래스를로드 할 수있는 경우

+0

잘못된 반응으로 이어질 수 있습니다

여기 핫스팟에서이 옵션에 대한 세부 사항입니다. – Antimony

+0

@Antimony 어떻게 될까요? – Jeffrey

+0

메소드 중 하나에 이름에 'native'가있는 경우. – Antimony

0

이것은 당신이 설명한 라인을 따라 작동합니다 :이 같은 것을 사용할 수 있습니다은 javap로

javah [options] <classes> -d <dir> 
grep -r "JNIEXPORT" <dir> 

출력의 각 행은 JNI 수출의 이름을 사용하여 원시 메소드를 식별합니다.

그러나 네이티브 메소드가 JVM에 의해 호출되거나로드되었는지 또는 공유 라이브러리에 정의되었는지는 결정되지 않습니다. 네이티브 메소드는, 불려 갔을 경우에 정의 할 필요가있어, 그 결핍이 트랩 가능한 에러 인 경우에만 정의 할 필요가 있습니다.