2 * environment information
4 * License : The MIT License
5 * Copyright(c) 2009 olyutorskii
8 package jp.sfjp.jindolf.config;
11 import java.text.MessageFormat;
12 import java.util.Arrays;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.SortedMap;
16 import java.util.TreeMap;
21 public final class EnvInfo{
24 public static final String OS_NAME;
26 public static final String OS_VERSION;
28 public static final String OS_ARCH;
30 public static final String JAVA_VENDOR;
32 public static final String JAVA_VERSION;
35 public static final long MAX_MEMORY;
37 private static final SortedMap<String, String> PROPERTY_MAP;
38 private static final SortedMap<String, String> ENVIRONMENT_MAP;
40 private static final List<String> CLASSPATHS;
42 private static final String[] PROPNAMES = {
51 private static final String[] ENVNAMES = {
59 private static final String FORM_MEM =
60 "最大ヒープメモリ量: {0,number} bytes\n";
61 private static final String INDENT = "\u0020\u0020";
62 private static final char NL = '\n';
65 Runtime runtime = Runtime.getRuntime();
66 MAX_MEMORY = runtime.maxMemory();
68 ENVIRONMENT_MAP = buildEnvMap();
70 PROPERTY_MAP = buildPropMap();
71 OS_NAME = PROPERTY_MAP.get("os.name");
72 OS_VERSION = PROPERTY_MAP.get("os.version");
73 OS_ARCH = PROPERTY_MAP.get("os.arch");
74 JAVA_VENDOR = PROPERTY_MAP.get("java.vendor");
75 JAVA_VERSION = PROPERTY_MAP.get("java.version");
77 String classpath = PROPERTY_MAP.get("java.class.path");
78 CLASSPATHS = buildClassPathList(classpath);
95 private static SortedMap<String, String> buildEnvMap(){
96 SortedMap<String, String> envmap = new TreeMap<>();
98 for(String name : ENVNAMES){
101 val = System.getenv(name);
102 }catch(SecurityException e){
105 if(val == null) continue;
106 envmap.put(name, val);
109 SortedMap<String, String> result;
110 result = Collections.unmodifiableSortedMap(envmap);
116 * 主要システムプロパティ値マップを作成する。
118 * @return 主要システムプロパティ値マップ
120 private static SortedMap<String, String> buildPropMap(){
121 SortedMap<String, String> propmap = new TreeMap<>();
123 for(String name : PROPNAMES){
126 val = System.getProperty(name);
127 }catch(SecurityException e){
130 if(val == null) continue;
131 propmap.put(name, val);
134 SortedMap<String, String> result;
135 result = Collections.unmodifiableSortedMap(propmap);
146 private static List<String> buildClassPathList(String classpath){
148 if(classpath != null){
149 pathArray = classpath.split(File.pathSeparator);
151 pathArray = new String[0];
155 result = Arrays.asList(pathArray);
156 result = Collections.unmodifiableList(result);
165 public static String getVMInfo(){
166 StringBuilder result = new StringBuilder();
168 String memform = MessageFormat.format(FORM_MEM, MAX_MEMORY);
169 result.append(memform).append(NL);
171 result.append(getSysPropInfo()).append(NL);
172 result.append(getEnvInfo()).append(NL);
173 result.append(getClassPathInfo()).append(NL);
175 return result.toString();
181 * <p>java.class.pathの値は除く。
183 * @return システムプロパティ要覧
185 private static CharSequence getSysPropInfo(){
186 StringBuilder result = new StringBuilder();
187 result.append("主要システムプロパティ:\n");
189 PROPERTY_MAP.entrySet().stream()
190 .filter(entry -> ! entry.getKey().equals("java.class.path"))
191 .forEachOrdered(entry -> {
192 result.append(INDENT);
193 result.append(entry.getKey());
195 result.append(entry.getValue());
207 private static CharSequence getEnvInfo(){
208 StringBuilder result = new StringBuilder("主要環境変数:\n");
210 ENVIRONMENT_MAP.entrySet().stream()
211 .forEachOrdered(entry -> {
212 result.append(INDENT);
213 result.append(entry.getKey());
215 result.append(entry.getValue());
227 private static CharSequence getClassPathInfo(){
228 StringBuilder result = new StringBuilder("クラスパス:\n");
230 CLASSPATHS.stream().forEachOrdered(path -> {
231 result.append(INDENT).append(path).append(NL);