Java 로컬 메서드 Native Method 상세 설명

4174 단어 JavaNativeMethod
Java 로컬 메서드 Native Method 상세 설명
하나.네이티브 메서드
간단하게 말하면 Native Method는 자바가 아닌 자바 코드를 호출하는 인터페이스이다.하나의 Native Method는 이러한 자바 방법이다. 이 방법의 실현은 비자바 언어로 이루어진다. 예를 들어 C.이 특징은 자바가 가지고 있는 것이 아니다. 많은 다른 프로그래밍 언어에는 이런 메커니즘이 있다. 예를 들어 C+에서 extern'C'로 C++ 컴파일러에게 C의 함수를 호출할 수 있다.
   "A native method is a Java method whose implementation is provided by non-java code."
native method를 정의할 때 실현체를 제공하지 않습니다. (일부는 자바 인터페이스를 정의하는 것과 같습니다.) 사실 현체는 비자바 언어가 밖에서 이루어지기 때문입니다.다음은 예제입니다.

 public class IHaveNatives
  {
   native public void Native1( int x ) ;
   native static public long Native2() ;
   native synchronized private float Native3( Object o ) ;
   native void Native4( int[] ary ) throws Exception ;
  } 
이러한 방법의 성명은 일부 비자바 코드가 이 자바 코드에서 어떻게 보이는지 설명합니다(view).
식별자native는 모든 다른java 식별자와 연결할 수 있지만 abstract는 제외됩니다.이것은 합리적이다. 왜냐하면native는 이러한 방법이 실현체가 있다는 것을 암시하기 때문이다. 단지 이러한 실현체는 비java일 뿐이지만 abstract는 이러한 방법이 실현체가 없다는 것을 분명히 가리킨다.native가 다른java 식별자와 연결될 때 그 의미는 비Native Method와 차이가 없다. 예를 들어 native static은 이 방법이 클래스의 실례가 발생하지 않을 때 직접 호출할 수 있음을 나타낸다. 이것은 매우 편리하다. 예를 들어native method로 C의 클래스 라이브러리를 호출하고 싶을 때.위의 세 번째 방법은native synchronized를 사용했습니다. JVM은 이 방법의 실현체에 들어가기 전에 동기화 자물쇠 메커니즘을 실행합니다(예를 들어 자바의 다중 스레드).
하나의nativemethod 방법은 비기본 형식을 포함하여 모든 자바 형식을 되돌려 줄 수 있으며, 또한 이상 제어를 할 수 있습니다.이러한 방법의 실현체는 이상을 만들어 그것을 던질 수 있다는 점은java의 방법과 매우 비슷하다.native method가 일부 비기본 형식, 예를 들어 Object나 정형 수조를 받아들일 때, 이 방법은 이 비기본 형식의 내부에 접근할 수 있지만, 이것은 이 native 방법을 당신이 방문한 자바 클래스의 실현에 의존하게 할 것이다.한 가지 명심해야 할 것은 우리는nativemethod의 로컬 구현에서 모든 자바 특성에 접근할 수 있지만, 이것은 당신이 방문한 자바 특성의 실현에 의존해야 하며, 이렇게 하는 것은 자바 언어에서 그 특성을 사용하는 것보다 훨씬 편리하고 쉽다는 것이다.
native method의 존재는 다른 클래스가 로컬 방법을 호출하는 데 아무런 영향을 미치지 않습니다. 실제로 이 방법을 호출하는 다른 클래스는 로컬 방법을 호출하는 줄도 모릅니다.JVM은 로컬 메서드를 호출하는 모든 세부 사항을 제어합니다.우리가 로컬 방법을final로 성명할 때 주의해야 한다.자바로 이루어진 방법체는 컴파일될 때 내연으로 인해 효율이 향상될 수 있다.그러나nativefinal 방법도 이런 장점을 얻을 수 있을지 의심스럽지만 이것은 코드 최적화 방면의 문제일 뿐 기능 실현에 영향을 미치지 않는다.
만약 로컬 방법을 포함하는 클래스가 계승된다면, 하위 클래스는 이 로컬 방법을 계승하고 자바 언어로 이 방법을 다시 쓸 수 있다. (이것은 보기에 좀 이상한 것 같다.) 마찬가지로 로컬 방법이fianl에 표시된다면, 이 방법은 계승된 후에 다시 쓸 수 없다.
로컬 방법은 매우 유용하다. 왜냐하면 이것은 효과적으로 jvm를 확충했기 때문이다.사실상, 우리가 쓴 자바 코드는 이미 로컬 방법을 사용했다. 선의 자바 병발(다중 스레드) 메커니즘 실현에서 많은 운영체제와 접촉점은 로컬 방법을 사용했기 때문에 자바 프로그램은 자바가 실행될 때의 경계를 초월할 수 있다.로컬 방법이 있으면 자바 프로그램은 모든 응용 단계의 작업을 할 수 있다.
2.네이티브 메서드를 사용하는 이유
자바는 사용하기에 매우 편리하지만 일부 단계의 임무는 자바로 실현하기가 쉽지 않거나 우리가 프로그램의 효율에 대해 매우 신경을 쓸 때 문제가 발생한다.
자바 환경 외부와의 상호 작용:
때때로 자바 응용 프로그램은 자바 바깥 환경과 상호작용을 해야 한다.이것은 로컬 방법이 존재하는 주요 원인이다. 자바가 운영체제나 일부 하드웨어와 정보를 교환해야 할 때의 상황을 생각해 볼 수 있다.로컬 방법은 바로 이러한 교류 메커니즘이다. 이것은 우리에게 매우 간결한 인터페이스를 제공하고 자바 응용 이외의 번거로운 세부 사항을 이해할 필요가 없다.
운영 체제와 상호 작용:
JVM은 자바 언어 자체와 실행 시 라이브러리를 지원합니다. 자바 프로그램은 생존하는 플랫폼입니다. 해석기(바이트 코드 해석)와 로컬 코드에 연결된 라이브러리로 구성되어 있습니다.그러나 어쨌든, 그것은 완전한 시스템이 아니라, 항상 일부 밑바닥 (underneath 아래에 있는) 시스템의 지원에 의존한다.이런 하부 시스템은 종종 강력한 운영체제이다.로컬 방법을 사용함으로써 우리는 자바로 jre와 베이스 시스템의 상호작용을 실현할 수 있다. 심지어 JVM의 일부분은 C로 쓴 것이다. 그리고 만약에 우리가 자바 언어 자체가 봉인된 운영체제의 특성을 제공하지 않을 때 우리는 본 방법을 사용해야 한다.
    Sun's Java
