Make sure PlatformDependent.maxDirectMemory() works on Android
- Fixes #1451
This commit is contained in:
parent
952e7bbec7
commit
32aa661604
@ -23,8 +23,6 @@ import io.netty.util.internal.logging.InternalLoggerFactory;
|
|||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.lang.management.ManagementFactory;
|
|
||||||
import java.lang.management.RuntimeMXBean;
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
@ -496,10 +494,22 @@ public final class PlatformDependent {
|
|||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxDirectMemory <= 0) {
|
if (maxDirectMemory > 0) {
|
||||||
|
return maxDirectMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
// Now try to get the JVM option (-XX:MaxDirectMemorySize) and parse it.
|
// Now try to get the JVM option (-XX:MaxDirectMemorySize) and parse it.
|
||||||
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
|
// Note that we are using reflection because Android doesn't have these classes.
|
||||||
List<String> vmArgs = runtime.getInputArguments();
|
Class<?> mgmtFactoryClass = Class.forName(
|
||||||
|
"java.lang.management.ManagementFactory", true, ClassLoader.getSystemClassLoader());
|
||||||
|
Class<?> runtimeClass = Class.forName(
|
||||||
|
"java.lang.management.RuntimeMXBean", true, ClassLoader.getSystemClassLoader());
|
||||||
|
|
||||||
|
Object runtime = mgmtFactoryClass.getDeclaredMethod("getRuntimeMXBean").invoke(null);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<String> vmArgs = (List<String>) runtimeClass.getDeclaredMethod("getInputArguments").invoke(runtime);
|
||||||
for (int i = vmArgs.size() - 1; i >= 0; i --) {
|
for (int i = vmArgs.size() - 1; i >= 0; i --) {
|
||||||
Matcher m = MAX_DIRECT_MEMORY_SIZE_ARG_PATTERN.matcher(vmArgs.get(i));
|
Matcher m = MAX_DIRECT_MEMORY_SIZE_ARG_PATTERN.matcher(vmArgs.get(i));
|
||||||
if (!m.matches()) {
|
if (!m.matches()) {
|
||||||
@ -520,6 +530,8 @@ public final class PlatformDependent {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} catch (Throwable t) {
|
||||||
|
// Ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxDirectMemory <= 0) {
|
if (maxDirectMemory <= 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user