자바 네 이 티 브 키워드 원리 및 역할 분석
public native int hashCode();
왜 네 이 티 브 가 있 지?이것 은 내 가 배 워 야 할 곳 이다.그래서 다음은 네 이 티 브 를 정리 하고 싶 습 니 다.첫째,인식 native 즉 JNI,자바 네 이 티 브 인터페이스
모든 언어 는 순수 하 기 를 바란다.예 를 들 어 어떤 방안 을 해결 하 는 것 을 모두 좋아 하 는데 이 언어 만 쓰 면 된다.자바 플랫폼 에는 자바 네 이 티 브 인터페이스(자바 로 컬 인터페이스)라 는 사용자 와 로 컬 C 코드 가 서로 작 동 하 는 API 가 있 습 니 다.
2.자바 로 C 의"Hello,JNI"를 호출 합 니 다.
우 리 는 퇴근 하기에 편리 한 절차 에 따라 진행 해 야 한다.
1.자바 클래스 를 만 듭 니 다.네 이 티 브 방법 과 라 이브 러 리 를 불 러 오 는 방법 loadLibrary 가 포함 되 어 있 습 니 다.HelloNative.java 코드 는 다음 과 같 습 니 다.
public class HelloNative
{
static
{
System.loadLibrary("HelloNative");
}
public static native void sayHello();
@SuppressWarnings("static-access")
public static void main(String[] args)
{
new HelloNative().sayHello();
}
}
우선 네 이 티 브 방법 에 주목 하 세 요.그 로 딩 라 이브 러 리 는 뒤로 도 작용 합 니 다.native 키 워드 는 컴 파일 러(사실은 JVM)가 외부 에서 정의 하 는 방법 을 호출 하 는 것 을 알려 줍 니 다.여기 서 C 를 말 합 니 다.이 코드 를 직접 실행 하면 JVM 은"A Java Exception has occurred."콘 솔 출력 은 다음 과 같 습 니 다.Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at HelloNative.
이것 은 프로그램 이 그것 을 사용 할 때 가상 컴퓨터 가 sayHello 를 어떻게 찾 아야 할 지 모른다 고 말 했다.자연 미장이
2.javah 를 실행 하여 이 방법 을 포함 하 는 C 성명 헤더 파일 을 얻 습 니 다.h
HelloNative.java,간단하게 javac javah,그림 참조
아래 HelloNative.h 파일 을 얻 었 습 니 다:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
jni.h 이 파일 은/%JAVA 에 있 습 니 다.HOME%include3.헤더 파일 에 따라 C 를 써 서 로 컬 방법 을 실현 합 니 다.
여기 서 우 리 는 간단하게 이 sayHello 방법 을 다음 과 같이 실현 합 니 다.
#include "HelloNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloNative_sayHello
{
printf("Hello,JNI");
}
4.dll 공유 라 이브 러 리 를 생 성 한 다음 에 자바 프로그램 load 라 이브 러 리 를 호출 하면 됩 니 다.Windows 에서 MinGW GCC 는 다음 과 같이 실 행 됩 니 다.
gcc -m64 -Wl,--add-stdcall-alias -I"C:\Program Files\Java\jdk1.7.0_71\include" -I"C:\Program Files\Java\jdk1.7.0_71\include\include\win32" -shared -o HelloNative.dll HelloNative.c
-m64 는 dll 라 이브 러 리 생 성 이 64 비트 임 을 나타 낸다.그리고 HelloNative 를 실행 합 니 다:
java HelloNative
마침내 콘 솔 인쇄 를 성공 적 으로 볼 수 있 습 니 다.
Hello,JNI
3.JNI 호출 C 흐름 도
기타 소개
native 는 C++와 공동 개발 할 때 쓰 는 거 예요!자바 자체 개발 안 써 도 돼!
native 키 워드 를 사용 하여 이 방법 이 원생 함수 임 을 설명 합 니 다.즉,이 방법 은 C/C++언어 로 이 루어 졌 고 DLL 로 컴 파일 되 어 자바 에서 호출 되 었 습 니 다.
이 함수 들 의 실현 체 는 DLL 에 있 습 니 다.JDK 의 소스 코드 에는 포함 되 지 않 습 니 다.보이 지 않 을 것 입 니 다.서로 다른 플랫폼 에 대해 서도 다르다.이것 도 자바 의 바 텀 메커니즘 입 니 다.실제로 자바 는 서로 다른 플랫폼 에서 서로 다른 native 방법 으로 운영 체제 에 대한 방문 을 실현 합 니 다.
1。native 는 자바 와 다른 언어(예 를 들 어 c++)로 협업 할 때 사용 합 니 다.
즉,native 후의 함수 실현 은 자바 로 쓴 것 이 아 닙 니 다.
2。자바 가 아 닌 이상 소스 코드 는 신경 쓰 지 마 세 요.
자바 는 완벽 하지 않 습 니 다.자바 의 부족 은 운영 속도 가 전통 적 인 C++보다 훨씬 느 린 것 을 제외 하고 자바 는 운영 체제 의 바 텀(예 를 들 어 시스템 하드웨어 등)에 직접 접근 할 수 없습니다.이 를 위해 자바 는 native 방법 으로 자바 프로그램의 기능 을 확장 할 수 있 습 니 다.
native 방법 을 자바 프로그램 과 C 프로그램의 인터페이스 에 비유 할 수 있 습 니 다.그 실현 절차:
1.자바 에서 native()방법 을 설명 한 다음 에 컴 파일 합 니 다.
2.자바 로.h 파일 만 들 기;
3..cpp 파일 을 작성 하여 native 내 보 내기 방법 을 실현 합 니 다.그 중에서 두 번 째 단계 에서 발생 하 는.h 파일 을 포함 해 야 합 니 다(JDK 테이프 의 jni.h 파일 도 포함 되 어 있 음 을 주의 하 십시오).
4.세 번 째 단계 의.cpp 파일 을 동적 링크 라 이브 러 리 파일 로 컴 파일 합 니 다.
5.자바 에서 System.loadlLibrary()방법 으로 네 번 째 단계 에서 발생 하 는 동적 링크 라 이브 러 리 파일 을 불 러 옵 니 다.이 native()방법 은 자바 에서 접근 할 수 있 습 니 다.
JAVA 로 컬 방법 적용 현황
1.바 텀 호스트 플랫폼 의 특정한 특성 을 사용 하기 위해 서 이 기능 은 JAVA API 를 통 해 접근 할 수 없습니다.
2.오래된 시스템 에 접근 하거나 기 존 라 이브 러 리 를 사용 하기 위해 서 이 시스템 이나 라 이브 러 리 는 JAVA 로 작 성 된 것 이 아 닙 니 다.
3.프로그램의 성능 을 가속 화하 기 위해 한동안 민감 한 코드 를 로 컬 방법 으로 실현 한다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.