TL;DR
Java のツールが自動的に読み込む環境変数に JAVA_TOOL_OPTIONS と JDK_JAVA_OPTIONS があります。
これらの主な違いは、その提供範囲で、以下のようになります。
JAVA_TOOL_OPTIONS: java, javac, jar, javadoc などの全てのJavaツールJDK_JAVA_OPTIONS: javaコマンドのみ
JAVA_TOOL_OPTIONS
JAVA_TOOL_OPTIONS 環境変数は、java, javac, jar, javadoc などあらゆるJavaツールが自動的に読み込む環境変数で、JDK 5 から導入されました。
システムプロパティ -Dfile.encoding=UTF-8 やエージェントのロード -javaagent、--add-exports や --add-opens といった、すべてのJavaツールに共通で適用たいオプションを指定できます(ランチャによって処理されるコマンド行の拡張である -client -server オプションを使ったVM選択などには使用できません)。
この環境変数が設定されている場合、コマンドラインに以下のメッセージが表示されます。
Picked up JAVA_TOOL_OPTIONS: -Dxxxx
この表示が邪魔という意見が大多数なのですが、広範囲に影響を与える環境変数であり、意図しない適用を予防する意味でメッセージ表示されます。 このメッセージは、標準エラー出力に出力されるため、環境によっては以下のようにエラーと誤解させるように出力されることがあります。
javac failed: Picked up JAVA_TOOL_OPTIONS: -Dxxxx
JDK_JAVA_OPTIONS
JDK_JAVA_OPTIONS は JDK 9 から有効になったオプションです。
JAVA_TOOL_OPTIONS とは異なり、javaコマンドのみに適用されます(javac を始めとした他のコマンドには適用されません)。
JAVA_TOOL_OPTIONS と同じオプションが指定されていた場合、JDK_JAVA_OPTIONS で指定されたのもが優先となります(コマンドラインで直接していされたオプションはJDK_JAVA_OPTIONSのものより優先)。
-jar や --module、-h や -version など、JDK_JAVA_OPTIONS に指定できないオプションも存在します(指定されていた場合はエラー)。
JDK_JAVA_OPTIONSが設定されている場合、ランチャはメッセージを標準エラー出力にリマインダとして出力します。
NOTE: Picked up JDK_JAVA_OPTIONS: -D...
JAVA_TOOL_OPTIONS の場合と同じように以下のように出力されることもあります。
java failed: NOTE: Picked up JDK_JAVA_OPTIONS: -D...