Argument passed to System.exit(x) -> becomes the JVM exit code.
Exit code 0 is used to indicate normal exit. Unique positive exit code to indicate specific problem.
No. If all non-daemon threads exit normally(presence/absence of exception does not matter), JVM terminates with 0.
Exit code between 1 and 127 are specific codes used to indicate error in JVM. e.g. mismatched jdk/jre versions, incorrect memory configuration/command-line options, etc.
JVM exit due to specific signal would be
128+signal-id
List of signal-id can be found using kill -l