La JVM de Oracle solo se instala en una ubicación. ¡Te han engañado!
Como habrás notado, los comandos de Java en /usr/bin
son enlaces simbólicos a binarios en /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands
. Los binarios dentro de ese directorio son aplicaciones auxiliares que determinan qué VM de Java usar* y luego ejecutan el binario real correspondiente dentro de esa versión de VM. Esta es la razón por la cual todos los archivos binarios dentro de /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands
son casi idénticos en tamaño, a pesar de que esperaría que implementaran una funcionalidad bastante diferente.
Puede ver esto en acción usando dtrace
:
[email protected]:~$ sudo dtrace -n 'syscall::posix_spawn:entry { trace(copyinstr(arg1)); }' -c "/usr/bin/java -version"
dtrace: description 'syscall::posix_spawn:entry ' matched 1 probe
dtrace: pid 44727 has exited
CPU ID FUNCTION:NAME
8 619 posix_spawn:entry /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
El dtrace
dado la invocación imprime el argumento de la ruta a posix_spawn
cuando es llamado por java -version
. En mi caso, la aplicación stub encontró el tiempo de ejecución de Java 1.6 de Apple en /System/Library/Java/JavaVirtualMachines/1.6.0.jdk
y está invocando esa versión de java
comando.
Los binarios de stub también tienen otro beneficio:cuando detectan que no hay una VM de Java instalada, le pedirán al usuario que instale una.
En cuanto al CurrentJDK
enlace simbólico, lo mejor que puedo decir esto por el bien de la compatibilidad con el pasado cuando Apple era la única fuente de la JVM en OS X.
* Se considera una combinación de factores al determinar qué máquina virtual Java se debe usar. JAVA_HOME
se usa si está configurado (pruebe JAVA_HOME=/tmp java
). Si JAVA_HOME
no está configurado, se descubre la lista de todas las máquinas virtuales en el sistema. La JAVA_VERSION
y JAVA_ARCH
Las variables de entorno se usan, si se configuran, para filtrar la lista de máquinas virtuales a una versión particular y una arquitectura compatible. A continuación, la lista resultante se ordena por arquitectura (prefiriendo 64 bits a 32 bits) y versión (más reciente es mejor), y se devuelve la mejor coincidencia.