Everyday Dev System

System.arraycopy 메서드가 native인 이유 본문

나의 호기심

System.arraycopy 메서드가 native인 이유

chaeyoung- 2023. 9. 30. 18:57

System.arraycopy 메서드에서 native를 명시한 이유가 무엇일까?

 

    @IntrinsicCandidate
    public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

 

위의 코드는 System 클래스의 코드 일부를 발췌한 것이다.

 

 

 

System.arraycopy 메서드는 저수준 메모리 작업 필요하여 순수 java 코드로 수행이 힘들다.

그 이유는 다음과 같다.

1. 배열 복사 작업:
System.arraycopy 메서드는 배열의 요소를 다른 배열로 복사하는 작업을 수행한다. 이 때, 배열은 메모리 상에 연속적으로 저장되어 있으며, 배열의 각 요소는 메모리의 연속된 위치에 저장된다. 이러한 배열 요소의 메모리 레이아웃은 Java 언어 수준에서 고수준으로 다루기 어렵다.

2. 성능 최적화:
배열의 요소를 복사하는 작업은 반복적으로 수행되며, 이 작업을 효율적으로 수행하기 위해서는 하드웨어나 운영 체제의 메모리 관리 기능을 최대한 활용하는 것이 중요하다. 이러한 최적화는 네이티브 코드에서 더 효과적으로 수행될 수 있다. 그리하여, 성능과 효율성을 향상시키기 위해 Java 개발자들이 해당 메서드의 구현을 네이티브 코드로 위임했다.

 

 

결과적으로 해당 메서드(System.arraycopy)의 구현은 주로 하드웨어 및 운영 체제에 매우 의존적일 수 밖에 없다.

 

 

1. Java 코드에서 System.arraycopy를 호출할 때, 이 메서드는 실제 복사 작업을 C 또는 C++과 같은 네이티브 코드로 위임한다. 이 네이티브 코드는 Java 자체가 아닌 외부 라이브러리나 저수준 언어로 작성되어야 함을 의미한다.

2. 이 네이티브 메서드는 시스템 메모리에 직접 액세스할 수 있으며, 메모리 복사 작업을 효율적으로 수행할 수 있다. 종종 하드웨어에 특정한 명령어를 사용하여 작업하므로 순수한 Java 구현보다 훨씬 빠를 수 있다.

3. 복사 작업이 완료되면 제어가 Java 코드로 반환된다.

 

 

 

 

네이티브 코드 내부를 보고 싶어서 아무리 찾아봤지만, 찾지 못하였다..

'나의 호기심' 카테고리의 다른 글

JNI 사용법과 예제 코드  (0) 2023.10.10
스프링부트로 인터셉트 활용하기  (0) 2023.10.02
JNI란?  (0) 2023.09.30
Java에서 Exception 뜯어보기  (0) 2023.08.04
QueryDSL에서 Q 클래스는 어디에 위치해있을까?  (0) 2023.08.01