Sun의 해석기는 C로 이루어져서 일반적인 C처럼 외부와 상호작용할 수 있다.jre는 대부분java로 이루어졌고 일부 로컬 방법을 통해 외부와 상호작용을 한다.예: 클래스java.lang.Thread의 setPriority () 방법은 자바로 이루어지지만, 이 클래스의 로컬 방법인 setPriority 0 () 을 호출합니다.이 로컬 방법은 C로 이루어져 JVM 내부에 심어져 있으며 Windows 95의 플랫폼에서 이 로컬 방법은 최종적으로 Win32 SetPriority() API를 호출할 것이다.이것은 로컬 방법의 구체적인 실현은 JVM이 직접 제공한다. 더 많은 경우 로컬 방법은 외부의 동적 링크 라이브러리(external dynamic link library)에서 제공되고 JVM에 의해 호출된다.
셋.JVM이 Native Method를 어떻게 활성화하는지:
우리는 클래스가 처음 사용될 때, 이 클래스의 바이트 코드는 메모리에 불러올 뿐만 아니라, 한 번만 다시 불러올 수 있다는 것을 안다.이 불러오는 바이트 코드의 입구에는 이 종류의 모든 방법 설명자의list가 유지되고 있습니다. 이 방법 설명자는 이러한 정보를 포함합니다. 방법 코드가 어디에 저장되어 있는지, 어떤 매개 변수가 있는지, 방법의 설명자 (public 등) 등입니다.
만약 하나의 방법 묘사부호에native가 있다면, 이 묘사부호 블록은 이 방법의 실현을 가리키는 바늘이 있을 것이다.이것들은 일부 DLL 파일에 구현되지만, 운영체제에 의해 자바 프로그램의 주소 공간에 불러옵니다.로컬 메서드가 있는 클래스가 로드될 때 관련 DLL이 로드되지 않으므로 메서드를 가리키는 포인터가 설정되지 않습니다.로컬 방법이 호출되기 전에 이 DLL이 불러옵니다. 이것은 자바를 호출하는 것입니다.system.loadLibrary()가 구현됩니다.   
마지막으로 제시해야 할 것은 로컬 방법을 사용하는 것은 비용이 있고 자바의 많은 장점을 잃었다는 것이다.만약 다른 선택이 없다면, 우리는 로컬 방법을 사용할 수 있다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기