From 2ffa083d3ce613dec27e498d6f103ef20ddb1ec4 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Wed, 3 Apr 2013 12:08:01 +0900 Subject: [PATCH] Allow overriding the default allocator properties and log them / Prettier log --- .../netty/buffer/PooledByteBufAllocator.java | 53 +++++++++++++++++-- ...avassistTypeParameterMatcherGenerator.java | 6 ++- .../util/internal/PlatformDependent.java | 2 +- .../util/internal/PlatformDependent0.java | 4 +- 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/buffer/src/main/java/io/netty/buffer/PooledByteBufAllocator.java b/buffer/src/main/java/io/netty/buffer/PooledByteBufAllocator.java index fa7e4481d8..9f09e614bc 100644 --- a/buffer/src/main/java/io/netty/buffer/PooledByteBufAllocator.java +++ b/buffer/src/main/java/io/netty/buffer/PooledByteBufAllocator.java @@ -18,20 +18,65 @@ package io.netty.buffer; import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.StringUtil; +import io.netty.util.internal.SystemPropertyUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicInteger; public class PooledByteBufAllocator extends AbstractByteBufAllocator { - private static final int DEFAULT_NUM_HEAP_ARENA = Runtime.getRuntime().availableProcessors(); - private static final int DEFAULT_NUM_DIRECT_ARENA = Runtime.getRuntime().availableProcessors(); - private static final int DEFAULT_PAGE_SIZE = 8192; - private static final int DEFAULT_MAX_ORDER = 11; // 8192 << 11 = 16 MiB per chunk + private static final InternalLogger logger = InternalLoggerFactory.getInstance(PooledByteBufAllocator.class); + + private static final int DEFAULT_NUM_HEAP_ARENA = Math.max(1, SystemPropertyUtil.getInt( + "io.netty.allocator.numHeapArenas", Runtime.getRuntime().availableProcessors())); + private static final int DEFAULT_NUM_DIRECT_ARENA = Math.max(1, SystemPropertyUtil.getInt( + "io.netty.allocator.numDirectArenas", Runtime.getRuntime().availableProcessors())); + private static final int DEFAULT_PAGE_SIZE; + private static final int DEFAULT_MAX_ORDER; // 8192 << 11 = 16 MiB per chunk private static final int MIN_PAGE_SIZE = 4096; private static final int MAX_CHUNK_SIZE = (int) (((long) Integer.MAX_VALUE + 1) / 2); + static { + int defaultPageSize = SystemPropertyUtil.getInt("io.netty.allocator.pageSize", 8192); + Throwable pageSizeFallbackCause = null; + try { + validateAndCalculatePageShifts(defaultPageSize); + } catch (Throwable t) { + pageSizeFallbackCause = t; + defaultPageSize = 8192; + } + DEFAULT_PAGE_SIZE = defaultPageSize; + + int defaultMaxOrder = SystemPropertyUtil.getInt("io.netty.allocator.maxOrder", 11); + Throwable maxOrderFallbackCause = null; + try { + validateAndCalculateChunkSize(DEFAULT_PAGE_SIZE, defaultMaxOrder); + } catch (Throwable t) { + maxOrderFallbackCause = t; + defaultMaxOrder = 11; + } + DEFAULT_MAX_ORDER = defaultMaxOrder; + + if (logger.isDebugEnabled()) { + logger.debug("io.netty.allocator.numHeapArenas: {}", DEFAULT_NUM_HEAP_ARENA); + logger.debug("io.netty.allocator.numDirectArenas: {}", DEFAULT_NUM_DIRECT_ARENA); + if (pageSizeFallbackCause == null) { + logger.debug("io.netty.allocator.pageSize: {}", DEFAULT_PAGE_SIZE); + } else { + logger.debug("io.netty.allocator.pageSize: {}", DEFAULT_PAGE_SIZE, pageSizeFallbackCause); + } + if (maxOrderFallbackCause == null) { + logger.debug("io.netty.allocator.maxOrder: {}", DEFAULT_MAX_ORDER); + } else { + logger.debug("io.netty.allocator.maxOrder: {}", DEFAULT_MAX_ORDER, maxOrderFallbackCause); + } + logger.debug("io.netty.allocator.chunkSize: {}", DEFAULT_PAGE_SIZE << DEFAULT_MAX_ORDER); + } + } + public static final PooledByteBufAllocator DEFAULT = new PooledByteBufAllocator(PlatformDependent.directBufferPreferred()); diff --git a/common/src/main/java/io/netty/util/internal/JavassistTypeParameterMatcherGenerator.java b/common/src/main/java/io/netty/util/internal/JavassistTypeParameterMatcherGenerator.java index 8d4db12f81..f3c838dc49 100644 --- a/common/src/main/java/io/netty/util/internal/JavassistTypeParameterMatcherGenerator.java +++ b/common/src/main/java/io/netty/util/internal/JavassistTypeParameterMatcherGenerator.java @@ -59,7 +59,11 @@ final class JavassistTypeParameterMatcherGenerator { method.setAccessible(true); Class generated = (Class) method.invoke(classLoader, className, byteCode, 0, byteCode.length); - logger.debug("Generated: {}", generated.getName()); + if (type != Object.class) { + logger.debug("Generated: {}", generated.getName()); + } else { + // Object.class is only used when checking if Javassist is available. + } return (TypeParameterMatcher) generated.newInstance(); } catch (RuntimeException e) { throw e; diff --git a/common/src/main/java/io/netty/util/internal/PlatformDependent.java b/common/src/main/java/io/netty/util/internal/PlatformDependent.java index 9a95dc3ec2..2fe3a2882a 100644 --- a/common/src/main/java/io/netty/util/internal/PlatformDependent.java +++ b/common/src/main/java/io/netty/util/internal/PlatformDependent.java @@ -482,7 +482,7 @@ public final class PlatformDependent { logger.debug("Javassist: unavailable"); logger.warn( "You don't have Javassist in your class path or you don't have enough permission " + - "to load dynamically generated classes. Please check the configuration for better performance."); + "to load dynamically generated classes. Please check the configuration for better performance."); return false; } } diff --git a/common/src/main/java/io/netty/util/internal/PlatformDependent0.java b/common/src/main/java/io/netty/util/internal/PlatformDependent0.java index e31ed8c5eb..8aaf88270d 100644 --- a/common/src/main/java/io/netty/util/internal/PlatformDependent0.java +++ b/common/src/main/java/io/netty/util/internal/PlatformDependent0.java @@ -90,9 +90,9 @@ final class PlatformDependent0 { "copyMemory", new Class[] { Object.class, long.class, Object.class, long.class, long.class }); - logger.debug("sun.misc.Unsafe.copyMemory(Object, long, Object, long, long): available"); + logger.debug("sun.misc.Unsafe.copyMemory: available"); } catch (NoSuchMethodError t) { - logger.debug("sun.misc.Unsafe.copyMemory(Object, long, Object, long, long): unavailable"); + logger.debug("sun.misc.Unsafe.copyMemory: unavailable"); throw t; } } catch (Throwable cause) {