Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Entendendo o Java da Oracle no Mac


A JVM da Oracle é instalada apenas em um local. Você foi enganado!

Como você notou, os comandos Java em /usr/bin são links simbólicos para binários em /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands . Os binários nesse diretório são aplicativos stub que determinam qual Java VM usar* e, em seguida, executam o binário real correspondente nessa versão de VM. É por isso que todos os binários dentro de /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands são quase idênticos em tamanho, apesar do fato de que você esperaria que implementassem funcionalidades bem diferentes.

Você pode ver isso em ação 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

O dtrace fornecido invocação imprime o argumento de caminho para posix_spawn quando é chamado por java -version . No meu caso, o aplicativo stub encontrou o tempo de execução Java 1.6 da Apple em /System/Library/Java/JavaVirtualMachines/1.6.0.jdk e está invocando essa versão do java comando.

Os binários stub também têm outro benefício:quando detectam que nenhuma Java VM está instalada, eles solicitam que o usuário instale uma.

Quanto ao CurrentJDK symlink, o melhor que posso dizer por causa da compatibilidade com versões anteriores, quando a Apple era a única fonte da JVM no OS X.

* Uma combinação de fatores é considerada ao determinar qual Java VM deve ser usada. JAVA_HOME éusado se estiver definido (experimente JAVA_HOME=/tmp java ). Se JAVA_HOME não estiver definido, a lista de todas as máquinas virtuais no sistema será descoberta. O JAVA_VERSION e JAVA_ARCH variáveis ​​de ambiente são usadas, se configuradas, para filtrar a lista de máquinas virtuais para uma determinada versão e arquitetura suportada. A lista resultante é então classificada por arquitetura (preferindo 64 bits em vez de 32 bits) e versão (mais recente é melhor), e a melhor correspondência é retornada.