sql >> Base de Datos >  >> RDS >> Oracle

Entendiendo Java de Oracle en Mac

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.