Tengo un extraño problema de Java. Estoy trabajando en un MacBook Air y haciendo un poco de trabajo de desarrollo de Java. Necesito mi código para hacer lo siguiente:
// pseudo code if (intel) { // Load docker } else if (arm) { // Load ARM docker } Funciona para arquitectura ARM basada en Intel y Linux. Pero para mi M1 MacBook Air, informa que el sistema operativo es Mac OS X pero la arquitectura se informa como x86 . Debido a ese último problema, no puedo distinguir entre las máquinas ARM e Intel.
Aquí está la versión de JDK que estoy ejecutando. Siento que me estoy perdiendo algo aquí, pero ¿hay alguna forma en que pueda escribir este código para poder determinar si el código se ejecuta en un M1 o en un Intel?
~ java --version openjdk 11.0.12 2021-07-20 LTS OpenJDK Runtime Environment Zulu11.50+19-CA (build 11.0.12+7-LTS) OpenJDK 64-Bit Server VM Zulu11.50+19-CA (build 11.0.12+7-LTS, mixed mode) (base) ➜ ~ java -XshowSettings 2>&1 | grep " os." os.arch = x86_64 os.name = Mac OS X os.version = 11.5Probablemente se deba a que en realidad está ejecutando una VM Java x86_64 a través de Rosetta en su Macbook M1. Al menos AdoptOpenJDK ni siquiera ofrece una versión m1 nativa de Java 11. Para Java 17, hay una versión nativa aarch64 disponible: https://adoptium.net/releases.html?variant=openjdk17&jvmVariant=hotspot
En la aplicación Monitor de actividad incluida con su mapa, puede verificar si una aplicación ("proceso") se ejecuta de forma nativa o se ejecuta bajo Rosetta 2 . Encuentre su proceso, probablemente llamado java , y observe la columna Tipo . Las aplicaciones nativas dicen Apple , mientras que las aplicaciones bajo Rosetta 2 dicen Intel .