C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드
- 레지스트리 같은 플랫폼 특화 기능을 사용한다.
- 자바가 성숙해가면서 (OS 같은) 하부 플랫폼의 기능들을 점차 흡수하고 있어 필요가 줄어들고 있다.
- 네이티브 코드로 작성된 기존 라이브러리를 사용한다.
- 대체할 만한 자바 라이브러리가 없는 네이티브 라이브러리를 사용해야 한다면 써야 한다.
- 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성한다.
자바 초기 시절(자바 3 전)이라면 이야기가 다르지만, JVM은 그동안 엄청난 속도로 발전해왔다. 대부분 작업에서 지금의 자바는 다른 플랫폼에 견줄만한 성능을 보인다.
- 네이티브 언어가 안전하지 않으므로 네이티브 메서드를 사용하는 애플리케이션도 안전하지 않다.
- 네이티브 언어는 이식성이 낮고, 디버깅도 어렵다.
- 가비지 컬렉터가 네이티브 메모리는 자동 회수 및 추적할 수 없다.
- 자바 코드와 네이티브 코드의 경계를 넘나들 때마다 비용이 추가된다.
- 네이티브 메서드와 자바 코드 사이의 '접착 코드'를 작성하는 것이 귀찮고 가독성도 떨어진다.