-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
🐽 09 General Programming9장 일반적인 프로그래밍 원칙9장 일반적인 프로그래밍 원칙
Description
Chapter : 9. 일반적인 프로그래밍 원칙
Item : 66. 네이티브 메서드는 신중히 사용하라
Assignee : byunghyunkim0
🍑 서론
- 자바 네이티브 인터페이스(JNI)는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다.
🍑 본론
네이티브 메서드란?
- C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드
네이티브 메서드의 주요 쓰임새
- 레지스트리 같은 플랫폼 특화 기능을 사용
- 자바가 성숙해가면서 (OS 같은) 하부 플랫폼의 기능들을 흡수하고 있다.
- JAVA 9은 새로 process API를 추가해 OS 프로세스에 접근가능하게 했다.
// process API private static void infoOfCurrentProcess() { ProcessHandle processHandle = ProcessHandle.current(); ProcessHandle.Info processInfo = processHandle.info(); log.info("PID: " + processHandle.pid()); log.info("Arguments: " + processInfo.arguments()); log.info("Command: " + processInfo.command()); log.info("Instant: " + processInfo.startInstant()); log.info("Total CPU duration: " + processInfo.totalCpuDuration()); log.info("User: " + processInfo.user()); }
- 네이티브 코드로 작성된 기존 라이브러리를 사용
- 대체할 만한 자바 라이브러리가 없는 네이티브 라이브러리를 사용해야 할 때 네이티브 메서드를 사용
- 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 네이티브 언어로 작성
- 성능을 개선할 목적으로 네이티브 메서드의 사용은 권장하지 않음
- JVM은 그동안 엄청난 속도로 발전해왔다. JAVA 3이후부터는 대부분 작업에서 다른 플랫폼에 견줄만한 성능을 보인다.
- 고성능의 다중 정밀 연산이 필요하다면 네이티브 메서드를 통해 GMP를 사용하는 걸 고려
- GNU Multiple Precision Arithmetic Library (GMP): C 언어로 작성된 오픈 소스 라이브러리
네이티브 메서드의 단점
- 네이티브 언어가 안전하지 않으므로 네이티브 메서드를 사용하는 애플리케이션도 메모리 훼손 오류로부터 안전하지 않다.
- 네이티브 언어는 자바보다 플랫폼을 많이 타서 이식성도 낮고 디버깅도 어려움.
- 주의하지 않으면 속도가 느려짐
- 자바 코드와 네이티브 코드의 경계를 넘나들 때마다 비용 추가
- 네이티브 메서드와 자바 코드 사이의 접착 코드를 작성해야됨 - 귀찮은 작업이고 가독성도 떨어짐
- 자바 코드에서 네이티브 메서드 선언
public class NativeExample { public static native int add(int a, int b); }
- 네이티브 메서드 구현을 위한 C/C++ 코드 작성
// NativeExample.c #include <jni.h> JNIEXPORT jint JNICALL Java_NativeExample_add(JNIEnv *env, jclass cls, jint a, jint b) { return a + b; }
- 자바와 네이티브 코드 연결을 위한 접착 코드 작성
// NativeExample.java static { System.loadLibrary("NativeExample"); }
🍑 결론
- 네이티브 메서드를 사용하고 싶다면 한번 더 생각해라
- 네이티브 메서드가 성능을 개선해 주는 일은 많지 않다.
- 네이티브 메서드를 사용해야만 한다면 네이티브 코드는 최소한으로 사용하고 철저히 테스트 해라.
Referenced by
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
🐽 09 General Programming9장 일반적인 프로그래밍 원칙9장 일반적인 프로그래밍 원칙