programing

hashCode()와 getClass()가 네이티브 메서드인 이유는 무엇입니까?

topblog 2023. 8. 16. 21:55
반응형

hashCode()와 getClass()가 네이티브 메서드인 이유는 무엇입니까?

소스 코드를 확인했습니다.Object내가 그 방법 선언을 찾은 클래스.getClass()이었다

public final native Class<?> getClass();

그리고 선언문은hashCode()이었다

public native int hashCode();

왜 이 두 가지 방법이native클래스의 메서드와 해당 메서드의 소스 코드를 어떻게 얻을 수 있습니까?

네이티브 메소드의 전체 소스 코드는 여기에서 찾을 수 있습니다.

이것이 당신에게 효과가 있기를 바랍니다.

이것들은 기계와 상호작용해야 하기 때문에 기본적인 방법입니다.여기서 기계 종속 코드는 소스 패키지와 함께 제공되지 않는 C 언어로 작성됩니다.rt.jarlibJava 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

반응형