Waarom moeten we JVM-argumenten voorvoegen met -D
b.v. Bij het uitvoeren van een pot van de opdrachtregel? B.g
java -jar -DmyProp="Hello World" myProgram.jar
wordt gebruikt om myProgram.jar
met de systeemparameter myProp
te 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 -D
in 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 -myProp
argument wordt geïntroduceerd als een JVM-optie.
Hoe u uw -myProp
onderscheidt van de -myProp
JVM-optie? Geen enkele manier.
Dus het bestaat dus een voor de hand liggende reden om -D
toe te passen aan definieert systeemeigenschappen.
Als een ander voorbeeld, in plaats van -myProp
, stel dat je programma vertrouwt op een -client
systeemeigenschap.
Het werkt niet :
java -jar -client="davidxxx" myProgram.jar
U krijgt dan een JVM-fout zoals :
Niet-herkende optie: -client=davidxxx
as -client
is een JVM-standaardoptie die geen waarde verwacht.
Maar als je -D-client
gebruikt, is het nu prima, want hier is -Dclient
gedefinieerd als een systeemeigenschap die verschilt van de -client
standaard 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 (-D
maar niet alleen).
Dit zijn de meest gebruikte opties die door alle implementaties van de JVM worden ondersteund.
U gebruikt -D
om 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.