32 비트 JDK에 대해 빌드되고 컴파일 된 Java 코드가 64 비트 JVM에서 작동합니까? 아니면 64 비트 JVM에 64 비트 바이트 코드가 필요합니까?
좀 더 자세히 설명하기 위해 32 비트 JVM을 실행하는 Solaris 환경에서 작동하는 코드가 있지만 이제 JDK 및 Weblogic Server를 64 비트로 업그레이드 한 후 문제가 발생합니다.
답변
예, Java 바이트 코드 (및 소스 코드)는 플랫폼 독립적 인 라이브러리를 사용한다고 가정하면 플랫폼 독립적입니다. 32 비트 대 64 비트는 중요하지 않습니다.
답변
실수로 32 비트 VM이 아닌 64 비트 VM에서 (대형) 애플리케이션을 실행했으며 일부 외부 라이브러리 (JNI에서 호출)가 실패하기 시작할 때까지 알아 차리지 못했습니다.
32 비트 플랫폼에서 직렬화 된 데이터는 문제없이 64 비트 플랫폼에서 읽혔습니다.
어떤 종류의 문제가 발생합니까? 일부는 작동하고 다른 것은 작동하지 않습니까? JConsole 등을 연결해 보았고 주변에 정점이 있습니까?
매우 큰 VM이있는 경우 64 비트의 GC 문제가 영향을 미칠 수 있습니다.
답변
첫 번째 질문에는 예, 두 번째 질문에는 아니요. 가상 머신입니다. 문제는 버전 간 라이브러리 구현의 지정되지 않은 변경과 관련이있을 수 있습니다. 예를 들어 경쟁 조건 일 수 있습니다.
VM이 거쳐야하는 몇 가지 후프가 있습니다. 특히 참조는 int
스택에서 s 와 동일한 공간을 차지하는 것처럼 클래스 파일에서 처리됩니다 . double
그리고 long
두 개의 기준 슬롯을 차지합니다. 인스턴스 필드의 경우 일반적으로 VM이 어쨌든 진행되는 재정렬이 있습니다. 이것은 모두 (상대적으로) 투명하게 수행됩니다.
또한 일부 64 비트 JVM은 “압축 된 oops”를 사용합니다. 데이터가 8 바이트 또는 16 바이트마다 정렬되기 때문에 주소의 3-4 비트는 쓸모가 없습니다 (일부 알고리즘에서는 “마크”비트가 도용 될 수 있음). 이를 통해 32 비트 주소 데이터 (따라서 대역폭의 절반을 사용하므로 더 빠름)가 64 비트 플랫폼에서 35 비트 또는 36 비트의 힙 크기를 사용할 수 있습니다.
답변
모든 바이트 코드는 8 비트 기반입니다. (이것이 바로 BYTE 코드라고 불리는 이유입니다) 모든 명령어는 크기가 8 비트의 배수입니다. 32 비트 머신에서 개발하고 64 비트 JVM으로 서버를 실행합니다.
현재 직면하고있는 문제에 대해 자세히 설명해 주시겠습니까? 그러면 우리가 당신을 도울 수있는 기회가있을 것입니다. 그렇지 않으면 우리는 당신이 가지고있는 문제가 무엇인지 추측 할 것입니다.
답변
네이티브 코드 (특정 아키텍처를 위해 컴파일 된 기계 코드)가없는 경우 코드는 32 비트 및 64 비트 JVM에서 똑같이 잘 실행됩니다.
그러나 더 큰 주소 (32 비트는 4 바이트, 64 비트는 8 바이트)로 인해 64 비트 JVM은 동일한 작업에 대해 32 비트 JVM보다 더 많은 메모리를 필요로합니다.
답변
32 비트와 64 비트의 차이는 네이티브 라이브러리와 인터페이스 할 때 더욱 중요해집니다. 64 비트 Java는 JNI를 통해 32 비트 비 Java dll과 인터페이스 할 수 없습니다.
답변
exe를 생성하는 동안 구성에서 아래와 같이 매개 변수를 추가하십시오.
도움이되기를 바랍니다.
감사…
/ jav