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 :example@sqldat.com:~$ 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.