Waarom beginnen JVM-argumenten met “-d”?

Waarom moeten we JVM-argumenten voorvoegen met -Db.v. Bij het uitvoeren van een pot van de opdrachtregel? B.g

java -jar -DmyProp="Hello World" myProgram.jar

wordt gebruikt om myProgram.jarmet de systeemparameter myPropte gebruiken. Dus waarom de toonaangevende -D? Waarom kon de architecten van Java ons niet laten doen:

java -jar -myProp="Hello World" myProgram.jar

Ik hoop op een antwoord dan alleen “omdat dat de manier is waarop het is”.

Bonusvraag: Waarom de letter -Din tegenstelling tot een andere letter, staat het dan voor iets?


Opmerking: Deze vraag vraagt ​​waarom er was nodig om “D” of een andere brief voor die kwestie in de eerste plaats te gebruiken. Het is minder bezig met de keuze van de specifieke letter “D” in een andere letter, hoewel dat wordt gevraagd als een bonusvraag.

De bonusvraag heeft hier een antwoord: in Java – D Waar staat de D voor? .


1, Autoriteit 100%

Waarom kunnen de architecten van Java ons niet gewoon doen:

java -jar -myProp="Hello World" myProgram.jar

Het kan vandaag werken, maar veronderstel dat in de volgende Java-versies een -myPropargument wordt geïntroduceerd als een JVM-optie.
Hoe u uw -myProponderscheidt van de -myPropJVM-optie? Geen enkele manier.
Dus het bestaat dus een voor de hand liggende reden om -Dtoe te passen aan definieert systeemeigenschappen.

Als een ander voorbeeld, in plaats van -myProp, stel dat je programma vertrouwt op een -clientsysteemeigenschap.
Het werkt niet :

java -jar -client="davidxxx" myProgram.jar

U krijgt dan een JVM-fout zoals :

Niet-herkende optie: -client=davidxxx

as -clientis een JVM-standaardoptie die geen waarde verwacht.

Maar als je -D-clientgebruikt, is het nu prima, want hier is -Dclientgedefinieerd als een systeemeigenschap die verschilt van de -clientstandaard JVM-optie :

java -jar -D-client="davidxxx" myProgram.jar

Of door beide te gebruiken:

java -jar -client -D-client="davidxxx" myProgram.jar

Om verder te gaan, niet alle JVM-argumenten beginnen met -D.maar de meeste hebben een voorvoegsel (-D, -X, -XX) waarmee op een of andere manier naamruimten kunnen worden gedefinieerd.

U heeft verschillende categorieën JVM-argumenten:

1. Standaardopties (-Dmaar niet alleen).

Dit zijn de meest gebruikte opties die door alle implementaties van de JVM worden ondersteund.

U gebruikt -Dom systeemeigenschappen op te geven, maar de meeste hebben geen prefix:-verbose, -showversion, en dus voor…

2. Niet-standaard opties (voorafgegaan door -X)

Deze opties zijn opties voor algemene doeleinden die specifiek zijn voor de Java HotSpot Virtual Machine.
Bijvoorbeeld: -Xmssize, -Xmxsize

3. Geavanceerde runtime-opties (voorafgegaan door -XX)

Deze opties bepalen het runtime-gedrag van de Java HotSpot VM.

4. Geavanceerde JIT-compileropties (voorafgegaan door -XX)

Deze opties regelen de dynamische just-in-time (JIT)-compilatie die wordt uitgevoerd door de Java HotSpot VM.

5. Geavanceerde onderhoudsopties (voorafgegaan door -XX)

Deze opties bieden de mogelijkheid om systeeminformatie te verzamelen en uitgebreide foutopsporing uit te voeren.

6. Geavanceerde opties voor het ophalen van vuilnis (voorafgegaan door -XX)

Deze opties bepalen hoe garbage collection (GC) wordt uitgevoerd door de Java HotSpot VM.



Antwoord 2, autoriteit 47%

“Definieer”. De betekenis is vergelijkbaar met een preprocessor-definitie in C. De -D betekent dat de definitie zich in de context van de toepassing bevindt en niet in de Java-interpretercontext zoals elke andere optie vóór de naam van het uitvoerbare bestand.

Het gebruik van de letter ‘D’ wordt niet specifiek uitgelegd in de titel de documentatie, maar het enige gebruik is het “definiëren” van een sleutel in de systeemeigenschappenkaart – behalve deze verwijzing:

De klasse System onderhoudt een Properties-object dat de configuratie van de huidige werkomgeving definieert. Zie Systeemeigenschappen voor meer informatie over deze eigenschappen. In de rest van deze sectie wordt uitgelegd hoe u eigenschappen kunt gebruiken om de applicatieconfiguratie te beheren.


Antwoord 3, autoriteit 15%

Als je niets opgeeft zoals -myProp=”XYZ” betekent dit dat het als argument wordt doorgegeven aan de hoofdmethode van het programma.

-D betekent dat u deze waarde gebruikt met System.GetProperty

-x wordt gebruikt voor uitbreidingsargumenten zoals -xdebug -xnoagent -djava.compiler = Geen -Xrunjdwp: transport = dt_socket, server = y, suspend = y, adres = 8000

Ja, ze hadden kunnen verwisselen .. de personages; Maar deze tekens worden gebruikt om te specificeren welk type parameter wordt doorgegeven en de consument is.

Other episodes