381

What's the difference between system properties System.getProperties() and environment variables System.getenv() in a JVM?

0

2 Answers 2

509
Sign up to request clarification or add additional context in comments.

8 Comments

Absolutely correct, Bohemian. Environment variables are an "OS thing", and properties are a "Java thing". As it happens, Java chose to expose OS variables as properties (just as Java exposes current directory and "other stuff" as properties), but they are in fact different things.
@Bohemian If I set property via java -Dpropname=value how can i then retrieve those properties?
System.grtProperties() lists all properties, and those set from command line will be there, but there's no way to distinguish those from the other properties added by the system, if that's what you're asking.
Note that you can also set system properties with the environment variable JAVA_TOOL_OPTIONS.
@KanagaveluSugumar Yes, you need to restart: Environment variable settings are read from the environment on start up. i.e. System.getenv(String name) does not dynamically read the value from the system at call time.
|
189

I think the difference between the two boils down to access. Environment variables are accessible by any process and Java system properties are only accessible by the process they are added to.

Also as Bohemian stated, env variables are set in the OS (however they 'can' be set through Java) and system properties are passed as command line options or set via setProperty().

8 Comments

Finally, it's how the variables are added and the scope of the variables.
Keep in mind that other processes can find the cmd used to launch a process, hence java system properties as well.
There is more to it. This tutorial explains in detail: youtu.be/vQYfOMrdgpg - Basically env vars can also have scope, e.g. set in one shell may not be visible in another. You typically cannot set them at runtime because they are on the host, however you can set them (at runtime) in JUnit 5 using extensions etc.
This answer seems incorrect. Environment variables are scoped per process. Each process sees its own environment.
The environment variable map is a per process object in Windows and every UNIX descendant. It is best to think about is a "process attribute" or some kind of process private thing. This map is created when the process is created. The initial values are set by whomever creates the process. Typically, this map shall be a copy of the creator's map. User applications are generally created by the user shell, therefore, user application's environment shall generally by a copy of the user shell's environment. There is not dynamic inheritance here, no "fall back to parent" mechanism.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.