netty检测系统工具PlatformDependent
发布时间:2020-12-14 06:21:10 所属栏目:Java 来源:网络整理
导读:1. 检测jdk版本 @SuppressWarnings("LoopStatementThatDoesntLoop" /spanspan style="color: #008000;"gt;///spanspan style="color: #008000;"gt; Not really a loop/span span style="color: #0000ff;"gt;for/spanspan style="color: #000000;"gt; (;;) {
1. 检测jdk版本 @SuppressWarnings("LoopStatementThatDoesntLoop"
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Not really a loop</span>
<span style="color: #0000ff;">for</span><span style="color: #000000;"> (;;) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Android</span>
<span style="color: #0000ff;">if</span><span style="color: #000000;"> (isAndroid()) {
javaVersion </span>= 6<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
Class.forName(</span>"java.time.Clock",<span style="color: #0000ff;">false</span>,getClassLoader(Object.<span style="color: #0000ff;">class</span><span style="color: #000000;">));
javaVersion </span>= 8<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
} </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Ignore</span>
<span style="color: #000000;"> }
<span style="color: #000000;"> }
2. 检测是否window windows = SystemPropertyUtil.get("os.name","").toLowerCase(Locale.US).contains("win""Platform: Windows"
3. 检测是否root权限 String[] ID_COMMANDS </span>= { "/usr/bin/id","/bin/id","/usr/xpg4/bin/id","id"<span style="color: #000000;">};
Pattern UID_PATTERN </span>= Pattern.compile("^(?:0|[1-9][0-9]*)$"<span style="color: #000000;">);
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String idCmd: ID_COMMANDS) {
Process p </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
BufferedReader in </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
String uid </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
p </span>= Runtime.getRuntime().exec(<span style="color: #0000ff;">new</span> String[] { idCmd,"-u"<span style="color: #000000;"> });
in </span>= <span style="color: #0000ff;">new</span> BufferedReader(<span style="color: #0000ff;">new</span><span style="color: #000000;"> InputStreamReader(p.getInputStream(),CharsetUtil.US_ASCII));
uid </span>=<span style="color: #000000;"> in.readLine();
in.close();
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (;;) {
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
</span><span style="color: #0000ff;">int</span> exitCode =<span style="color: #000000;"> p.waitFor();
</span><span style="color: #0000ff;">if</span> (exitCode != 0<span style="color: #000000;">) {
uid </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
} </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (InterruptedException e) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Ignore</span>
<span style="color: #000000;"> } <span style="color: #008000;">//<span style="color: #008000;"> Failed to run the command. uid = <span style="color: #0000ff;">null<span style="color: #000000;">; } <span style="color: #0000ff;">finally<span style="color: #000000;"> { <span style="color: #0000ff;">if (in != <span style="color: #0000ff;">null<span style="color: #000000;">) { <span style="color: #0000ff;">try<span style="color: #000000;"> { in.close(); } <span style="color: #0000ff;">catch<span style="color: #000000;"> (IOException e) { <span style="color: #008000;">//<span style="color: #008000;"> Ignore <span style="color: #000000;"> } } <span style="color: #0000ff;">if (p != <span style="color: #0000ff;">null<span style="color: #000000;">) { <span style="color: #0000ff;">try<span style="color: #000000;"> { p.destroy(); } <span style="color: #0000ff;">catch<span style="color: #000000;"> (Exception e) { <span style="color: #008000;">//<span style="color: #008000;"> Android sometimes triggers an ErrnoException. <span style="color: #000000;"> } } }
<span style="color: #000000;"> }
4.检测最大直接内存 maxDirectMemory = 0
Class> vmClass = Class.forName("sun.misc.VM",= vmClass.getDeclaredMethod("maxDirectMemory"= ((Number) m.invoke(
</span><span style="color: #0000ff;">if</span> (maxDirectMemory > 0<span style="color: #000000;">) {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> maxDirectMemory;
}
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Now try to get the JVM option (-XX:MaxDirectMemorySize) and parse it.
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Note that we are using reflection because Android doesn't have these classes.</span>
Class<?> mgmtFactoryClass =<span style="color: #000000;"> Class.forName(
</span>"java.lang.management.ManagementFactory",getSystemClassLoader());
Class</span><?> runtimeClass =<span style="color: #000000;"> Class.forName(
</span>"java.lang.management.RuntimeMXBean",getSystemClassLoader());
Object runtime </span>= mgmtFactoryClass.getDeclaredMethod("getRuntimeMXBean").invoke(<span style="color: #0000ff;">null</span><span style="color: #000000;">);
@SuppressWarnings(</span>"unchecked"<span style="color: #000000;">)
List</span><String> vmArgs = (List<String>) runtimeClass.getDeclaredMethod("getInputArguments"<span style="color: #000000;">).invoke(runtime);
</span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = vmArgs.size() - 1; i >= 0; i --<span style="color: #000000;">) {
Matcher m </span>=<span style="color: #000000;"> MAX_DIRECT_MEMORY_SIZE_ARG_PATTERN.matcher(vmArgs.get(i));
</span><span style="color: #0000ff;">if</span> (!<span style="color: #000000;">m.matches()) {
</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;
}
maxDirectMemory </span>= Long.parseLong(m.group(1<span style="color: #000000;">));
</span><span style="color: #0000ff;">switch</span> (m.group(2).charAt(0<span style="color: #000000;">)) {
</span><span style="color: #0000ff;">case</span> 'k': <span style="color: #0000ff;">case</span> 'K'<span style="color: #000000;">:
maxDirectMemory </span>*= 1024<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> 'm': <span style="color: #0000ff;">case</span> 'M'<span style="color: #000000;">:
maxDirectMemory </span>*= 1024 * 1024<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> 'g': <span style="color: #0000ff;">case</span> 'G'<span style="color: #000000;">:
maxDirectMemory </span>*= 1024 * 1024 * 1024<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
}
} </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Throwable t) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Ignore</span>
<span style="color: #000000;"> }
等等 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |