sql >> Database >  >> RDS >> Oracle

Java van Oracle op Mac begrijpen

Oracle's JVM is slechts op één locatie geïnstalleerd. Je bent misleid!

Zoals je hebt opgemerkt, zijn de Java-commando's in /usr/bin zijn symbolische links naar binaire bestanden in /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands . De binaire bestanden in die map zijn stub-applicaties die bepalen welke Java-VM moet worden gebruikt*, en vervolgens het overeenkomstige echte binaire bestand binnen die VM-versie uitvoeren. Dit is de reden waarom alle binaire bestanden in /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands zijn bijna identiek in grootte, ondanks het feit dat je zou verwachten dat ze een heel andere functionaliteit zouden implementeren.

Je kunt dit in actie zien door dtrace . te gebruiken :

[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

De gegeven dtrace aanroep drukt het padargument af naar posix_spawn wanneer het wordt aangeroepen door java -version . In mijn geval heeft de stub-toepassing de Java 1.6-runtime van Apple gevonden in /System/Library/Java/JavaVirtualMachines/1.6.0.jdk en roept die versie van de java . op commando.

De stub-binaire bestanden hebben nog een ander voordeel:wanneer ze detecteren dat er geen Java VM is geïnstalleerd, zullen ze de gebruiker vragen er een te installeren.

Wat betreft de CurrentJDK symlink, zo goed als ik dit kan zeggen omwille van achterwaartse compatibiliteit met het verleden toen Apple de enige bron van de JVM op OS X was.

* Bij het bepalen welke Java-VM moet worden gebruikt, wordt rekening gehouden met een combinatie van factoren. JAVA_HOME wordt gebruikt indien ingesteld (probeer JAVA_HOME=/tmp java ). Als JAVA_HOME niet is ingesteld, wordt de lijst met alle virtuele machines op het systeem ontdekt. De JAVA_VERSION en JAVA_ARCH omgevingsvariabelen worden, indien ingesteld, gebruikt om de lijst met virtuele machines te filteren op een bepaalde versie en ondersteunde architectuur. De resulterende lijst wordt vervolgens gesorteerd op architectuur (bij voorkeur 64-bit boven 32-bit) en versie (nieuwer is beter), en de beste overeenkomst wordt geretourneerd.



  1. Hoe uw kleine onderneming kan profiteren van cloud computing

  2. PostgreSQL:Query heeft geen bestemming voor resultaatgegevens

  3. UUID-prestaties in MySQL?

  4. SQL Server 2017 Stap voor stap installatie -2