Como a JVM determina a codificação de caracteres (padrão?) Para argv no Linux

Java tem umcodificação de caracteres padrão, que ele usa em contextos em que uma codificação de caracteres não é fornecida explicitamente. A documentação paraquão escolhe que a codificação é vaga:

O conjunto de caracteres padrão é determinado durante a inicialização da máquina virtual e normalmente depende do local e do conjunto de caracteres do sistema operacional subjacente.

Essa documentação deve ser vaga, pois o método usado pela JVM é específico do sistema.

Geralmente, o uso da codificação de caracteres padrãoUma má ideia; é melhor usar uma codificação indicada explicitamente ou sempre usar a mesma codificação para algumas E / S. Mas um uso inevitável da codificação de caracteres padrão parece ser a codificação de caracteres usada para argumentos da linha de comando. Em um sistema POSIX como o Linux, o código nativo (C / C ++) da JVM obtém os argumentos da linha de comandos como uma lista terminada nula de C / C ++char ponteiros. O que deve ser pensado como ponteiro de byte, pois deve estar codificando pontos de código node alguma maneira (pouco clara). A JVM deve interpretar essas seqüências de C / C ++chars (bytes) para convertê-los em uma sequência de Javachars, a ser dado aomain() do programa Java. Presumo que a JVM use a codificação de caracteres padrão para isso.

Portanto, preciso saber com precisão como a JVM determina a codificação padrão para um sistema específico (um sistema operacional GNU / Linux moderno), para que eu possa fornecer documentação do usuário sobre como o meu programa se comporta e se os usuários do meu programa podem prever como vai se comportar.

Eu acho que a JVM examina algumas variáveis de ambiente, mas quais?

questionAnswers(1)

yourAnswerToTheQuestion