sql >> Database teknologi >  >> RDS >> Oracle

Forstå Oracles Java på Mac

Oracles JVM er kun installeret ét sted. Du er blevet vildledt!

Som du har bemærket, Java-kommandoer i /usr/bin er symbolske links til binære filer i /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands . De binære filer i den mappe er stub-applikationer, der bestemmer, hvilken Java VM der skal bruges*, og derefter udfører den tilsvarende rigtige binære i den VM-version. Dette er grunden til, at alle binære filer i /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands er næsten identiske i størrelse, på trods af at du ville forvente, at de implementerer en helt anden funktionalitet.

Du kan se dette i aktion ved at bruge 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 givne dtrace invocation udskriver sti-argumentet til posix_spawn når den kaldes af java -version . I mit tilfælde har stub-applikationen fundet Apples Java 1.6 runtime i /System/Library/Java/JavaVirtualMachines/1.6.0.jdk og påberåber denne version af java kommando.

Stub-binære filer har også en anden fordel:Når de opdager, at ingen Java VM er installeret, vil de bede brugeren om at installere en.

Med hensyn til CurrentJDK symlink, så godt jeg kan fortælle dette af hensyn til bagudkompatibilitet med fortiden, da Apple var den eneste kilde til JVM på OS X.

* En kombination af faktorer tages i betragtning, når det bestemmes, hvilken Java VM der skal bruges. JAVA_HOME bruges, hvis indstillet (prøv JAVA_HOME=/tmp java ). Hvis JAVA_HOME ikke er indstillet, bliver listen over alle virtuelle maskiner på systemet opdaget. JAVA_VERSION og JAVA_ARCH miljøvariabler bruges, hvis de er indstillet, til at filtrere listen over virtuelle maskiner til en bestemt version og understøttet arkitektur. Den resulterende liste sorteres derefter efter arkitektur (foretrækker 64-bit frem for 32-bit) og version (nyere er bedre), og det bedste match returneres.



  1. Hvad er LEN()-ækvivalenten i MySQL?

  2. Hvilken MySQL-datatype der skal bruges til lagring af booleske værdier

  3. Hvordan ATAN2() virker i MariaDB

  4. MySQL MariaDB – Forespørgsel ved hjælp af Temp-tabel