undertow-core-2.0.13.Final.jar
登录
|
io.undertow:undertow-core:2.0.13.Final
io
undertow
io
UndertowOptions.java
security
protocols
conduits
predicate
connector
util
Version.java
Undertow.java
UndertowLogger.java
version.properties
channels
UndertowLogger_$logger.java
server
XnioByteBufferPool.java
OpenListener.java
Connectors.java
protocol
session
SSLSessionInfo.java
handlers
RequestTooBigException.java
DefaultByteBufferPool.java
ServerConnection.java
ConduitWrapper.java
HandlerWrapper.java
BlockingHttpExchange.java
HttpServerExchange.java
DelegateOpenListener.java
AggregateConnectorStatistics.java
ConnectorStatistics.java
AbstractServerConnection.java
JvmRouteHandler.java
TruncatedResponseException.java
ResponseCommitListener.java
RoutingHandler.java
ListenerRegistry.java
SecureCookieCommitListener.java
DefaultResponseListener.java
HttpUpgradeListener.java
ExchangeCompletionListener.java
ConnectionSSLSessionInfo.java
RenegotiationRequiredException.java
XnioBufferPoolAdaptor.java
BasicSSLSessionInfo.java
DirectByteBufferDeallocator.java
HttpHandler.java
ConnectorStatisticsImpl.java
attribute
UndertowMessages_$bundle.java
Handlers.java
client
websockets
UndertowMessages.java
META-INF
DirectByteBufferDeallocator.java
清空
类结构
package io.undertow.server; import java.lang.reflect.
Field
; import java.lang.reflect.
Method
; import java.nio.
ByteBuffer
; import java.security.
AccessController
; import java.security.
PrivilegedAction
; import io.undertow.
UndertowLogger
; import sun.misc.
Unsafe
; /** * {@link DirectByteBufferDeallocator} Utility class used to free direct buffer memory. */ public final class
DirectByteBufferDeallocator
{ private static final boolean
SUPPORTED
; private static final
Method
cleaner
; private static final
Method
cleanerClean
; private static final
Unsafe
UNSAFE
; static {
String
versionString
=
System
.
getProperty
("java.specification.version"); if(
versionString
.
startsWith
("1.")) {
versionString
=
versionString
.
substring
(2); } int
version
=
Integer
.
parseInt
(
versionString
);
Method
tmpCleaner
= null;
Method
tmpCleanerClean
= null; boolean
supported
;
Unsafe
tmpUnsafe
= null; if (
version
< 9) { try {
tmpCleaner
=
Class
.
forName
("java.nio.DirectByteBuffer").
getMethod
("cleaner");
tmpCleaner
.
setAccessible
(true);
tmpCleanerClean
=
Class
.
forName
("sun.misc.Cleaner").
getMethod
("clean");
tmpCleanerClean
.
setAccessible
(true);
supported
= true; } catch (
Throwable
t
) {
UndertowLogger
.
ROOT_LOGGER
.
directBufferDeallocatorInitializationFailed
(
t
);
supported
= false; } } else {
tmpUnsafe
=
getUnsafe
(); try {
tmpCleanerClean
=
tmpUnsafe
.
getClass
().
getDeclaredMethod
("invokeCleaner",
ByteBuffer
.class);
tmpCleanerClean
.
setAccessible
(true);
supported
= true; } catch (
Throwable
t
) {
UndertowLogger
.
ROOT_LOGGER
.
directBufferDeallocatorInitializationFailed
(
t
);
supported
= false; } }
SUPPORTED
=
supported
;
cleaner
=
tmpCleaner
;
cleanerClean
=
tmpCleanerClean
;
UNSAFE
=
tmpUnsafe
; } private
DirectByteBufferDeallocator
() { // Utility Class } /** * Attempts to deallocate the underlying direct memory. * This is a no-op for buffers where {@link ByteBuffer#isDirect()} returns false. * * @param buffer to deallocate */ public static void
free
(
ByteBuffer
buffer
) { if (
SUPPORTED
&&
buffer
!= null &&
buffer
.
isDirect
()) { try { if (
UNSAFE
!= null) { //use the JDK9 method
cleanerClean
.
invoke
(
UNSAFE
,
buffer
); } else {
Object
cleaner
=
DirectByteBufferDeallocator
.
cleaner
.
invoke
(
buffer
);
cleanerClean
.
invoke
(
cleaner
); } } catch (
Throwable
t
) {
UndertowLogger
.
ROOT_LOGGER
.
directBufferDeallocationFailed
(
t
); } } } private static
Unsafe
getUnsafe
() { if (
System
.
getSecurityManager
() != null) { return
AccessController
.
doPrivileged
(new
PrivilegedAction
<
Unsafe
>() { public
Unsafe
run
() { return
getUnsafe0
(); } }); } return
getUnsafe0
(); } private static
Unsafe
getUnsafe0
() { try {
Field
theUnsafe
=
Unsafe
.class.
getDeclaredField
("theUnsafe");
theUnsafe
.
setAccessible
(true); return (
Unsafe
)
theUnsafe
.
get
(null); } catch (
Throwable
t
) { throw new
RuntimeException
("JDK did not allow accessing unsafe",
t
); } } }
查找资源
Jre/Lib
输入类名或文件名
类结构窗口