hashCode()와 getClass()가 네이티브 메서드인 이유는 무엇입니까?
소스 코드를 확인했습니다.Object
내가 그 방법 선언을 찾은 클래스.getClass()
이었다
public final native Class<?> getClass();
그리고 선언문은hashCode()
이었다
public native int hashCode();
왜 이 두 가지 방법이native
클래스의 메서드와 해당 메서드의 소스 코드를 어떻게 얻을 수 있습니까?
네이티브 메소드의 전체 소스 코드는 여기에서 찾을 수 있습니다.
이것이 당신에게 효과가 있기를 바랍니다.
이것들은 기계와 상호작용해야 하기 때문에 기본적인 방법입니다.여기서 기계 종속 코드는 소스 패키지와 함께 제공되지 않는 C 언어로 작성됩니다.rt.jar
의lib
Java Runtime Environment(JRE)의 위치입니다.
네이티브가 되는 또 다른 이유는 성능상의 이유일 수 있습니다.C 레벨 프로그래밍 성능이 향상될 수 있으므로 C 언어로 네이티브 코드를 작성했을 수 있습니다.
이 방법은 네이티브 데이터와 관련이 있기 때문에 네이티브입니다.hashCode
메소드는 포인터의 내부 표현에 의존하는 정수 값을 힙의 객체로 반환합니다.getClass
메서드는 내부에 액세스해야 합니다.vtbl
(가상 함수 테이블) 컴파일된 프로그램의 클래스 계층을 나타냅니다.이 두 가지 모두 핵심 Java에서는 불가능합니다.
개체 클래스의 소스 코드는 여기에서 찾을 수 있습니다.
이 소스에는 getClass() 메서드의 구현이 포함되어 있습니다(라인 58 참조).hashCode는 함수 포인터 JVM_으로 정의됩니다.IHASH 코드(라인 43 참조).
JVM_IHashCode는 jvm.cpp에 정의되어 있습니다.504행부터 시작하는 코드를 참조하십시오.그러면 ObjectSynchronizer가 호출됩니다.:synchronizer.cpp에 정의된 FastHashCode.576행에서 FastHashCode 구현을 참조하고 530행에서 get_next_hash를 참조하십시오.
아마도 이 방법은 성능과 구현 시 실제적인 문제 때문에 기본적으로 사용될 것입니다.
예를 들어 javadocs에서 hashCode는 일반적으로 "객체의 내부 주소를 정수로 변환함으로써" 구현됩니다.이 내부 주소는 java sdk를 통해 사용할 수 없으며 기본 방법으로 구현해야 합니다.
Java 네이티브 메서드의 소스를 찾는 것이 가능합니까?를 참조하십시오.또한 이 블로그 게시물 Object를 읽으십시오.hashCode 구현입니다.더 자세한 정보를 제공합니다.그러나 hashCode가 객체의 ID에서 생성되지 않는다고 잘못된 주장을 합니다.
도움이 되길 바랍니다.
이에 대한 정보는 헤더(클래스용) 또는 다른 곳(해시 코드용)에 있습니다.이것은 Java에서 구현할 수 있는 것이 아닙니다.이러한 메서드의 소스는 JVM의 소스에 있습니다. 예를 들어 OpenJDK의 소스를 다운로드할 수 있습니다.
언급URL : https://stackoverflow.com/questions/10578764/why-are-hashcode-and-getclass-native-methods
'programing' 카테고리의 다른 글
봄 콩에서 Http Servlet 요청을 받으려면 어떻게 해야 합니까? (0) | 2023.08.21 |
---|---|
Set-Cookie 헤더가 Chrome에서 쿠키를 설정하지 않음 (0) | 2023.08.21 |
도커에서 UDP 포트를 게시하려면 어떻게 해야 합니까? (0) | 2023.08.16 |
자바스크립트를 호출하기 위해 링크를 사용하는 방법은? (0) | 2023.08.16 |
CSS 높이: 100% 대 높이: 자동 간의 차이 (0) | 2023.08.16 |