티스토리 뷰
728x90
반응형
네이티브 메서드는 신중히 사용하라
- 자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 프로그램이 네이티브 메서드를 호출하는 기술입니다. 여기서 네이티브 메서드란 C나 C++같은 네이티브 프로그래밍 언어로 작성된 메서드를 말합니다.
public class Object {
@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;
}
💡주요 쓰임
- 레지스트리 같은 플랫폼 특화 기능에 사용됩니다.
- 네이티브 코드로 작성된 기존 라이브러리를 사용합니다.
- 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성합니다.
💡성능 개선을 목적으로 네이티브 메서드를 사용하지 말자
- 자바 초기 시절(1.3)이라면 이야기가 다르지만 JVM은 그동안 엄청난 속도로 발전해왔습니다. 대부분의 작업에서 지금의 자바는 다른 플랫폼에 견줄만큼 성능을 보입니다. 네이티브 라이브러리 쪽은 GNU 다중 정밀 연산 라이브러리(GMP)를 필두로 개선 작업이 계속되어 왔습니다. 고성능의 다중 정밀 연산이 필요한 경우에는 네이티브 메서드를 통해 GMP를 사용하는것을 고려해보는게 좋습니다.
💡단점
- 네이티브 언언가 안전하지 않으므로 네이티브 메서드를 사용하는 어플리케이션도 메모리 훼손 오류로 부터 안전하지 않습니다.
- 네이티브 언어는 자바보다 플랫폼을 많이 타서 이식성이 낮습니다.
- 디버깅이 어렵습니다.
- 주의하지 않으면 오히려 속도가 느릴수 있습니다.
- 가비지 컬렉터가 네이티브 메모리는 자동으로 회수하지 못하고, 심지어 추적조차 할 수 없습니다.
- 자바 코드와 네이티브 코드의 경계를 넘나들 때마다 비용이 발생합니다.
- 네이티브 메서드와 자바 코드 사이의 접착 코드(glue code)를 작성해야 하는데, 이는 귀찮고 가독성이 떨어집니다.
728x90
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - Item70. 복구할 수 있는 상황에는 검사예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 (0) | 2022.08.19 |
---|---|
이펙티브 자바 - Item69. 예외는 진짜 예외 상황에만 사용하라 (0) | 2022.08.18 |
이펙티브 자바 - Item64. 객체는 인터페이스를 사용해 참조하라 (0) | 2022.08.16 |
이펙티브 자바 - Item63. 문자열 연결은 느리니 주의하라 (0) | 2022.08.13 |
이펙티브 자바 - Item62. 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2022.08.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- spring boot poi excel download
- java userThread와 DaemonThread
- spring boot redisson destributed lock
- spring boot 엑셀 다운로드
- java ThreadLocal
- service based architecture
- spring boot redis 대기열 구현
- 자바 백엔드 개발자 추천 도서
- spring boot redisson 분산락 구현
- 공간 기반 아키텍처
- polling publisher spring boot
- redis sorted set
- 레이어드 아키텍처란
- 서비스 기반 아키텍처
- transactional outbox pattern spring boot
- redis sorted set으로 대기열 구현
- spring boot redisson sorted set
- redis 대기열 구현
- space based architecture
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- 트랜잭셔널 아웃박스 패턴 스프링부트
- pipe and filter architecture
- transactional outbox pattern
- spring boot excel download oom
- 람다 표현식
- microkernel architecture
- pipeline architecture
- @ControllerAdvice
- spring boot excel download paging
- JDK Dynamic Proxy와 CGLIB의 차이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함