64비트 JVM과 32비트 JVM의 차이

애플리케이션이 사용하고 있는 JVM이 64bit인지 32bit인지 인식해야 한다. 그래야 호환되는 네이티브 라이브러리를 사용할 수 있다.

비트(bit)란?

컴퓨터에서 비트는 정보의 최소 단위다. 역사적으로 컴퓨터는 데이터를 처리할 수 있는 비트 수가 1비트에서 시작해서 4비트, 8비트, 16비트, 32비트, 64비트 순으로 발전해왔다. 비트가 커질수록 CPU의 처리 단위와 메모리 주소 공간이 더 커졌음을 의미한다.

64bit JVM과 32bit JVM

비트라는 개념은 운영체제(OS)나 JVM에서도 사용된다. 64비트 시스템은 32비트 시스템보다 한 번에 더 많은 데이터를 처리할 수 있고 더 넓은 메모리 주소 공간을 사용할 수 있다.

OS와 JVM의 비트 수는 CPU의 아키텍처와 동일한 개념이다. 결국 비트가 다르다는 건 한 번에 처리할 수 있는 데이터 양이 다르다는 것으로 이해하면 된다.

32비트 jvm은 2의 32승 개의 메모리 주소를 참조할 수 있다. 최대 4GB의 메모리 주소 공간을 사용할 수 있다. 32비트 jvm은 한번에 32비트(4바이트)의 데이터를 처리한다.

64비트 jvm은 2의 64승 개의 메모리 주소를 참조할 수 있다. 이론적으로는 16엑사바이트(EB)에 해당하는 메모리를 참조할 수 있는데 실제로는 하드웨어나 운영체제, JVM 설정에 따라 사용할 수 있는 메모리 양은 제한이 있다. 64비트 jvm은 한번에 64비트(8바이트)의 데이터를 처리한다.

32와 64는 큰 차이가 없는 숫자처럼 보여도 2의 32승과 2의 64승은 비교할 수 없을 정도로 차이가 크다.

네이티브 라이브러리 사용 시 호환성 문제

실무에서 32비트 jvm과 64비트 jvm의 차이는 애플리케이션을 구동할 때 명확하게 느낄 수 있다. 32비트 jvm이 64비트 네이티브 라이브러리(.so, .dll 파일)를 사용하려고 하면 호환성 문제로 에러가 발생한다. 반대로 64비트 jvm이 32비트 네이티브 라이브러리를 사용하려고 해도 동일한 문제가 발생한다.

자바 애플리케이션에서 C/C++로 작성된 so나 dll 파일 같은 네이티브 라이브러리를 사용할 땐 os의 비트 수가 아닌 jvm의 비트 수에 맞춰 라이브러리를 선택해야 한다.

댓글 남기기