sql >> Databasteknik >  >> RDS >> Oracle

Förstå Oracles Java på Mac

Oracles JVM är bara installerat på en plats. Du har blivit vilseledd!

Som du har noterat, Java-kommandon i /usr/bin är symboliska länkar till binärer i /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands . Binärfilerna i den katalogen är stubbapplikationer som bestämmer vilken Java VM som ska användas*, och sedan exekverar motsvarande riktiga binär i den VM-versionen. Det är därför alla binärfiler inom /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands är nästan identiska i storlek, trots att du förväntar dig att de ska implementera helt olika funktioner.

Du kan se detta i praktiken genom att använda 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

Den givna dtrace invocation skriver ut sökvägsargumentet till posix_spawn när den anropas av java -version . I mitt fall har stubbapplikationen hittat Apples Java 1.6 runtime i /System/Library/Java/JavaVirtualMachines/1.6.0.jdk och anropar den versionen av java kommando.

Stubbbinärfilerna har också en annan fördel:när de upptäcker att ingen Java VM är installerad kommer de att uppmana användaren att installera en.

När det gäller CurrentJDK symbollänk, så gott jag kan berätta detta för bakåtkompatibilitetens skull med det förflutna när Apple var den enda källan till JVM på OS X.

* En kombination av faktorer beaktas när man bestämmer vilken Java VM som ska användas. JAVA_HOME används om inställt (försök med JAVA_HOME=/tmp java ). Om JAVA_HOME inte är inställt så upptäcks listan över alla virtuella maskiner på systemet. JAVA_VERSION och JAVA_ARCH miljövariabler används, om de är inställda, för att filtrera listan över virtuella maskiner till en viss version och vilken arkitektur som stöds. Den resulterande listan sorteras sedan efter arkitektur (föredrar 64-bitars framför 32-bitars) och version (nyare är bättre), och den bästa matchningen returneras.



  1. Vårt nya SQLPerformance.com nyhetsbrev

  2. Hur databaser stöder e-handelsföretag

  3. Kontrollera om ett objekt är en primärnyckel med OBJECTPROPERTY() i SQL Server

  4. Hur får jag en utdataparameter för lagrad procedur som är en array att fungera?