Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
503c18aa
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
503c18aa
编写于
5月 16, 2011
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
58fae5ce
d5dd5c75
变更
113
展开全部
隐藏空白更改
内联
并排
Showing
113 changed file
with
1691 addition
and
395 deletion
+1691
-395
make/com/sun/nio/sctp/FILES_java.gmk
make/com/sun/nio/sctp/FILES_java.gmk
+1
-1
make/java/management/mapfile-vers
make/java/management/mapfile-vers
+1
-0
make/java/nio/FILES_java.gmk
make/java/nio/FILES_java.gmk
+2
-2
src/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java
...com/sun/management/GarbageCollectionNotificationInfo.java
+237
-0
src/share/classes/com/sun/nio/sctp/MessageInfo.java
src/share/classes/com/sun/nio/sctp/MessageInfo.java
+2
-2
src/share/classes/com/sun/nio/sctp/SctpChannel.java
src/share/classes/com/sun/nio/sctp/SctpChannel.java
+15
-15
src/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
src/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
+15
-15
src/share/classes/com/sun/nio/sctp/SctpServerChannel.java
src/share/classes/com/sun/nio/sctp/SctpServerChannel.java
+3
-3
src/share/classes/com/sun/nio/sctp/SctpSocketOption.java
src/share/classes/com/sun/nio/sctp/SctpSocketOption.java
+1
-1
src/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java
...e/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java
+7
-7
src/share/classes/java/lang/SafeVarargs.java
src/share/classes/java/lang/SafeVarargs.java
+20
-8
src/share/classes/java/lang/Throwable.java
src/share/classes/java/lang/Throwable.java
+23
-5
src/share/classes/java/net/SocketOption.java
src/share/classes/java/net/SocketOption.java
+1
-1
src/share/classes/java/net/StandardSocketOptions.java
src/share/classes/java/net/StandardSocketOptions.java
+2
-2
src/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java
...es/java/nio/channels/AsynchronousServerSocketChannel.java
+2
-2
src/share/classes/java/nio/channels/AsynchronousSocketChannel.java
.../classes/java/nio/channels/AsynchronousSocketChannel.java
+5
-5
src/share/classes/java/nio/channels/DatagramChannel.java
src/share/classes/java/nio/channels/DatagramChannel.java
+8
-8
src/share/classes/java/nio/channels/MulticastChannel.java
src/share/classes/java/nio/channels/MulticastChannel.java
+4
-4
src/share/classes/java/nio/channels/NetworkChannel.java
src/share/classes/java/nio/channels/NetworkChannel.java
+2
-2
src/share/classes/java/nio/channels/ServerSocketChannel.java
src/share/classes/java/nio/channels/ServerSocketChannel.java
+2
-2
src/share/classes/java/nio/channels/SocketChannel.java
src/share/classes/java/nio/channels/SocketChannel.java
+6
-6
src/share/classes/java/nio/charset/Charset.java
src/share/classes/java/nio/charset/Charset.java
+1
-1
src/share/classes/java/nio/charset/StandardCharsets.java
src/share/classes/java/nio/charset/StandardCharsets.java
+3
-3
src/share/classes/java/nio/file/Path.java
src/share/classes/java/nio/file/Path.java
+5
-5
src/share/classes/java/nio/file/StandardWatchEventKinds.java
src/share/classes/java/nio/file/StandardWatchEventKinds.java
+4
-4
src/share/classes/java/nio/file/WatchEvent.java
src/share/classes/java/nio/file/WatchEvent.java
+4
-4
src/share/classes/java/nio/file/WatchService.java
src/share/classes/java/nio/file/WatchService.java
+2
-2
src/share/classes/java/nio/file/Watchable.java
src/share/classes/java/nio/file/Watchable.java
+1
-1
src/share/classes/java/sql/BatchUpdateException.java
src/share/classes/java/sql/BatchUpdateException.java
+3
-3
src/share/classes/java/util/Formatter.java
src/share/classes/java/util/Formatter.java
+6
-6
src/share/classes/java/util/concurrent/Phaser.java
src/share/classes/java/util/concurrent/Phaser.java
+1
-1
src/share/classes/java/util/concurrent/locks/LockSupport.java
...share/classes/java/util/concurrent/locks/LockSupport.java
+4
-0
src/share/classes/java/util/logging/LogManager.java
src/share/classes/java/util/logging/LogManager.java
+27
-4
src/share/classes/java/util/logging/Logger.java
src/share/classes/java/util/logging/Logger.java
+22
-3
src/share/classes/java/util/regex/Pattern.java
src/share/classes/java/util/regex/Pattern.java
+1
-1
src/share/classes/java/util/zip/ZipCoder.java
src/share/classes/java/util/zip/ZipCoder.java
+4
-4
src/share/classes/java/util/zip/ZipFile.java
src/share/classes/java/util/zip/ZipFile.java
+2
-2
src/share/classes/java/util/zip/ZipInputStream.java
src/share/classes/java/util/zip/ZipInputStream.java
+2
-2
src/share/classes/java/util/zip/ZipOutputStream.java
src/share/classes/java/util/zip/ZipOutputStream.java
+2
-2
src/share/classes/javax/management/loading/package.html
src/share/classes/javax/management/loading/package.html
+2
-2
src/share/classes/javax/management/modelmbean/package.html
src/share/classes/javax/management/modelmbean/package.html
+2
-2
src/share/classes/javax/management/monitor/package.html
src/share/classes/javax/management/monitor/package.html
+2
-2
src/share/classes/javax/management/openmbean/package.html
src/share/classes/javax/management/openmbean/package.html
+2
-2
src/share/classes/javax/management/package.html
src/share/classes/javax/management/package.html
+2
-2
src/share/classes/javax/management/relation/package.html
src/share/classes/javax/management/relation/package.html
+2
-2
src/share/classes/javax/management/remote/package.html
src/share/classes/javax/management/remote/package.html
+2
-2
src/share/classes/javax/management/timer/Timer.java
src/share/classes/javax/management/timer/Timer.java
+5
-1
src/share/classes/sun/awt/FontDescriptor.java
src/share/classes/sun/awt/FontDescriptor.java
+3
-3
src/share/classes/sun/management/GarbageCollectionNotifInfoCompositeData.java
...n/management/GarbageCollectionNotifInfoCompositeData.java
+219
-0
src/share/classes/sun/management/GarbageCollectorImpl.java
src/share/classes/sun/management/GarbageCollectorImpl.java
+104
-5
src/share/classes/sun/management/GcInfoCompositeData.java
src/share/classes/sun/management/GcInfoCompositeData.java
+44
-3
src/share/classes/sun/management/MemoryManagerImpl.java
src/share/classes/sun/management/MemoryManagerImpl.java
+14
-2
src/share/classes/sun/management/VMManagement.java
src/share/classes/sun/management/VMManagement.java
+1
-0
src/share/classes/sun/management/VMManagementImpl.java
src/share/classes/sun/management/VMManagementImpl.java
+6
-0
src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java
...asses/sun/nio/ch/AsynchronousServerSocketChannelImpl.java
+3
-3
src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java
...are/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java
+6
-6
src/share/classes/sun/nio/ch/DatagramChannelImpl.java
src/share/classes/sun/nio/ch/DatagramChannelImpl.java
+16
-16
src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java
src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java
+10
-10
src/share/classes/sun/nio/ch/ExtendedSocketOption.java
src/share/classes/sun/nio/ch/ExtendedSocketOption.java
+1
-1
src/share/classes/sun/nio/ch/NativeThreadSet.java
src/share/classes/sun/nio/ch/NativeThreadSet.java
+6
-1
src/share/classes/sun/nio/ch/Net.java
src/share/classes/sun/nio/ch/Net.java
+5
-5
src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
+4
-4
src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java
src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java
+2
-2
src/share/classes/sun/nio/ch/SocketAdaptor.java
src/share/classes/sun/nio/ch/SocketAdaptor.java
+14
-14
src/share/classes/sun/nio/ch/SocketChannelImpl.java
src/share/classes/sun/nio/ch/SocketChannelImpl.java
+9
-9
src/share/classes/sun/nio/fs/AbstractPoller.java
src/share/classes/sun/nio/fs/AbstractPoller.java
+4
-4
src/share/classes/sun/nio/fs/AbstractWatchKey.java
src/share/classes/sun/nio/fs/AbstractWatchKey.java
+7
-7
src/share/classes/sun/nio/fs/PollingWatchService.java
src/share/classes/sun/nio/fs/PollingWatchService.java
+12
-12
src/share/classes/sun/security/jgss/spi/GSSContextSpi.java
src/share/classes/sun/security/jgss/spi/GSSContextSpi.java
+0
-12
src/share/classes/sun/security/ssl/JsseJce.java
src/share/classes/sun/security/ssl/JsseJce.java
+3
-3
src/share/classes/sun/text/resources/BreakIteratorRules_th.java
...are/classes/sun/text/resources/BreakIteratorRules_th.java
+1
-11
src/share/javavm/export/jmm.h
src/share/javavm/export/jmm.h
+4
-1
src/share/native/sun/management/GarbageCollectorImpl.c
src/share/native/sun/management/GarbageCollectorImpl.c
+15
-1
src/share/native/sun/management/VMManagementImpl.c
src/share/native/sun/management/VMManagementImpl.c
+7
-0
src/share/native/sun/nio/ch/genSocketOptionRegistry.c
src/share/native/sun/nio/ch/genSocketOptionRegistry.c
+16
-16
src/share/sample/nio/chatserver/ChatServer.java
src/share/sample/nio/chatserver/ChatServer.java
+3
-3
src/share/sample/nio/file/WatchDir.java
src/share/sample/nio/file/WatchDir.java
+1
-1
src/share/sample/nio/multicast/Reader.java
src/share/sample/nio/multicast/Reader.java
+1
-1
src/share/sample/nio/multicast/Sender.java
src/share/sample/nio/multicast/Sender.java
+1
-1
src/solaris/classes/sun/nio/ch/SctpChannelImpl.java
src/solaris/classes/sun/nio/ch/SctpChannelImpl.java
+1
-1
src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java
src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java
+1
-1
src/solaris/classes/sun/nio/ch/SctpNet.java
src/solaris/classes/sun/nio/ch/SctpNet.java
+1
-1
src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java
src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java
+2
-2
src/solaris/classes/sun/nio/fs/LinuxWatchService.java
src/solaris/classes/sun/nio/fs/LinuxWatchService.java
+10
-10
src/solaris/classes/sun/nio/fs/SolarisWatchService.java
src/solaris/classes/sun/nio/fs/SolarisWatchService.java
+9
-9
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
+11
-10
src/windows/classes/sun/nio/fs/WindowsWatchService.java
src/windows/classes/sun/nio/fs/WindowsWatchService.java
+5
-5
src/windows/native/sun/security/mscapi/security.cpp
src/windows/native/sun/security/mscapi/security.cpp
+1
-1
test/ProblemList.txt
test/ProblemList.txt
+3
-0
test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java
...ectorMXBean/GarbageCollectionNotificationContentTest.java
+163
-0
test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java
...ageCollectorMXBean/GarbageCollectionNotificationTest.java
+128
-0
test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java
test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java
+1
-1
test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java
.../com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java
+1
-1
test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java
...a/nio/channels/AsynchronousServerSocketChannel/Basic.java
+1
-1
test/java/nio/channels/AsynchronousSocketChannel/Basic.java
test/java/nio/channels/AsynchronousSocketChannel/Basic.java
+2
-2
test/java/nio/channels/DatagramChannel/BasicMulticastTests.java
...ava/nio/channels/DatagramChannel/BasicMulticastTests.java
+2
-2
test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java
...o/channels/DatagramChannel/MulticastSendReceiveTests.java
+2
-2
test/java/nio/channels/DatagramChannel/SocketOptionTests.java
.../java/nio/channels/DatagramChannel/SocketOptionTests.java
+1
-1
test/java/nio/channels/FileChannel/ClosedByInterrupt.java
test/java/nio/channels/FileChannel/ClosedByInterrupt.java
+10
-5
test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java
...a/nio/channels/ServerSocketChannel/SocketOptionTests.java
+1
-1
test/java/nio/channels/SocketChannel/Shutdown.java
test/java/nio/channels/SocketChannel/Shutdown.java
+1
-1
test/java/nio/channels/SocketChannel/SocketOptionTests.java
test/java/nio/channels/SocketChannel/SocketOptionTests.java
+1
-1
test/java/nio/charset/StandardCharsets/Standard.java
test/java/nio/charset/StandardCharsets/Standard.java
+14
-14
test/java/nio/file/Files/CheckPermissions.java
test/java/nio/file/Files/CheckPermissions.java
+1
-1
test/java/nio/file/WatchService/Basic.java
test/java/nio/file/WatchService/Basic.java
+7
-7
test/java/nio/file/WatchService/FileTreeModifier.java
test/java/nio/file/WatchService/FileTreeModifier.java
+1
-1
test/java/nio/file/WatchService/LotsOfEvents.java
test/java/nio/file/WatchService/LotsOfEvents.java
+1
-1
test/java/nio/file/WatchService/SensitivityModifier.java
test/java/nio/file/WatchService/SensitivityModifier.java
+1
-1
test/java/nio/file/WatchService/WithSecurityManager.java
test/java/nio/file/WatchService/WithSecurityManager.java
+1
-1
test/java/util/logging/LoggingDeadlock3.java
test/java/util/logging/LoggingDeadlock3.java
+81
-0
test/java/util/logging/LoggingDeadlock3.props
test/java/util/logging/LoggingDeadlock3.props
+3
-0
test/java/util/logging/LoggingDeadlock4.java
test/java/util/logging/LoggingDeadlock4.java
+111
-0
test/javax/management/timer/StartTest.java
test/javax/management/timer/StartTest.java
+98
-0
未找到文件。
make/com/sun/nio/sctp/FILES_java.gmk
浏览文件 @
503c18aa
...
...
@@ -38,7 +38,7 @@ FILES_java = \
com/sun/nio/sctp/SctpMultiChannel.java \
com/sun/nio/sctp/SctpServerChannel.java \
com/sun/nio/sctp/SctpSocketOption.java \
com/sun/nio/sctp/SctpStandardSocketOption.java \
com/sun/nio/sctp/SctpStandardSocketOption
s
.java \
com/sun/nio/sctp/SendFailedNotification.java \
com/sun/nio/sctp/ShutdownNotification.java \
\
...
...
make/java/management/mapfile-vers
浏览文件 @
503c18aa
...
...
@@ -49,6 +49,7 @@ SUNWprivate_1.1 {
Java_sun_management_Flag_setStringValue;
Java_sun_management_GarbageCollectorImpl_getCollectionCount;
Java_sun_management_GarbageCollectorImpl_getCollectionTime;
Java_sun_management_GarbageCollectorImpl_setNotificationEnabled;
Java_sun_management_GcInfoBuilder_fillGcAttributeInfo;
Java_sun_management_GcInfoBuilder_getLastGcInfo0;
Java_sun_management_GcInfoBuilder_getNumGcExtAttributes;
...
...
make/java/nio/FILES_java.gmk
浏览文件 @
503c18aa
...
...
@@ -71,7 +71,7 @@ FILES_src = \
java/nio/charset/CoderMalfunctionError.java \
java/nio/charset/CodingErrorAction.java \
java/nio/charset/MalformedInputException.java \
java/nio/charset/StandardCharset.java \
java/nio/charset/StandardCharset
s
.java \
java/nio/charset/UnmappableCharacterException.java \
\
java/nio/charset/spi/CharsetProvider.java \
...
...
@@ -116,7 +116,7 @@ FILES_src = \
java/nio/file/SimpleFileVisitor.java \
java/nio/file/StandardCopyOption.java \
java/nio/file/StandardOpenOption.java \
java/nio/file/StandardWatchEventKind.java \
java/nio/file/StandardWatchEventKind
s
.java \
java/nio/file/TempFileHelper.java \
java/nio/file/WatchEvent.java \
java/nio/file/WatchKey.java \
...
...
src/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java
0 → 100644
浏览文件 @
503c18aa
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
com.sun.management
;
import
javax.management.Notification
;
import
javax.management.openmbean.CompositeData
;
import
javax.management.openmbean.CompositeDataView
;
import
javax.management.openmbean.CompositeType
;
import
java.util.Collection
;
import
java.util.Collections
;
import
sun.management.GarbageCollectionNotifInfoCompositeData
;
/**
* The information about a garbage collection
*
* <p>
* A garbage collection notification is emitted by {@link GarbageCollectorMXBean}
* when the Java virtual machine completes a garbage collection action
* The notification emitted will contain the garbage collection notification
* information about the status of the memory:
* <u1>
* <li>The name of the garbage collector used perform the collection.</li>
* <li>The action performed by the garbage collector.</li>
* <li>The cause of the garbage collection action.</li>
* <li>A {@link GcInfo} object containing some statistics about the GC cycle
(start time, end time) and the memory usage before and after
the GC cycle.</li>
* </u1>
*
* <p>
* A {@link CompositeData CompositeData} representing
* the {@code GarbageCollectionNotificationInfo} object
* is stored in the
* {@linkplain javax.management.Notification#setUserData userdata}
* of a {@linkplain javax.management.Notification notification}.
* The {@link #from from} method is provided to convert from
* a {@code CompositeData} to a {@code GarbageCollectionNotificationInfo}
* object. For example:
*
* <blockquote><pre>
* Notification notif;
*
* // receive the notification emitted by a GarbageCollectorMXBean and set to notif
* ...
*
* String notifType = notif.getType();
* if (notifType.equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) {
* // retrieve the garbage collection notification information
* CompositeData cd = (CompositeData) notif.getUserData();
* GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from(cd);
* ....
* }
* </pre></blockquote>
*
* <p>
* The type of the notification emitted by a {@code GarbageCollectorMXBean} is:
* <ul>
* <li>A {@linkplain #GARBAGE_COLLECTION_NOTIFICATION garbage collection notification}.
* <br>Used by every notification emitted by the garbage collector, the details about
* the notification are provided in the {@linkplain #getGcAction action} String
* <p></li>
* </ul>
**/
public
class
GarbageCollectionNotificationInfo
implements
CompositeDataView
{
private
final
String
gcName
;
private
final
String
gcAction
;
private
final
String
gcCause
;
private
final
GcInfo
gcInfo
;
private
final
CompositeData
cdata
;
/**
* Notification type denoting that
* the Java virtual machine has completed a garbage collection cycle.
* This notification is emitted by a {@link GarbageCollectorMXBean}.
* The value of this notification type is
* {@code com.sun.management.gc.notification}.
*/
public
static
final
String
GARBAGE_COLLECTION_NOTIFICATION
=
"com.sun.management.gc.notification"
;
/**
* Constructs a {@code GarbageCollectionNotificationInfo} object.
*
* @param gcName The name of the garbage collector used to perform the collection
* @param gcAction The name of the action performed by the garbage collector
* @param gcCause The cause the garbage collection action
* @param gcInfo a GcInfo object providing statistics about the GC cycle
*/
public
GarbageCollectionNotificationInfo
(
String
gcName
,
String
gcAction
,
String
gcCause
,
GcInfo
gcInfo
)
{
if
(
gcName
==
null
)
{
throw
new
NullPointerException
(
"Null gcName"
);
}
if
(
gcAction
==
null
)
{
throw
new
NullPointerException
(
"Null gcAction"
);
}
if
(
gcCause
==
null
)
{
throw
new
NullPointerException
(
"Null gcCause"
);
}
this
.
gcName
=
gcName
;
this
.
gcAction
=
gcAction
;
this
.
gcCause
=
gcCause
;
this
.
gcInfo
=
gcInfo
;
this
.
cdata
=
new
GarbageCollectionNotifInfoCompositeData
(
this
);
}
GarbageCollectionNotificationInfo
(
CompositeData
cd
)
{
GarbageCollectionNotifInfoCompositeData
.
validateCompositeData
(
cd
);
this
.
gcName
=
GarbageCollectionNotifInfoCompositeData
.
getGcName
(
cd
);
this
.
gcAction
=
GarbageCollectionNotifInfoCompositeData
.
getGcAction
(
cd
);
this
.
gcCause
=
GarbageCollectionNotifInfoCompositeData
.
getGcCause
(
cd
);
this
.
gcInfo
=
GarbageCollectionNotifInfoCompositeData
.
getGcInfo
(
cd
);
this
.
cdata
=
cd
;
}
/**
* Returns the name of the garbage collector used to perform the collection
*
* @return the name of the garbage collector used to perform the collection
*/
public
String
getGcName
()
{
return
gcName
;
}
/**
* Returns the action of the performed by the garbage collector
*
* @return the the action of the performed by the garbage collector
*/
public
String
getGcAction
()
{
return
gcAction
;
}
/**
* Returns the cause the garbage collection
*
* @return the the cause the garbage collection
*/
public
String
getGcCause
()
{
return
gcCause
;
}
/**
* Returns the GC information related to the last garbage collection
*
* @return the GC information related to the
* last garbage collection
*/
public
GcInfo
getGcInfo
()
{
return
gcInfo
;
}
/**
* Returns a {@code GarbageCollectionNotificationInfo} object represented by the
* given {@code CompositeData}.
* The given {@code CompositeData} must contain
* the following attributes:
* <blockquote>
* <table border>
* <tr>
* <th align=left>Attribute Name</th>
* <th align=left>Type</th>
* </tr>
* <tr>
* <td>gcName</td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>gcAction</td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>gcCause</td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>gcInfo</td>
* <td>{@code javax.management.openmbean.CompositeData}</td>
* </tr>
* </table>
* </blockquote>
*
* @param cd {@code CompositeData} representing a
* {@code GarbageCollectionNotificationInfo}
*
* @throws IllegalArgumentException if {@code cd} does not
* represent a {@code GarbaageCollectionNotificationInfo} object.
*
* @return a {@code GarbageCollectionNotificationInfo} object represented
* by {@code cd} if {@code cd} is not {@code null};
* {@code null} otherwise.
*/
public
static
GarbageCollectionNotificationInfo
from
(
CompositeData
cd
)
{
if
(
cd
==
null
)
{
return
null
;
}
if
(
cd
instanceof
GarbageCollectionNotifInfoCompositeData
)
{
return
((
GarbageCollectionNotifInfoCompositeData
)
cd
).
getGarbageCollectionNotifInfo
();
}
else
{
return
new
GarbageCollectionNotificationInfo
(
cd
);
}
}
public
CompositeData
toCompositeData
(
CompositeType
ct
)
{
return
cdata
;
}
}
src/share/classes/com/sun/nio/sctp/MessageInfo.java
浏览文件 @
503c18aa
...
...
@@ -179,7 +179,7 @@ public abstract class MessageInfo {
* completely received. For messages being sent {@code true} indicates that
* the message is complete, {@code false} indicates that the message is not
* complete. How the send channel interprets this value depends on the value
* of its {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
* of its {@link SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} socket option.
*
* @return {@code true} if, and only if, the message is complete
...
...
@@ -192,7 +192,7 @@ public abstract class MessageInfo {
* <P> For messages being sent {@code true} indicates that
* the message is complete, {@code false} indicates that the message is not
* complete. How the send channel interprets this value depends on the value
* of its {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
* of its {@link SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} socket option.
*
* @param complete
...
...
src/share/classes/com/sun/nio/sctp/SctpChannel.java
浏览文件 @
503c18aa
...
...
@@ -65,55 +65,55 @@ import java.nio.channels.SelectionKey;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_DISABLE_FRAGMENTS
* <td> {@link SctpStandardSocketOption
s
#SCTP_DISABLE_FRAGMENTS
* SCTP_DISABLE_FRAGMENTS} </td>
* <td> Enables or disables message fragmentation </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
* <td> {@link SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} </td>
* <td> Enables or disables explicit message completion </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
* <td> {@link SctpStandardSocketOption
s
#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} </td>
* <td> Controls how the presentation of messages occur for the message
* receiver </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS
* <td> {@link SctpStandardSocketOption
s
#SCTP_INIT_MAXSTREAMS
* SCTP_INIT_MAXSTREAMS} </td>
* <td> The maximum number of streams requested by the local endpoint during
* association initialization </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_NODELAY SCTP_NODELAY} </td>
* <td> {@link SctpStandardSocketOption
s
#SCTP_NODELAY SCTP_NODELAY} </td>
* <td> Enables or disable a Nagle-like algorithm </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_PRIMARY_ADDR
* <td> {@link SctpStandardSocketOption
s
#SCTP_PRIMARY_ADDR
* SCTP_PRIMARY_ADDR} </td>
* <td> Requests that the local SCTP stack use the given peer address as the
* association primary </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_SET_PEER_PRIMARY_ADDR
* <td> {@link SctpStandardSocketOption
s
#SCTP_SET_PEER_PRIMARY_ADDR
* SCTP_SET_PEER_PRIMARY_ADDR} </td>
* <td> Requests that the peer mark the enclosed address as the association
* primary </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SO_SNDBUF
* <td> {@link SctpStandardSocketOption
s
#SO_SNDBUF
* SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SO_RCVBUF
* <td> {@link SctpStandardSocketOption
s
#SO_RCVBUF
* SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SO_LINGER
* <td> {@link SctpStandardSocketOption
s
#SO_LINGER
* SO_LINGER} </td>
* <td> Linger on close if data is present (when configured in blocking mode
* only) </td>
...
...
@@ -449,7 +449,7 @@ public abstract class SctpChannel
* <P> This is a convience method and is equivalent to evaluating the
* following expression:
* <blockquote><pre>
* setOption(SctpStandardSocketOption.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
* setOption(SctpStandardSocketOption
s
.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
* .connect(remote);
* </pre></blockquote>
*
...
...
@@ -651,7 +651,7 @@ public abstract class SctpChannel
* @throws IOException
* If an I/O error occurs
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
abstract
<
T
>
T
getOption
(
SctpSocketOption
<
T
>
name
)
throws
IOException
;
...
...
@@ -680,7 +680,7 @@ public abstract class SctpChannel
* @throws IOException
* If an I/O error occurs
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
abstract
<
T
>
SctpChannel
setOption
(
SctpSocketOption
<
T
>
name
,
T
value
)
throws
IOException
;
...
...
@@ -731,7 +731,7 @@ public abstract class SctpChannel
* MessageInfo} will return {@code false}, and more invocations of this
* method will be necessary to completely consume the messgae. Only
* one message at a time will be partially delivered in any stream. The
* socket option {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
* socket option {@link SctpStandardSocketOption
s
#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of
* messages occurs.
*
...
...
@@ -804,7 +804,7 @@ public abstract class SctpChannel
* and sufficient room becomes available, then the remaining bytes in the
* given byte buffer are transmitted as a single message. Sending a message
* is atomic unless explicit message completion {@link
* SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
* SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
* socket option is enabled on this channel's socket.
*
* <P> The message is transferred from the byte buffer as if by a regular
...
...
src/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
浏览文件 @
503c18aa
...
...
@@ -69,55 +69,55 @@ import java.nio.channels.SelectionKey;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_DISABLE_FRAGMENTS
* <td> {@link SctpStandardSocketOption
s
#SCTP_DISABLE_FRAGMENTS
* SCTP_DISABLE_FRAGMENTS} </td>
* <td> Enables or disables message fragmentation </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
* <td> {@link SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} </td>
* <td> Enables or disables explicit message completion </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
* <td> {@link SctpStandardSocketOption
s
#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} </td>
* <td> Controls how the presentation of messages occur for the message
* receiver </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS
* <td> {@link SctpStandardSocketOption
s
#SCTP_INIT_MAXSTREAMS
* SCTP_INIT_MAXSTREAMS} </td>
* <td> The maximum number of streams requested by the local endpoint during
* association initialization </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_NODELAY SCTP_NODELAY} </td>
* <td> {@link SctpStandardSocketOption
s
#SCTP_NODELAY SCTP_NODELAY} </td>
* <td> Enables or disable a Nagle-like algorithm </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_PRIMARY_ADDR
* <td> {@link SctpStandardSocketOption
s
#SCTP_PRIMARY_ADDR
* SCTP_PRIMARY_ADDR} </td>
* <td> Requests that the local SCTP stack use the given peer address as the
* association primary </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_SET_PEER_PRIMARY_ADDR
* <td> {@link SctpStandardSocketOption
s
#SCTP_SET_PEER_PRIMARY_ADDR
* SCTP_SET_PEER_PRIMARY_ADDR} </td>
* <td> Requests that the peer mark the enclosed address as the association
* primary </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SO_SNDBUF
* <td> {@link SctpStandardSocketOption
s
#SO_SNDBUF
* SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SO_RCVBUF
* <td> {@link SctpStandardSocketOption
s
#SO_RCVBUF
* SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SO_LINGER
* <td> {@link SctpStandardSocketOption
s
#SO_LINGER
* SO_LINGER} </td>
* <td> Linger on close if data is present (when configured in blocking mode
* only) </td>
...
...
@@ -450,7 +450,7 @@ public abstract class SctpMultiChannel
* @throws IOException
* If an I/O error occurs
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
abstract
<
T
>
T
getOption
(
SctpSocketOption
<
T
>
name
,
Association
association
)
...
...
@@ -489,7 +489,7 @@ public abstract class SctpMultiChannel
* @throws IOException
* If an I/O error occurs
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
abstract
<
T
>
SctpMultiChannel
setOption
(
SctpSocketOption
<
T
>
name
,
T
value
,
...
...
@@ -542,7 +542,7 @@ public abstract class SctpMultiChannel
* MessageInfo} will return {@code false}, and more invocations of this
* method will be necessary to completely consume the messgae. Only
* one message at a time will be partially delivered in any stream. The
* socket option {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
* socket option {@link SctpStandardSocketOption
s
#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of
* messages occurs.
*
...
...
@@ -635,14 +635,14 @@ public abstract class SctpMultiChannel
* underlying output buffer, then the remaining bytes in the given byte
* buffer are transmitted as a single message. Sending a message
* is atomic unless explicit message completion {@link
* SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
* SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
* socket option is enabled on this channel's socket.
*
* <P> If this channel is in non-blocking mode, there is sufficient room
* in the underlying output buffer, and an implicit association setup is
* required, then the remaining bytes in the given byte buffer are
* transmitted as a single message, subject to {@link
* SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}.
* SctpStandardSocketOption
s
#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}.
* If for any reason the message cannot
* be delivered an {@link AssociationChangeNotification association
* changed} notification is put on the SCTP stack with its {@code event} parameter set
...
...
src/share/classes/com/sun/nio/sctp/SctpServerChannel.java
浏览文件 @
503c18aa
...
...
@@ -53,7 +53,7 @@ import java.nio.channels.spi.AbstractSelectableChannel;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS
* <td> {@link SctpStandardSocketOption
s
#SCTP_INIT_MAXSTREAMS
* SCTP_INIT_MAXSTREAMS} </td>
* <td> The maximum number of streams requested by the local endpoint during
* association initialization </td>
...
...
@@ -360,7 +360,7 @@ public abstract class SctpServerChannel
* @throws IOException
* If an I/O error occurs
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
abstract
<
T
>
T
getOption
(
SctpSocketOption
<
T
>
name
)
throws
IOException
;
...
...
@@ -388,7 +388,7 @@ public abstract class SctpServerChannel
* @throws IOException
* If an I/O error occurs
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
abstract
<
T
>
SctpServerChannel
setOption
(
SctpSocketOption
<
T
>
name
,
T
value
)
...
...
src/share/classes/com/sun/nio/sctp/SctpSocketOption.java
浏览文件 @
503c18aa
...
...
@@ -33,6 +33,6 @@ import java.net.SocketOption;
*
* @since 1.7
*
* @see SctpStandardSocketOption
* @see SctpStandardSocketOption
s
*/
public
interface
SctpSocketOption
<
T
>
extends
SocketOption
<
T
>
{
}
src/share/classes/com/sun/nio/sctp/SctpStandardSocketOption.java
→
src/share/classes/com/sun/nio/sctp/SctpStandardSocketOption
s
.java
浏览文件 @
503c18aa
...
...
@@ -34,8 +34,8 @@ import sun.nio.ch.SctpStdSocketOption;
*
* @since 1.7
*/
public
class
SctpStandardSocketOption
{
private
SctpStandardSocketOption
()
{}
public
class
SctpStandardSocketOption
s
{
private
SctpStandardSocketOption
s
()
{}
/**
* Enables or disables message fragmentation.
*
...
...
@@ -127,7 +127,7 @@ public class SctpStandardSocketOption {
* association initialization.
*
* <P> The value of this socket option is an {@link
* SctpStandardSocketOption.InitMaxStreams InitMaxStreams}, that represents
* SctpStandardSocketOption
s
.InitMaxStreams InitMaxStreams}, that represents
* the maximum number of inbound and outbound streams that an association
* on the channel is prepared to support.
*
...
...
@@ -157,9 +157,9 @@ public class SctpStandardSocketOption {
* the endpoints default value.
*/
public
static
final
SctpSocketOption
<
SctpStandardSocketOption
.
InitMaxStreams
>
SCTP_INIT_MAXSTREAMS
=
new
SctpStdSocketOption
<
SctpStandardSocketOption
.
InitMaxStreams
>(
"SCTP_INIT_MAXSTREAMS"
,
SctpStandardSocketOption
.
InitMaxStreams
.
class
);
<
SctpStandardSocketOption
s
.
InitMaxStreams
>
SCTP_INIT_MAXSTREAMS
=
new
SctpStdSocketOption
<
SctpStandardSocketOption
s
.
InitMaxStreams
>(
"SCTP_INIT_MAXSTREAMS"
,
SctpStandardSocketOption
s
.
InitMaxStreams
.
class
);
/**
* Enables or disables a Nagle-like algorithm.
...
...
@@ -310,7 +310,7 @@ public class SctpStandardSocketOption {
* This class is used to set the maximum number of inbound/outbound streams
* used by the local endpoint during association initialization. An
* instance of this class is used to set the {@link
* SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS SCTP_INIT_MAXSTREAMS}
* SctpStandardSocketOption
s
#SCTP_INIT_MAXSTREAMS SCTP_INIT_MAXSTREAMS}
* socket option.
*
* @since 1.7
...
...
src/share/classes/java/lang/SafeVarargs.java
浏览文件 @
503c18aa
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010,
2011,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -32,7 +32,7 @@ import java.lang.annotation.*;
* constructor does not perform potentially unsafe operations on its
* varargs parameter. Applying this annotation to a method or
* constructor suppresses unchecked warnings about a
* <i>non-reifiable</i> variable
-
arity (vararg) type and suppresses
* <i>non-reifiable</i> variable
arity (vararg) type and suppresses
* unchecked warnings about parameterized array creation at call
* sites.
*
...
...
@@ -41,11 +41,10 @@ import java.lang.annotation.*;
* additional usage restrictions on this annotation type; it is a
* compile-time error if a method or constructor declaration is
* annotated with a {@code @SafeVarargs} annotation, and either:
* <ul>
* <li> the declaration is a fixed
-
arity method or constructor
* <li> the declaration is a fixed
arity method or constructor
*
* <li> the declaration is a variable
-
arity method that is neither
* <li> the declaration is a variable
arity method that is neither
* {@code static} nor {@code final}.
*
* </ul>
...
...
@@ -55,15 +54,28 @@ import java.lang.annotation.*;
*
* <ul>
*
* <li> The variable
-
arity parameter has a reifiable element type,
* <li> The variable
arity parameter has a reifiable element type,
* which includes primitive types, {@code Object}, and {@code String}.
* (The unchecked warnings this annotation type suppresses already do
* not occur for a reifiable element type.)
*
* <li> The body of the method or constructor declaration performs
* potentially unsafe operations, such as an assignment to an element
* of the variable-arity parameter's array that generates an unchecked
* warning.
* of the variable arity parameter's array that generates an unchecked
* warning. Some unsafe operations do not trigger an unchecked
* warning. For example, the aliasing in
*
* <blockquote><pre>
* @SafeVarargs // Not actually safe!
* static void m(List<String>... stringLists) {
* Object[] array = stringLists;
* List<Integer> tmpList = Arrays.asList(42);
* array[0] = tmpList; // Semantically invalid, but compiles without warnings
* String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!
* }
* </pre></blockquote>
*
* leads to a {@code ClassCastException} at runtime.
*
* <p>Future versions of the platform may mandate compiler errors for
* such unsafe operations.
...
...
src/share/classes/java/lang/Throwable.java
浏览文件 @
503c18aa
...
...
@@ -336,7 +336,10 @@ public class Throwable implements Serializable {
* Disabling of suppression should only occur in exceptional
* circumstances where special requirements exist, such as a
* virtual machine reusing exception objects under low-memory
* situations.
* situations. Circumstances where a given exception object is
* repeatedly caught and rethrown, such as to implement control
* flow between two sub-systems, is another situation where
* immutable throwable objects would be appropriate.
*
* @param message the detail message.
* @param cause the cause. (A {@code null} value is permitted,
...
...
@@ -423,6 +426,18 @@ public class Throwable implements Serializable {
* {@link #Throwable(String,Throwable)}, this method cannot be called
* even once.
*
* <p>An example of using this method on a legacy throwable type
* without other support for setting the cause is:
*
* <pre>
* try {
* lowLevelOp();
* } catch (LowLevelException le) {
* throw (HighLevelException)
* new HighLevelException().initCause(le); // Legacy constructor
* }
* </pre>
*
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or
...
...
@@ -788,7 +803,8 @@ public class Throwable implements Serializable {
* this throwable is permitted to return a zero-length array from this
* method. Generally speaking, the array returned by this method will
* contain one element for every frame that would be printed by
* {@code printStackTrace}.
* {@code printStackTrace}. Writes to the returned array do not
* affect future calls to this method.
*
* @return an array of stack trace elements representing the stack trace
* pertaining to this throwable.
...
...
@@ -971,8 +987,8 @@ public class Throwable implements Serializable {
/**
* Appends the specified exception to the exceptions that were
* suppressed in order to deliver this exception. This method is
* t
ypically called (automatically and implicitly) by the {@code
* try}-with-resources statement.
* t
hread-safe and typically called (automatically and implicitly)
*
by the {@code
try}-with-resources statement.
*
* <p>The suppression behavior is enabled <em>unless</em> disabled
* {@linkplain #Throwable(String, Throwable, boolean, boolean) via
...
...
@@ -1043,7 +1059,9 @@ public class Throwable implements Serializable {
*
* If no exceptions were suppressed or {@linkplain
* #Throwable(String, Throwable, boolean, boolean) suppression is
* disabled}, an empty array is returned.
* disabled}, an empty array is returned. This method is
* thread-safe. Writes to the returned array do not affect future
* calls to this method.
*
* @return an array containing all of the exceptions that were
* suppressed to deliver this exception.
...
...
src/share/classes/java/net/SocketOption.java
浏览文件 @
503c18aa
...
...
@@ -38,7 +38,7 @@ package java.net;
*
* @since 1.7
*
* @see StandardSocketOption
* @see StandardSocketOption
s
*/
public
interface
SocketOption
<
T
>
{
...
...
src/share/classes/java/net/StandardSocketOption.java
→
src/share/classes/java/net/StandardSocketOption
s
.java
浏览文件 @
503c18aa
...
...
@@ -38,8 +38,8 @@ package java.net;
* @since 1.7
*/
public
final
class
StandardSocketOption
{
private
StandardSocketOption
()
{
}
public
final
class
StandardSocketOption
s
{
private
StandardSocketOption
s
()
{
}
// -- SOL_SOCKET --
...
...
src/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java
浏览文件 @
503c18aa
...
...
@@ -58,11 +58,11 @@ import java.io.IOException;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
* </table>
...
...
src/share/classes/java/nio/channels/AsynchronousSocketChannel.java
浏览文件 @
503c18aa
...
...
@@ -68,23 +68,23 @@ import java.nio.ByteBuffer;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_KEEPALIVE SO_KEEPALIVE} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_KEEPALIVE SO_KEEPALIVE} </td>
* <td> Keep connection alive </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#TCP_NODELAY TCP_NODELAY} </td>
* <td> {@link java.net.StandardSocketOption
s
#TCP_NODELAY TCP_NODELAY} </td>
* <td> Disable the Nagle algorithm </td>
* </tr>
* </table>
...
...
src/share/classes/java/nio/channels/DatagramChannel.java
浏览文件 @
503c18aa
...
...
@@ -63,37 +63,37 @@ import java.nio.channels.spi.SelectorProvider;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_BROADCAST SO_BROADCAST} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_BROADCAST SO_BROADCAST} </td>
* <td> Allow transmission of broadcast datagrams </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#IP_TOS IP_TOS} </td>
* <td> {@link java.net.StandardSocketOption
s
#IP_TOS IP_TOS} </td>
* <td> The Type of Service (ToS) octet in the Internet Protocol (IP) header </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#IP_MULTICAST_IF IP_MULTICAST_IF} </td>
* <td> {@link java.net.StandardSocketOption
s
#IP_MULTICAST_IF IP_MULTICAST_IF} </td>
* <td> The network interface for Internet Protocol (IP) multicast datagrams </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#IP_MULTICAST_TTL
* <td> {@link java.net.StandardSocketOption
s
#IP_MULTICAST_TTL
* IP_MULTICAST_TTL} </td>
* <td> The <em>time-to-live</em> for Internet Protocol (IP) multicast
* datagrams </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#IP_MULTICAST_LOOP
* <td> {@link java.net.StandardSocketOption
s
#IP_MULTICAST_LOOP
* IP_MULTICAST_LOOP} </td>
* <td> Loopback for Internet Protocol (IP) multicast datagrams </td>
* </tr>
...
...
src/share/classes/java/nio/channels/MulticastChannel.java
浏览文件 @
503c18aa
...
...
@@ -30,7 +30,7 @@ import java.net.NetworkInterface;
import
java.io.IOException
;
import
java.net.ProtocolFamily
;
// javadoc
import
java.net.StandardProtocolFamily
;
// javadoc
import
java.net.StandardSocketOption
;
// javadoc
import
java.net.StandardSocketOption
s
;
// javadoc
/**
* A network channel that supports Internet Protocol (IP) multicasting.
...
...
@@ -93,7 +93,7 @@ import java.net.StandardSocketOption; // javadoc
* a specific address, rather than the wildcard address then it is implementation
* specific if multicast datagrams are received by the socket. </p></li>
*
* <li><p> The {@link StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} option should be
* <li><p> The {@link StandardSocketOption
s
#SO_REUSEADDR SO_REUSEADDR} option should be
* enabled prior to {@link NetworkChannel#bind binding} the socket. This is
* required to allow multiple members of the group to bind to the same
* address. </p></li>
...
...
@@ -107,9 +107,9 @@ import java.net.StandardSocketOption; // javadoc
* NetworkInterface ni = NetworkInterface.getByName("hme0");
*
* DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
* .setOption(StandardSocketOption.SO_REUSEADDR, true)
* .setOption(StandardSocketOption
s
.SO_REUSEADDR, true)
* .bind(new InetSocketAddress(5000))
* .setOption(StandardSocketOption.IP_MULTICAST_IF, ni);
* .setOption(StandardSocketOption
s
.IP_MULTICAST_IF, ni);
*
* InetAddress group = InetAddress.getByName("225.4.5.6");
*
...
...
src/share/classes/java/nio/channels/NetworkChannel.java
浏览文件 @
503c18aa
...
...
@@ -124,7 +124,7 @@ public interface NetworkChannel
* @throws IOException
* If an I/O error occurs
*
* @see java.net.StandardSocketOption
* @see java.net.StandardSocketOption
s
*/
<
T
>
NetworkChannel
setOption
(
SocketOption
<
T
>
name
,
T
value
)
throws
IOException
;
...
...
@@ -144,7 +144,7 @@ public interface NetworkChannel
* @throws IOException
* If an I/O error occurs
*
* @see java.net.StandardSocketOption
* @see java.net.StandardSocketOption
s
*/
<
T
>
T
getOption
(
SocketOption
<
T
>
name
)
throws
IOException
;
...
...
src/share/classes/java/nio/channels/ServerSocketChannel.java
浏览文件 @
503c18aa
...
...
@@ -52,11 +52,11 @@ import java.nio.channels.spi.SelectorProvider;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
* </table>
...
...
src/share/classes/java/nio/channels/SocketChannel.java
浏览文件 @
503c18aa
...
...
@@ -72,28 +72,28 @@ import java.nio.channels.spi.SelectorProvider;
* <th>Description</th>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_KEEPALIVE SO_KEEPALIVE} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_KEEPALIVE SO_KEEPALIVE} </td>
* <td> Keep connection alive </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#SO_LINGER SO_LINGER} </td>
* <td> {@link java.net.StandardSocketOption
s
#SO_LINGER SO_LINGER} </td>
* <td> Linger on close if data is present (when configured in blocking mode
* only) </td>
* </tr>
* <tr>
* <td> {@link java.net.StandardSocketOption#TCP_NODELAY TCP_NODELAY} </td>
* <td> {@link java.net.StandardSocketOption
s
#TCP_NODELAY TCP_NODELAY} </td>
* <td> Disable the Nagle algorithm </td>
* </tr>
* </table>
...
...
src/share/classes/java/nio/charset/Charset.java
浏览文件 @
503c18aa
...
...
@@ -215,7 +215,7 @@ import sun.security.action.GetPropertyAction;
* determined during virtual-machine startup and typically depends upon the
* locale and charset being used by the underlying operating system. </p>
*
* <p>The {@link StandardCharset} class defines constants for each of the
* <p>The {@link StandardCharset
s
} class defines constants for each of the
* standard charsets.
*
* <h4>Terminology</h4>
...
...
src/share/classes/java/nio/charset/StandardCharset.java
→
src/share/classes/java/nio/charset/StandardCharset
s
.java
浏览文件 @
503c18aa
...
...
@@ -32,10 +32,10 @@ package java.nio.charset;
* @see <a href="Charset#standard">Standard Charsets</a>
* @since 1.7
*/
public
final
class
StandardCharset
{
public
final
class
StandardCharset
s
{
private
StandardCharset
()
{
throw
new
AssertionError
(
"No java.nio.charset.StandardCharset instances for you!"
);
private
StandardCharset
s
()
{
throw
new
AssertionError
(
"No java.nio.charset.StandardCharset
s
instances for you!"
);
}
/**
* Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the
...
...
src/share/classes/java/nio/file/Path.java
浏览文件 @
503c18aa
...
...
@@ -72,7 +72,7 @@ import java.util.Iterator;
* directory and is UTF-8 encoded.
* <pre>
* Path path = FileSystems.getDefault().getPath("logs", "access.log");
* BufferReader reader = Files.newBufferedReader(path, StandardCharset.UTF_8);
* BufferReader reader = Files.newBufferedReader(path, StandardCharset
s
.UTF_8);
* </pre>
*
* <a name="interop"><h4>Interoperability</h4></a>
...
...
@@ -609,11 +609,11 @@ public interface Path
* directory can be watched. The {@code events} parameter is the events to
* register and may contain the following events:
* <ul>
* <li>{@link StandardWatchEventKind#ENTRY_CREATE ENTRY_CREATE} -
* <li>{@link StandardWatchEventKind
s
#ENTRY_CREATE ENTRY_CREATE} -
* entry created or moved into the directory</li>
* <li>{@link StandardWatchEventKind#ENTRY_DELETE ENTRY_DELETE} -
* <li>{@link StandardWatchEventKind
s
#ENTRY_DELETE ENTRY_DELETE} -
* entry deleted or moved out of the directory</li>
* <li>{@link StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} -
* <li>{@link StandardWatchEventKind
s
#ENTRY_MODIFY ENTRY_MODIFY} -
* entry in directory was modified</li>
* </ul>
*
...
...
@@ -622,7 +622,7 @@ public interface Path
* that locates the directory entry that is created, deleted, or modified.
*
* <p> The set of events may include additional implementation specific
* event that are not defined by the enum {@link StandardWatchEventKind}
* event that are not defined by the enum {@link StandardWatchEventKind
s
}
*
* <p> The {@code modifiers} parameter specifies <em>modifiers</em> that
* qualify how the directory is registered. This release does not define any
...
...
src/share/classes/java/nio/file/StandardWatchEventKind.java
→
src/share/classes/java/nio/file/StandardWatchEventKind
s
.java
浏览文件 @
503c18aa
...
...
@@ -31,8 +31,8 @@ package java.nio.file;
* @since 1.7
*/
public
final
class
StandardWatchEventKind
{
private
StandardWatchEventKind
()
{
}
public
final
class
StandardWatchEventKind
s
{
private
StandardWatchEventKind
s
()
{
}
/**
* A special event to indicate that events may have been lost or
...
...
@@ -44,8 +44,8 @@ public final class StandardWatchEventKind {
*
* @see WatchService
*/
public
static
final
WatchEvent
.
Kind
<
Void
>
OVERFLOW
=
new
StdWatchEventKind
<
Void
>(
"OVERFLOW"
,
Void
.
class
);
public
static
final
WatchEvent
.
Kind
<
Object
>
OVERFLOW
=
new
StdWatchEventKind
<
Object
>(
"OVERFLOW"
,
Object
.
class
);
/**
* Directory entry created.
...
...
src/share/classes/java/nio/file/WatchEvent.java
浏览文件 @
503c18aa
...
...
@@ -50,7 +50,7 @@ public interface WatchEvent<T> {
* An event kind, for the purposes of identification.
*
* @since 1.7
* @see StandardWatchEventKind
* @see StandardWatchEventKind
s
*/
public
static
interface
Kind
<
T
>
{
/**
...
...
@@ -98,9 +98,9 @@ public interface WatchEvent<T> {
/**
* Returns the context for the event.
*
* <p> In the case of {@link StandardWatchEventKind#ENTRY_CREATE ENTRY_CREATE},
* {@link StandardWatchEventKind#ENTRY_DELETE ENTRY_DELETE}, and {@link
* StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} events the context is
* <p> In the case of {@link StandardWatchEventKind
s
#ENTRY_CREATE ENTRY_CREATE},
* {@link StandardWatchEventKind
s
#ENTRY_DELETE ENTRY_DELETE}, and {@link
* StandardWatchEventKind
s
#ENTRY_MODIFY ENTRY_MODIFY} events the context is
* a {@code Path} that is the {@link Path#relativize relative} path between
* the directory registered with the watch service, and the entry that is
* created, deleted, or modified.
...
...
src/share/classes/java/nio/file/WatchService.java
浏览文件 @
503c18aa
...
...
@@ -68,7 +68,7 @@ import java.util.concurrent.TimeUnit;
* of events that it may accumulate. Where an implementation <em>knowingly</em>
* discards events then it arranges for the key's {@link WatchKey#pollEvents
* pollEvents} method to return an element with an event type of {@link
* StandardWatchEventKind#OVERFLOW OVERFLOW}. This event can be used by the
* StandardWatchEventKind
s
#OVERFLOW OVERFLOW}. This event can be used by the
* consumer as a trigger to re-examine the state of the object.
*
* <p> When an event is reported to indicate that a file in a watched directory
...
...
@@ -87,7 +87,7 @@ import java.util.concurrent.TimeUnit;
* are detected, their timeliness, and whether their ordering is preserved are
* highly implementation specific. For example, when a file in a watched
* directory is modified then it may result in a single {@link
* StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} event in some
* StandardWatchEventKind
s
#ENTRY_MODIFY ENTRY_MODIFY} event in some
* implementations but several events in other implementations. Short-lived
* files (meaning files that are deleted very quickly after they are created)
* may not be detected by primitive implementations that periodically poll the
...
...
src/share/classes/java/nio/file/Watchable.java
浏览文件 @
503c18aa
...
...
@@ -53,7 +53,7 @@ public interface Watchable {
* those specified by the {@code events} and {@code modifiers} parameters.
* Changing the event set does not cause pending events for the object to be
* discarded. Objects are automatically registered for the {@link
* StandardWatchEventKind#OVERFLOW OVERFLOW} event. This event is not
* StandardWatchEventKind
s
#OVERFLOW OVERFLOW} event. This event is not
* required to be present in the array of events.
*
* <p> Otherwise the file system object has not yet been registered with the
...
...
src/share/classes/java/sql/BatchUpdateException.java
浏览文件 @
503c18aa
...
...
@@ -89,7 +89,7 @@ public class BatchUpdateException extends SQLException {
* The <code>cause</code> is not initialized, and may subsequently be
* initialized by a call to the
* {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code
* is intialized to 0.
* is in
i
tialized to 0.
* <p>
*
* @param reason a description of the exception
...
...
@@ -188,7 +188,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.6
*/
public
BatchUpdateException
(
Throwable
cause
)
{
this
(
null
,
null
,
0
,
null
,
cause
);
this
(
(
cause
==
null
?
null
:
cause
.
toString
())
,
null
,
0
,
null
,
cause
);
}
/**
...
...
@@ -214,7 +214,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.6
*/
public
BatchUpdateException
(
int
[]
updateCounts
,
Throwable
cause
)
{
this
(
null
,
null
,
0
,
updateCounts
,
cause
);
this
(
(
cause
==
null
?
null
:
cause
.
toString
())
,
null
,
0
,
updateCounts
,
cause
);
}
/**
...
...
src/share/classes/java/util/Formatter.java
浏览文件 @
503c18aa
...
...
@@ -826,7 +826,7 @@ import sun.misc.FormattedFloatingDecimal;
*
* <li> <a href="#dndec"><b>Float and Double</b></a>
*
* <li> <a href="#dndec"><b>BigDecimal</b></a>
* <li> <a href="#dn
b
dec"><b>BigDecimal</b></a>
*
* </ol>
*
...
...
@@ -1362,7 +1362,7 @@ import sun.misc.FormattedFloatingDecimal;
* precision is not provided, then all of the digits as returned by {@link
* Double#toHexString(double)} will be output.
*
* <p><a name="dndec"><b> BigDecimal </b></a>
* <p><a name="dn
b
dec"><b> BigDecimal </b></a>
*
* <p> The following conversions may be applied {@link java.math.BigDecimal
* BigDecimal}.
...
...
@@ -1372,7 +1372,7 @@ import sun.misc.FormattedFloatingDecimal;
* <tr><td valign="top"> {@code 'e'}
* <td valign="top"> <tt>'\u0065'</tt>
* <td> Requires the output to be formatted using <a
* name="scientific">computerized scientific notation</a>. The <a
* name="
b
scientific">computerized scientific notation</a>. The <a
* href="#l10n algorithm">localization algorithm</a> is applied.
*
* <p> The formatting of the magnitude <i>m</i> depends upon its value.
...
...
@@ -1427,11 +1427,11 @@ import sun.misc.FormattedFloatingDecimal;
*
* <p> If <i>m</i> is greater than or equal to 10<sup>-4</sup> but less
* than 10<sup>precision</sup> then it is represented in <i><a
* href="#decimal">decimal format</a></i>.
* href="#
b
decimal">decimal format</a></i>.
*
* <p> If <i>m</i> is less than 10<sup>-4</sup> or greater than or equal to
* 10<sup>precision</sup>, then it is represented in <i><a
* href="#scientific">computerized scientific notation</a></i>.
* href="#
b
scientific">computerized scientific notation</a></i>.
*
* <p> The total number of significant digits in <i>m</i> is equal to the
* precision. If the precision is not specified, then the default value is
...
...
@@ -1447,7 +1447,7 @@ import sun.misc.FormattedFloatingDecimal;
*
* <tr><td valign="top"> {@code 'f'}
* <td valign="top"> <tt>'\u0066'</tt>
* <td> Requires the output to be formatted using <a name="decimal">decimal
* <td> Requires the output to be formatted using <a name="
b
decimal">decimal
* format</a>. The <a href="#l10n algorithm">localization algorithm</a> is
* applied.
*
...
...
src/share/classes/java/util/concurrent/Phaser.java
浏览文件 @
503c18aa
...
...
@@ -159,7 +159,7 @@ import java.util.concurrent.locks.LockSupport;
* void runTasks(List<Runnable> tasks) {
* final Phaser phaser = new Phaser(1); // "1" to register self
* // create and start threads
* for (Runnable task : tasks) {
* for (
final
Runnable task : tasks) {
* phaser.register();
* new Thread() {
* public void run() {
...
...
src/share/classes/java/util/concurrent/locks/LockSupport.java
浏览文件 @
503c18aa
...
...
@@ -275,10 +275,14 @@ public class LockSupport {
* snapshot -- the thread may have since unblocked or blocked on a
* different blocker object.
*
* @param t the thread
* @return the blocker
* @throws NullPointerException if argument is null
* @since 1.6
*/
public
static
Object
getBlocker
(
Thread
t
)
{
if
(
t
==
null
)
throw
new
NullPointerException
();
return
unsafe
.
getObjectVolatile
(
t
,
parkBlockerOffset
);
}
...
...
src/share/classes/java/util/logging/LogManager.java
浏览文件 @
503c18aa
/*
* Copyright (c) 2000, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -342,12 +342,35 @@ public class LogManager {
// already been created with the given name it is returned.
// Otherwise a new logger instance is created and registered
// in the LogManager global namespace.
// This method will always return a non-null Logger object.
// Synchronization is not required here. All synchronization for
// adding a new Logger object is handled by addLogger().
Logger
demandLogger
(
String
name
)
{
Logger
result
=
getLogger
(
name
);
if
(
result
==
null
)
{
result
=
new
Logger
(
name
,
null
);
addLogger
(
result
);
result
=
getLogger
(
name
);
// only allocate the new logger once
Logger
newLogger
=
new
Logger
(
name
,
null
);
do
{
if
(
addLogger
(
newLogger
))
{
// We successfully added the new Logger that we
// created above so return it without refetching.
return
newLogger
;
}
// We didn't add the new Logger that we created above
// because another thread added a Logger with the same
// name after our null check above and before our call
// to addLogger(). We have to refetch the Logger because
// addLogger() returns a boolean instead of the Logger
// reference itself. However, if the thread that created
// the other Logger is not holding a strong reference to
// the other Logger, then it is possible for the other
// Logger to be GC'ed after we saw it in addLogger() and
// before we can refetch it. If it has been GC'ed then
// we'll just loop around and try again.
result
=
getLogger
(
name
);
}
while
(
result
==
null
);
}
return
result
;
}
...
...
src/share/classes/java/util/logging/Logger.java
浏览文件 @
503c18aa
...
...
@@ -310,7 +310,20 @@ public class Logger {
* @return a suitable Logger
* @throws NullPointerException if the name is null.
*/
public
static
synchronized
Logger
getLogger
(
String
name
)
{
// Synchronization is not required here. All synchronization for
// adding a new Logger object is handled by LogManager.addLogger().
public
static
Logger
getLogger
(
String
name
)
{
// This method is intentionally not a wrapper around a call
// to getLogger(name, resourceBundleName). If it were then
// this sequence:
//
// getLogger("Foo", "resourceBundleForFoo");
// getLogger("Foo");
//
// would throw an IllegalArgumentException in the second call
// because the wrapper would result in an attempt to replace
// the existing "resourceBundleForFoo" with null.
LogManager
manager
=
LogManager
.
getLogManager
();
return
manager
.
demandLogger
(
name
);
}
...
...
@@ -355,7 +368,10 @@ public class Logger {
* a different resource bundle name.
* @throws NullPointerException if the name is null.
*/
public
static
synchronized
Logger
getLogger
(
String
name
,
String
resourceBundleName
)
{
// Synchronization is not required here. All synchronization for
// adding a new Logger object is handled by LogManager.addLogger().
public
static
Logger
getLogger
(
String
name
,
String
resourceBundleName
)
{
LogManager
manager
=
LogManager
.
getLogManager
();
Logger
result
=
manager
.
demandLogger
(
name
);
if
(
result
.
resourceBundleName
==
null
)
{
...
...
@@ -417,7 +433,10 @@ public class Logger {
* @throws MissingResourceException if the resourceBundleName is non-null and
* no corresponding resource can be found.
*/
public
static
synchronized
Logger
getAnonymousLogger
(
String
resourceBundleName
)
{
// Synchronization is not required here. All synchronization for
// adding a new anonymous Logger object is handled by doSetParent().
public
static
Logger
getAnonymousLogger
(
String
resourceBundleName
)
{
LogManager
manager
=
LogManager
.
getLogManager
();
// cleanup some Loggers that have been GC'ed
manager
.
drainLoggerRefQueueBounded
();
...
...
src/share/classes/java/util/regex/Pattern.java
浏览文件 @
503c18aa
...
...
@@ -213,7 +213,7 @@ import java.util.Arrays;
* <td headers="matches">A character in the Greek block (<a href="#ubc">block</a>)</td></tr>
* <tr><td valign="top" headers="construct unicode"><tt>\p{Lu}</tt></td>
* <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr>
* <tr><td valign="top" headers="construct unicode"><tt>\p{
i
sAlphabetic}</tt></td>
* <tr><td valign="top" headers="construct unicode"><tt>\p{
I
sAlphabetic}</tt></td>
* <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr>
* <tr><td valign="top" headers="construct unicode"><tt>\p{Sc}</tt></td>
* <td headers="matches">A currency symbol</td></tr>
...
...
src/share/classes/java/util/zip/ZipCoder.java
浏览文件 @
503c18aa
...
...
@@ -28,7 +28,7 @@ package java.util.zip;
import
java.nio.ByteBuffer
;
import
java.nio.CharBuffer
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharset
;
import
java.nio.charset.StandardCharset
s
;
import
java.nio.charset.CharsetDecoder
;
import
java.nio.charset.CharsetEncoder
;
import
java.nio.charset.CoderResult
;
...
...
@@ -107,7 +107,7 @@ final class ZipCoder {
if
(
isUTF8
)
return
getBytes
(
s
);
if
(
utf8
==
null
)
utf8
=
new
ZipCoder
(
StandardCharset
.
UTF_8
);
utf8
=
new
ZipCoder
(
StandardCharset
s
.
UTF_8
);
return
utf8
.
getBytes
(
s
);
}
...
...
@@ -116,7 +116,7 @@ final class ZipCoder {
if
(
isUTF8
)
return
toString
(
ba
,
len
);
if
(
utf8
==
null
)
utf8
=
new
ZipCoder
(
StandardCharset
.
UTF_8
);
utf8
=
new
ZipCoder
(
StandardCharset
s
.
UTF_8
);
return
utf8
.
toString
(
ba
,
len
);
}
...
...
@@ -132,7 +132,7 @@ final class ZipCoder {
private
ZipCoder
(
Charset
cs
)
{
this
.
cs
=
cs
;
this
.
isUTF8
=
cs
.
name
().
equals
(
StandardCharset
.
UTF_8
.
name
());
this
.
isUTF8
=
cs
.
name
().
equals
(
StandardCharset
s
.
UTF_8
.
name
());
}
static
ZipCoder
get
(
Charset
charset
)
{
...
...
src/share/classes/java/util/zip/ZipFile.java
浏览文件 @
503c18aa
...
...
@@ -31,7 +31,7 @@ import java.io.IOException;
import
java.io.EOFException
;
import
java.io.File
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharset
;
import
java.nio.charset.StandardCharset
s
;
import
java.util.ArrayDeque
;
import
java.util.Deque
;
import
java.util.Enumeration
;
...
...
@@ -141,7 +141,7 @@ class ZipFile implements ZipConstants, Closeable {
* @since 1.3
*/
public
ZipFile
(
File
file
,
int
mode
)
throws
IOException
{
this
(
file
,
mode
,
StandardCharset
.
UTF_8
);
this
(
file
,
mode
,
StandardCharset
s
.
UTF_8
);
}
/**
...
...
src/share/classes/java/util/zip/ZipInputStream.java
浏览文件 @
503c18aa
...
...
@@ -30,7 +30,7 @@ import java.io.IOException;
import
java.io.EOFException
;
import
java.io.PushbackInputStream
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharset
;
import
java.nio.charset.StandardCharset
s
;
import
static
java
.
util
.
zip
.
ZipConstants64
.*;
/**
...
...
@@ -76,7 +76,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants {
* @param in the actual input stream
*/
public
ZipInputStream
(
InputStream
in
)
{
this
(
in
,
StandardCharset
.
UTF_8
);
this
(
in
,
StandardCharset
s
.
UTF_8
);
}
/**
...
...
src/share/classes/java/util/zip/ZipOutputStream.java
浏览文件 @
503c18aa
...
...
@@ -28,7 +28,7 @@ package java.util.zip;
import
java.io.OutputStream
;
import
java.io.IOException
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharset
;
import
java.nio.charset.StandardCharset
s
;
import
java.util.Vector
;
import
java.util.HashSet
;
import
static
java
.
util
.
zip
.
ZipConstants64
.*;
...
...
@@ -101,7 +101,7 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
* @param out the actual output stream
*/
public
ZipOutputStream
(
OutputStream
out
)
{
this
(
out
,
StandardCharset
.
UTF_8
);
this
(
out
,
StandardCharset
s
.
UTF_8
);
}
/**
...
...
src/share/classes/javax/management/loading/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
javax.management.loading package
</title>
<!--
Copyright (c) 1999, 20
06
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 1999, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -68,7 +68,7 @@ questions.
<p
id=
"spec"
>
@see
<a
href=
"{@docRoot}/../technotes/guides/jmx/"
>
Java
SE 6
Platform documentation on JMX technology
</a>
,
Java Platform documentation on JMX technology
</a>
,
in particular the
<a
href=
"{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"
>
JMX Specification, version 1.4(pdf).
</a>
...
...
src/share/classes/javax/management/modelmbean/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
javax.management.modelmbean package
</title>
<!--
Copyright (c) 2000, 20
06
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2000, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -116,7 +116,7 @@ mbs.invoke(mapName, "get", new Object[] {"key"}, new String[] {Object.class.getN
<li>
See the
<i>
JMX 1.4 Specification
</i>
PDF document available from the
<a
href=
"{@docRoot}/../technotes/guides/jmx/"
>
Java
SE 6 Platform documentation on JMX
</a>
Java
Platform documentation on JMX technology
</a>
</ul>
@since 1.5
...
...
src/share/classes/javax/management/monitor/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
javax.management.monitor package
</title>
<!--
Copyright (c) 1999, 20
06
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 1999, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -184,7 +184,7 @@ questions.
</ul>
<p
id=
"spec"
>
@see
<a
href=
"{@docRoot}/../technotes/guides/jmx/"
>
Java
SE 6
Platform documentation on JMX technology
</a>
,
Java Platform documentation on JMX technology
</a>
,
in particular the
<a
href=
"{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"
>
JMX Specification, version 1.4(pdf).
</a>
...
...
src/share/classes/javax/management/openmbean/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
javax.management.openmbean package
</title>
<!--
Copyright (c) 2001, 20
07
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2001, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -143,7 +143,7 @@ questions.
</ul>
@see
<a
href=
"{@docRoot}/../technotes/guides/jmx/"
>
Java
SE 6
Platform documentation on JMX technology
</a>
,
Java Platform documentation on JMX technology
</a>
,
in particular the
<a
href=
"{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"
>
JMX Specification, version 1.4
</a>
...
...
src/share/classes/javax/management/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
javax.management package
</title>
<!--
Copyright (c) 1999, 20
06
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 1999, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -391,7 +391,7 @@ questions.
<p
id=
"spec"
>
@see
<a
href=
"{@docRoot}/../technotes/guides/jmx/index.html"
>
Java
SE 6
Platform documentation on JMX technology
</a>
Java Platform documentation on JMX technology
</a>
in particular the
<a
href=
"{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"
>
JMX Specification, version 1.4(pdf).
</a>
...
...
src/share/classes/javax/management/relation/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
javax.management.relation package
</title>
<!--
Copyright (c) 2000, 20
06
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2000, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -137,7 +137,7 @@ Set<ObjectName> dependentASet = dependentAMap.keySet();
</pre>
@see
<a
href=
"{@docRoot}/../technotes/guides/jmx/"
>
Java
SE 6
Platform documentation on JMX technology
</a>
,
Java Platform documentation on JMX technology
</a>
,
in particular the
<a
href=
"{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"
>
JMX Specification, version 1.4
</a>
...
...
src/share/classes/javax/management/remote/package.html
浏览文件 @
503c18aa
...
...
@@ -2,7 +2,7 @@
<head>
<title>
JMX
<sup><font
size=
"-2"
>
TM
</font></sup>
Remote API.
</title>
<!--
Copyright (c) 2002, 20
06
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2002, 20
11
, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
...
...
@@ -195,7 +195,7 @@ rmi://192.18.1.9 username 1
@see
<a
href=
"{@docRoot}/../technotes/guides/jmx/"
>
Java
SE 6
Platform documentation on JMX technology
</a>
,
Java Platform documentation on JMX technology
</a>
,
in particular the
<a
href=
"{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"
>
JMX Specification, version 1.4
</a>
...
...
src/share/classes/javax/management/timer/Timer.java
浏览文件 @
503c18aa
...
...
@@ -26,6 +26,7 @@
package
javax.management.timer
;
import
static
com
.
sun
.
jmx
.
defaults
.
JmxProperties
.
TIMER_LOGGER
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.Hashtable
;
import
java.util.Iterator
;
...
...
@@ -1003,7 +1004,10 @@ public class Timer extends NotificationBroadcasterSupport
Integer
notifID
;
Date
date
;
for
(
Object
[]
obj
:
timerTable
.
values
())
{
ArrayList
<
Object
[]>
values
=
new
ArrayList
<
Object
[]>(
timerTable
.
values
());
for
(
Object
[]
obj
:
values
)
{
// Retrieve the timer notification and the date notification.
//
...
...
src/share/classes/sun/awt/FontDescriptor.java
浏览文件 @
503c18aa
...
...
@@ -26,7 +26,7 @@ package sun.awt;
import
java.nio.charset.Charset
;
import
java.nio.charset.CharsetEncoder
;
import
java.nio.charset.StandardCharset
;
import
java.nio.charset.StandardCharset
s
;
import
sun.nio.cs.HistoricallyNamedCharset
;
public
class
FontDescriptor
implements
Cloneable
{
...
...
@@ -105,8 +105,8 @@ public class FontDescriptor implements Cloneable {
if
(
useUnicode
&&
unicodeEncoder
==
null
)
{
try
{
this
.
unicodeEncoder
=
isLE
?
StandardCharset
.
UTF_16LE
.
newEncoder
():
StandardCharset
.
UTF_16BE
.
newEncoder
();
StandardCharset
s
.
UTF_16LE
.
newEncoder
():
StandardCharset
s
.
UTF_16BE
.
newEncoder
();
}
catch
(
IllegalArgumentException
x
)
{}
}
return
useUnicode
;
...
...
src/share/classes/sun/management/GarbageCollectionNotifInfoCompositeData.java
0 → 100644
浏览文件 @
503c18aa
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
sun.management
;
import
com.sun.management.GarbageCollectionNotificationInfo
;
import
com.sun.management.GcInfo
;
import
java.lang.reflect.Method
;
import
javax.management.openmbean.CompositeData
;
import
javax.management.openmbean.CompositeType
;
import
javax.management.openmbean.CompositeDataSupport
;
import
javax.management.openmbean.OpenDataException
;
import
javax.management.openmbean.OpenType
;
import
javax.management.openmbean.SimpleType
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
import
java.lang.reflect.Field
;
import
java.util.HashMap
;
/**
* A CompositeData for GarbageCollectionNotificationInfo for the local management support.
* This class avoids the performance penalty paid to the
* construction of a CompositeData use in the local case.
*/
public
class
GarbageCollectionNotifInfoCompositeData
extends
LazyCompositeData
{
private
final
GarbageCollectionNotificationInfo
gcNotifInfo
;
public
GarbageCollectionNotifInfoCompositeData
(
GarbageCollectionNotificationInfo
info
)
{
this
.
gcNotifInfo
=
info
;
}
public
GarbageCollectionNotificationInfo
getGarbageCollectionNotifInfo
()
{
return
gcNotifInfo
;
}
public
static
CompositeData
toCompositeData
(
GarbageCollectionNotificationInfo
info
)
{
GarbageCollectionNotifInfoCompositeData
gcnicd
=
new
GarbageCollectionNotifInfoCompositeData
(
info
);
return
gcnicd
.
getCompositeData
();
}
private
CompositeType
getCompositeTypeByBuilder
()
{
final
GcInfoBuilder
builder
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
GcInfoBuilder
>()
{
public
GcInfoBuilder
run
()
{
try
{
Class
cl
=
Class
.
forName
(
"com.sun.management.GcInfo"
);
Field
f
=
cl
.
getDeclaredField
(
"builder"
);
f
.
setAccessible
(
true
);
return
(
GcInfoBuilder
)
f
.
get
(
gcNotifInfo
.
getGcInfo
());
}
catch
(
ClassNotFoundException
e
)
{
return
null
;
}
catch
(
NoSuchFieldException
e
)
{
return
null
;
}
catch
(
IllegalAccessException
e
)
{
return
null
;
}
}
});
CompositeType
gict
=
null
;
synchronized
(
compositeTypeByBuilder
)
{
gict
=
compositeTypeByBuilder
.
get
(
builder
);
if
(
gict
==
null
)
{
OpenType
[]
gcNotifInfoItemTypes
=
new
OpenType
[]
{
SimpleType
.
STRING
,
SimpleType
.
STRING
,
SimpleType
.
STRING
,
builder
.
getGcInfoCompositeType
(),
};
try
{
final
String
typeName
=
"sun.management.GarbageCollectionNotifInfoCompositeType"
;
gict
=
new
CompositeType
(
typeName
,
"CompositeType for GC notification info"
,
gcNotifInfoItemNames
,
gcNotifInfoItemNames
,
gcNotifInfoItemTypes
);
compositeTypeByBuilder
.
put
(
builder
,
gict
);
}
catch
(
OpenDataException
e
)
{
// shouldn't reach here
throw
Util
.
newException
(
e
);
}
}
}
return
gict
;
}
protected
CompositeData
getCompositeData
()
{
// CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
// gcNotifInfoItemNames!
final
Object
[]
gcNotifInfoItemValues
;
gcNotifInfoItemValues
=
new
Object
[]
{
gcNotifInfo
.
getGcName
(),
gcNotifInfo
.
getGcAction
(),
gcNotifInfo
.
getGcCause
(),
GcInfoCompositeData
.
toCompositeData
(
gcNotifInfo
.
getGcInfo
())
};
CompositeType
gict
=
getCompositeTypeByBuilder
();
try
{
return
new
CompositeDataSupport
(
gict
,
gcNotifInfoItemNames
,
gcNotifInfoItemValues
);
}
catch
(
OpenDataException
e
)
{
// Should never reach here
throw
new
AssertionError
(
e
);
}
}
// private static MappedMXBeanType gcInfoMapType;
private
static
final
String
GC_NAME
=
"gcName"
;
private
static
final
String
GC_ACTION
=
"gcAction"
;
private
static
final
String
GC_CAUSE
=
"gcCause"
;
private
static
final
String
GC_INFO
=
"gcInfo"
;
private
static
final
String
[]
gcNotifInfoItemNames
=
{
GC_NAME
,
GC_ACTION
,
GC_CAUSE
,
GC_INFO
};
private
static
HashMap
<
GcInfoBuilder
,
CompositeType
>
compositeTypeByBuilder
=
new
HashMap
<
GcInfoBuilder
,
CompositeType
>();
public
static
String
getGcName
(
CompositeData
cd
)
{
String
gcname
=
getString
(
cd
,
GC_NAME
);
if
(
gcname
==
null
)
{
throw
new
IllegalArgumentException
(
"Invalid composite data: "
+
"Attribute "
+
GC_NAME
+
" has null value"
);
}
return
gcname
;
}
public
static
String
getGcAction
(
CompositeData
cd
)
{
String
gcaction
=
getString
(
cd
,
GC_ACTION
);
if
(
gcaction
==
null
)
{
throw
new
IllegalArgumentException
(
"Invalid composite data: "
+
"Attribute "
+
GC_ACTION
+
" has null value"
);
}
return
gcaction
;
}
public
static
String
getGcCause
(
CompositeData
cd
)
{
String
gccause
=
getString
(
cd
,
GC_CAUSE
);
if
(
gccause
==
null
)
{
throw
new
IllegalArgumentException
(
"Invalid composite data: "
+
"Attribute "
+
GC_CAUSE
+
" has null value"
);
}
return
gccause
;
}
public
static
GcInfo
getGcInfo
(
CompositeData
cd
)
{
CompositeData
gcInfoData
=
(
CompositeData
)
cd
.
get
(
GC_INFO
);
return
GcInfo
.
from
(
gcInfoData
);
}
/** Validate if the input CompositeData has the expected
* CompositeType (i.e. contain all attributes with expected
* names and types).
*/
public
static
void
validateCompositeData
(
CompositeData
cd
)
{
if
(
cd
==
null
)
{
throw
new
NullPointerException
(
"Null CompositeData"
);
}
if
(!
isTypeMatched
(
getBaseGcNotifInfoCompositeType
(),
cd
.
getCompositeType
()))
{
throw
new
IllegalArgumentException
(
"Unexpected composite type for GarbageCollectionNotificationInfo"
);
}
}
// This is only used for validation.
private
static
CompositeType
baseGcNotifInfoCompositeType
=
null
;
private
static
synchronized
CompositeType
getBaseGcNotifInfoCompositeType
()
{
if
(
baseGcNotifInfoCompositeType
==
null
)
{
try
{
OpenType
[]
baseGcNotifInfoItemTypes
=
new
OpenType
[]
{
SimpleType
.
STRING
,
SimpleType
.
STRING
,
SimpleType
.
STRING
,
GcInfoCompositeData
.
getBaseGcInfoCompositeType
()
};
baseGcNotifInfoCompositeType
=
new
CompositeType
(
"sun.management.BaseGarbageCollectionNotifInfoCompositeType"
,
"CompositeType for Base GarbageCollectionNotificationInfo"
,
gcNotifInfoItemNames
,
gcNotifInfoItemNames
,
baseGcNotifInfoItemTypes
);
}
catch
(
OpenDataException
e
)
{
// shouldn't reach here
throw
Util
.
newException
(
e
);
}
}
return
baseGcNotifInfoCompositeType
;
}
private
static
final
long
serialVersionUID
=
-
1805123446483771292L
;
}
src/share/classes/sun/management/GarbageCollectorImpl.java
浏览文件 @
503c18aa
/*
* Copyright (c) 2003, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -26,6 +26,7 @@
package
sun.management
;
import
com.sun.management.GarbageCollectorMXBean
;
import
com.sun.management.GarbageCollectionNotificationInfo
;
import
java.lang.management.ManagementFactory
;
import
java.lang.management.MemoryPoolMXBean
;
import
java.lang.management.MemoryUsage
;
...
...
@@ -35,9 +36,15 @@ import javax.management.openmbean.CompositeData;
import
javax.management.MBeanInfo
;
import
javax.management.MBeanAttributeInfo
;
import
javax.management.ObjectName
;
import
javax.management.MBeanNotificationInfo
;
import
javax.management.Notification
;
import
javax.management.NotificationFilter
;
import
javax.management.NotificationListener
;
import
javax.management.ListenerNotFoundException
;
import
java.util.List
;
import
java.util.ListIterator
;
import
java.util.Map
;
/**
* Implementation class for the garbage collector.
...
...
@@ -78,19 +85,111 @@ class GarbageCollectorImpl extends MemoryManagerImpl
// Sun JDK extension
private
GcInfoBuilder
gcInfoBuilder
;
private
synchronized
GcInfoBuilder
getGcInfoBuilder
()
{
if
(
gcInfoBuilder
==
null
)
{
gcInfoBuilder
=
new
GcInfoBuilder
(
this
,
getAllPoolNames
());
}
return
gcInfoBuilder
;
}
public
GcInfo
getLastGcInfo
()
{
GcInfo
info
=
getGcInfoBuilder
().
getLastGcInfo
();
return
info
;
}
private
final
static
String
notifName
=
"javax.management.Notification"
;
private
final
static
String
[]
gcNotifTypes
=
{
GarbageCollectionNotificationInfo
.
GARBAGE_COLLECTION_NOTIFICATION
};
private
MBeanNotificationInfo
[]
notifInfo
=
null
;
public
MBeanNotificationInfo
[]
getNotificationInfo
()
{
synchronized
(
this
)
{
if
(
gcInfoBuilder
==
null
)
{
gcInfoBuilder
=
new
GcInfoBuilder
(
this
,
getAllPoolNames
());
if
(
notifInfo
==
null
)
{
notifInfo
=
new
MBeanNotificationInfo
[
1
];
notifInfo
[
0
]
=
new
MBeanNotificationInfo
(
gcNotifTypes
,
notifName
,
"GC Notification"
);
}
}
return
notifInfo
;
}
GcInfo
info
=
gcInfoBuilder
.
getLastGcInfo
();
return
info
;
private
static
long
seqNumber
=
0
;
private
static
long
getNextSeqNumber
()
{
return
++
seqNumber
;
}
void
createGCNotification
(
long
timestamp
,
String
gcName
,
String
gcAction
,
String
gcCause
,
GcInfo
gcInfo
)
{
if
(!
hasListeners
())
{
return
;
}
Notification
notif
=
new
Notification
(
GarbageCollectionNotificationInfo
.
GARBAGE_COLLECTION_NOTIFICATION
,
getObjectName
(),
getNextSeqNumber
(),
timestamp
,
gcName
);
GarbageCollectionNotificationInfo
info
=
new
GarbageCollectionNotificationInfo
(
gcName
,
gcAction
,
gcCause
,
gcInfo
);
CompositeData
cd
=
GarbageCollectionNotifInfoCompositeData
.
toCompositeData
(
info
);
notif
.
setUserData
(
cd
);
sendNotification
(
notif
);
}
public
synchronized
void
addNotificationListener
(
NotificationListener
listener
,
NotificationFilter
filter
,
Object
handback
)
{
boolean
before
=
hasListeners
();
super
.
addNotificationListener
(
listener
,
filter
,
handback
);
boolean
after
=
hasListeners
();
if
(!
before
&&
after
)
{
setNotificationEnabled
(
this
,
true
);
}
}
public
synchronized
void
removeNotificationListener
(
NotificationListener
listener
)
throws
ListenerNotFoundException
{
boolean
before
=
hasListeners
();
super
.
removeNotificationListener
(
listener
);
boolean
after
=
hasListeners
();
if
(
before
&&
!
after
)
{
setNotificationEnabled
(
this
,
false
);
}
}
public
synchronized
void
removeNotificationListener
(
NotificationListener
listener
,
NotificationFilter
filter
,
Object
handback
)
throws
ListenerNotFoundException
{
boolean
before
=
hasListeners
();
super
.
removeNotificationListener
(
listener
,
filter
,
handback
);
boolean
after
=
hasListeners
();
if
(
before
&&
!
after
)
{
setNotificationEnabled
(
this
,
false
);
}
}
public
ObjectName
getObjectName
()
{
return
Util
.
newObjectName
(
ManagementFactory
.
GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
,
getName
());
}
native
void
setNotificationEnabled
(
GarbageCollectorMXBean
gc
,
boolean
enabled
);
}
src/share/classes/sun/management/GcInfoCompositeData.java
浏览文件 @
503c18aa
/*
* Copyright (c) 2004, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -27,6 +27,7 @@ package sun.management;
import
java.lang.management.MemoryUsage
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Field
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.HashMap
;
...
...
@@ -41,6 +42,9 @@ import javax.management.openmbean.SimpleType;
import
javax.management.openmbean.OpenType
;
import
javax.management.openmbean.OpenDataException
;
import
com.sun.management.GcInfo
;
import
com.sun.management.GarbageCollectionNotificationInfo
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
/**
* A CompositeData for GcInfo for the local management support.
...
...
@@ -64,6 +68,44 @@ public class GcInfoCompositeData extends LazyCompositeData {
return
info
;
}
public
static
CompositeData
toCompositeData
(
final
GcInfo
info
)
{
final
GcInfoBuilder
builder
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
GcInfoBuilder
>()
{
public
GcInfoBuilder
run
()
{
try
{
Class
cl
=
Class
.
forName
(
"com.sun.management.GcInfo"
);
Field
f
=
cl
.
getDeclaredField
(
"builder"
);
f
.
setAccessible
(
true
);
return
(
GcInfoBuilder
)
f
.
get
(
info
);
}
catch
(
ClassNotFoundException
e
)
{
return
null
;
}
catch
(
NoSuchFieldException
e
)
{
return
null
;
}
catch
(
IllegalAccessException
e
)
{
return
null
;
}
}
});
final
Object
[]
extAttr
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Object
[]>()
{
public
Object
[]
run
()
{
try
{
Class
cl
=
Class
.
forName
(
"com.sun.management.GcInfo"
);
Field
f
=
cl
.
getDeclaredField
(
"extAttributes"
);
f
.
setAccessible
(
true
);
return
(
Object
[])
f
.
get
(
info
);
}
catch
(
ClassNotFoundException
e
)
{
return
null
;
}
catch
(
NoSuchFieldException
e
)
{
return
null
;
}
catch
(
IllegalAccessException
e
)
{
return
null
;
}
}
});
GcInfoCompositeData
gcicd
=
new
GcInfoCompositeData
(
info
,
builder
,
extAttr
);
return
gcicd
.
getCompositeData
();
}
protected
CompositeData
getCompositeData
()
{
// CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
// baseGcInfoItemNames!
...
...
@@ -115,7 +157,6 @@ public class GcInfoCompositeData extends LazyCompositeData {
}
}
private
static
final
String
ID
=
"id"
;
private
static
final
String
START_TIME
=
"startTime"
;
private
static
final
String
END_TIME
=
"endTime"
;
...
...
@@ -231,7 +272,7 @@ public class GcInfoCompositeData extends LazyCompositeData {
// This is only used for validation.
private
static
CompositeType
baseGcInfoCompositeType
=
null
;
private
static
synchronized
CompositeType
getBaseGcInfoCompositeType
()
{
static
synchronized
CompositeType
getBaseGcInfoCompositeType
()
{
if
(
baseGcInfoCompositeType
==
null
)
{
try
{
baseGcInfoCompositeType
=
...
...
src/share/classes/sun/management/MemoryManagerImpl.java
浏览文件 @
503c18aa
/*
* Copyright (c) 2003, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -29,6 +29,7 @@ import java.lang.management.ManagementFactory;
import
java.lang.management.MemoryManagerMXBean
;
import
java.lang.management.MemoryPoolMXBean
;
import
javax.management.MBeanNotificationInfo
;
import
javax.management.ObjectName
;
/**
...
...
@@ -38,7 +39,8 @@ import javax.management.ObjectName;
* ManagementFactory.getMemoryManagerMXBeans() returns a list
* of instances of this class.
*/
class
MemoryManagerImpl
implements
MemoryManagerMXBean
{
class
MemoryManagerImpl
extends
NotificationEmitterSupport
implements
MemoryManagerMXBean
{
private
final
String
name
;
private
final
boolean
isValid
;
...
...
@@ -76,6 +78,16 @@ class MemoryManagerImpl implements MemoryManagerMXBean {
}
private
native
MemoryPoolMXBean
[]
getMemoryPools0
();
private
MBeanNotificationInfo
[]
notifInfo
=
null
;
public
MBeanNotificationInfo
[]
getNotificationInfo
()
{
synchronized
(
this
)
{
if
(
notifInfo
==
null
)
{
notifInfo
=
new
MBeanNotificationInfo
[
0
];
}
}
return
notifInfo
;
}
public
ObjectName
getObjectName
()
{
return
Util
.
newObjectName
(
ManagementFactory
.
MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
,
getName
());
}
...
...
src/share/classes/sun/management/VMManagement.java
浏览文件 @
503c18aa
...
...
@@ -45,6 +45,7 @@ public interface VMManagement {
public
boolean
isSynchronizerUsageSupported
();
public
boolean
isThreadAllocatedMemorySupported
();
public
boolean
isThreadAllocatedMemoryEnabled
();
public
boolean
isGcNotificationSupported
();
// Class Loading Subsystem
public
long
getTotalClassCount
();
...
...
src/share/classes/sun/management/VMManagementImpl.java
浏览文件 @
503c18aa
...
...
@@ -56,6 +56,8 @@ class VMManagementImpl implements VMManagement {
private
static
boolean
objectMonitorUsageSupport
;
private
static
boolean
synchronizerUsageSupport
;
private
static
boolean
threadAllocatedMemorySupport
;
private
static
boolean
gcNotificationSupport
;
static
{
version
=
getVersion0
();
...
...
@@ -100,6 +102,10 @@ class VMManagementImpl implements VMManagement {
return
threadAllocatedMemorySupport
;
}
public
boolean
isGcNotificationSupported
()
{
return
gcNotificationSupport
;
}
public
native
boolean
isThreadContentionMonitoringEnabled
();
public
native
boolean
isThreadCpuTimeEnabled
();
public
native
boolean
isThreadAllocatedMemoryEnabled
();
...
...
src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -28,7 +28,7 @@ package sun.nio.ch;
import
java.nio.channels.*
;
import
java.net.SocketAddress
;
import
java.net.SocketOption
;
import
java.net.StandardSocketOption
;
import
java.net.StandardSocketOption
s
;
import
java.net.InetSocketAddress
;
import
java.io.FileDescriptor
;
import
java.io.IOException
;
...
...
@@ -214,8 +214,8 @@ abstract class AsynchronousServerSocketChannelImpl
private
static
Set
<
SocketOption
<?>>
defaultOptions
()
{
HashSet
<
SocketOption
<?>>
set
=
new
HashSet
<
SocketOption
<?>>(
2
);
set
.
add
(
StandardSocketOption
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
s
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_REUSEADDR
);
return
Collections
.
unmodifiableSet
(
set
);
}
}
...
...
src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -28,7 +28,7 @@ package sun.nio.ch;
import
java.nio.ByteBuffer
;
import
java.nio.channels.*
;
import
java.net.SocketOption
;
import
java.net.StandardSocketOption
;
import
java.net.StandardSocketOption
s
;
import
java.net.SocketAddress
;
import
java.net.InetSocketAddress
;
import
java.io.IOException
;
...
...
@@ -483,11 +483,11 @@ abstract class AsynchronousSocketChannelImpl
private
static
Set
<
SocketOption
<?>>
defaultOptions
()
{
HashSet
<
SocketOption
<?>>
set
=
new
HashSet
<
SocketOption
<?>>(
5
);
set
.
add
(
StandardSocketOption
.
SO_SNDBUF
);
set
.
add
(
StandardSocketOption
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
.
SO_KEEPALIVE
);
set
.
add
(
StandardSocketOption
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
.
TCP_NODELAY
);
set
.
add
(
StandardSocketOption
s
.
SO_SNDBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_KEEPALIVE
);
set
.
add
(
StandardSocketOption
s
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
s
.
TCP_NODELAY
);
return
Collections
.
unmodifiableSet
(
set
);
}
}
...
...
src/share/classes/sun/nio/ch/DatagramChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -188,7 +188,7 @@ class DatagramChannelImpl
synchronized
(
stateLock
)
{
ensureOpen
();
if
(
name
==
StandardSocketOption
.
IP_TOS
)
{
if
(
name
==
StandardSocketOption
s
.
IP_TOS
)
{
// IPv4 only; no-op for IPv6
if
(
family
==
StandardProtocolFamily
.
INET
)
{
Net
.
setSocketOption
(
fd
,
family
,
name
,
value
);
...
...
@@ -196,15 +196,15 @@ class DatagramChannelImpl
return
this
;
}
if
(
name
==
StandardSocketOption
.
IP_MULTICAST_TTL
||
name
==
StandardSocketOption
.
IP_MULTICAST_LOOP
)
if
(
name
==
StandardSocketOption
s
.
IP_MULTICAST_TTL
||
name
==
StandardSocketOption
s
.
IP_MULTICAST_LOOP
)
{
// options are protocol dependent
Net
.
setSocketOption
(
fd
,
family
,
name
,
value
);
return
this
;
}
if
(
name
==
StandardSocketOption
.
IP_MULTICAST_IF
)
{
if
(
name
==
StandardSocketOption
s
.
IP_MULTICAST_IF
)
{
if
(
value
==
null
)
throw
new
IllegalArgumentException
(
"Cannot set IP_MULTICAST_IF to 'null'"
);
NetworkInterface
interf
=
(
NetworkInterface
)
value
;
...
...
@@ -243,7 +243,7 @@ class DatagramChannelImpl
synchronized
(
stateLock
)
{
ensureOpen
();
if
(
name
==
StandardSocketOption
.
IP_TOS
)
{
if
(
name
==
StandardSocketOption
s
.
IP_TOS
)
{
// IPv4 only; always return 0 on IPv6
if
(
family
==
StandardProtocolFamily
.
INET
)
{
return
(
T
)
Net
.
getSocketOption
(
fd
,
family
,
name
);
...
...
@@ -252,13 +252,13 @@ class DatagramChannelImpl
}
}
if
(
name
==
StandardSocketOption
.
IP_MULTICAST_TTL
||
name
==
StandardSocketOption
.
IP_MULTICAST_LOOP
)
if
(
name
==
StandardSocketOption
s
.
IP_MULTICAST_TTL
||
name
==
StandardSocketOption
s
.
IP_MULTICAST_LOOP
)
{
return
(
T
)
Net
.
getSocketOption
(
fd
,
family
,
name
);
}
if
(
name
==
StandardSocketOption
.
IP_MULTICAST_IF
)
{
if
(
name
==
StandardSocketOption
s
.
IP_MULTICAST_IF
)
{
if
(
family
==
StandardProtocolFamily
.
INET
)
{
int
address
=
Net
.
getInterface4
(
fd
);
if
(
address
==
0
)
...
...
@@ -291,14 +291,14 @@ class DatagramChannelImpl
private
static
Set
<
SocketOption
<?>>
defaultOptions
()
{
HashSet
<
SocketOption
<?>>
set
=
new
HashSet
<
SocketOption
<?>>(
8
);
set
.
add
(
StandardSocketOption
.
SO_SNDBUF
);
set
.
add
(
StandardSocketOption
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
.
SO_BROADCAST
);
set
.
add
(
StandardSocketOption
.
IP_TOS
);
set
.
add
(
StandardSocketOption
.
IP_MULTICAST_IF
);
set
.
add
(
StandardSocketOption
.
IP_MULTICAST_TTL
);
set
.
add
(
StandardSocketOption
.
IP_MULTICAST_LOOP
);
set
.
add
(
StandardSocketOption
s
.
SO_SNDBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
s
.
SO_BROADCAST
);
set
.
add
(
StandardSocketOption
s
.
IP_TOS
);
set
.
add
(
StandardSocketOption
s
.
IP_MULTICAST_IF
);
set
.
add
(
StandardSocketOption
s
.
IP_MULTICAST_TTL
);
set
.
add
(
StandardSocketOption
s
.
IP_MULTICAST_LOOP
);
return
Collections
.
unmodifiableSet
(
set
);
}
}
...
...
src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java
浏览文件 @
503c18aa
...
...
@@ -312,46 +312,46 @@ public class DatagramSocketAdaptor
public
void
setSendBufferSize
(
int
size
)
throws
SocketException
{
if
(
size
<=
0
)
throw
new
IllegalArgumentException
(
"Invalid send size"
);
setIntOption
(
StandardSocketOption
.
SO_SNDBUF
,
size
);
setIntOption
(
StandardSocketOption
s
.
SO_SNDBUF
,
size
);
}
public
int
getSendBufferSize
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
SO_SNDBUF
);
return
getIntOption
(
StandardSocketOption
s
.
SO_SNDBUF
);
}
public
void
setReceiveBufferSize
(
int
size
)
throws
SocketException
{
if
(
size
<=
0
)
throw
new
IllegalArgumentException
(
"Invalid receive size"
);
setIntOption
(
StandardSocketOption
.
SO_RCVBUF
,
size
);
setIntOption
(
StandardSocketOption
s
.
SO_RCVBUF
,
size
);
}
public
int
getReceiveBufferSize
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
SO_RCVBUF
);
return
getIntOption
(
StandardSocketOption
s
.
SO_RCVBUF
);
}
public
void
setReuseAddress
(
boolean
on
)
throws
SocketException
{
setBooleanOption
(
StandardSocketOption
.
SO_REUSEADDR
,
on
);
setBooleanOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
on
);
}
public
boolean
getReuseAddress
()
throws
SocketException
{
return
getBooleanOption
(
StandardSocketOption
.
SO_REUSEADDR
);
return
getBooleanOption
(
StandardSocketOption
s
.
SO_REUSEADDR
);
}
public
void
setBroadcast
(
boolean
on
)
throws
SocketException
{
setBooleanOption
(
StandardSocketOption
.
SO_BROADCAST
,
on
);
setBooleanOption
(
StandardSocketOption
s
.
SO_BROADCAST
,
on
);
}
public
boolean
getBroadcast
()
throws
SocketException
{
return
getBooleanOption
(
StandardSocketOption
.
SO_BROADCAST
);
return
getBooleanOption
(
StandardSocketOption
s
.
SO_BROADCAST
);
}
public
void
setTrafficClass
(
int
tc
)
throws
SocketException
{
setIntOption
(
StandardSocketOption
.
IP_TOS
,
tc
);
setIntOption
(
StandardSocketOption
s
.
IP_TOS
,
tc
);
}
public
int
getTrafficClass
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
IP_TOS
);
return
getIntOption
(
StandardSocketOption
s
.
IP_TOS
);
}
public
void
close
()
{
...
...
src/share/classes/sun/nio/ch/ExtendedSocketOption.java
浏览文件 @
503c18aa
...
...
@@ -29,7 +29,7 @@ import java.net.SocketOption;
/**
* Defines socket options that are supported by the implementation
* but not defined in StandardSocketOption.
* but not defined in StandardSocketOption
s
.
*/
class
ExtendedSocketOption
{
...
...
src/share/classes/sun/nio/ch/NativeThreadSet.java
浏览文件 @
503c18aa
...
...
@@ -96,11 +96,16 @@ class NativeThreadSet {
break
;
}
waitingToEmpty
=
true
;
boolean
interrupted
=
false
;
while
(
used
>
0
)
{
try
{
wait
();
}
catch
(
InterruptedException
ignore
)
{
}
}
catch
(
InterruptedException
e
)
{
interrupted
=
true
;
}
}
if
(
interrupted
)
Thread
.
currentThread
().
interrupt
();
}
}
}
src/share/classes/sun/nio/ch/Net.java
浏览文件 @
503c18aa
...
...
@@ -237,26 +237,26 @@ class Net { // package-private
throw
new
AssertionError
(
"Should not reach here"
);
// special handling
if
(
name
==
StandardSocketOption
.
SO_RCVBUF
||
name
==
StandardSocketOption
.
SO_SNDBUF
)
if
(
name
==
StandardSocketOption
s
.
SO_RCVBUF
||
name
==
StandardSocketOption
s
.
SO_SNDBUF
)
{
int
i
=
((
Integer
)
value
).
intValue
();
if
(
i
<
0
)
throw
new
IllegalArgumentException
(
"Invalid send/receive buffer size"
);
}
if
(
name
==
StandardSocketOption
.
SO_LINGER
)
{
if
(
name
==
StandardSocketOption
s
.
SO_LINGER
)
{
int
i
=
((
Integer
)
value
).
intValue
();
if
(
i
<
0
)
value
=
Integer
.
valueOf
(-
1
);
if
(
i
>
65535
)
value
=
Integer
.
valueOf
(
65535
);
}
if
(
name
==
StandardSocketOption
.
IP_TOS
)
{
if
(
name
==
StandardSocketOption
s
.
IP_TOS
)
{
int
i
=
((
Integer
)
value
).
intValue
();
if
(
i
<
0
||
i
>
255
)
throw
new
IllegalArgumentException
(
"Invalid IP_TOS value"
);
}
if
(
name
==
StandardSocketOption
.
IP_MULTICAST_TTL
)
{
if
(
name
==
StandardSocketOption
s
.
IP_MULTICAST_TTL
)
{
int
i
=
((
Integer
)
value
).
intValue
();
if
(
i
<
0
||
i
>
255
)
throw
new
IllegalArgumentException
(
"Invalid TTL/hop value"
);
...
...
src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
浏览文件 @
503c18aa
...
...
@@ -169,7 +169,7 @@ public class ServerSocketAdaptor // package-private
public
void
setReuseAddress
(
boolean
on
)
throws
SocketException
{
try
{
ssc
.
setOption
(
StandardSocketOption
.
SO_REUSEADDR
,
on
);
ssc
.
setOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
on
);
}
catch
(
IOException
x
)
{
Net
.
translateToSocketException
(
x
);
}
...
...
@@ -177,7 +177,7 @@ public class ServerSocketAdaptor // package-private
public
boolean
getReuseAddress
()
throws
SocketException
{
try
{
return
ssc
.
getOption
(
StandardSocketOption
.
SO_REUSEADDR
).
booleanValue
();
return
ssc
.
getOption
(
StandardSocketOption
s
.
SO_REUSEADDR
).
booleanValue
();
}
catch
(
IOException
x
)
{
Net
.
translateToSocketException
(
x
);
return
false
;
// Never happens
...
...
@@ -197,7 +197,7 @@ public class ServerSocketAdaptor // package-private
if
(
size
<=
0
)
throw
new
IllegalArgumentException
(
"size cannot be 0 or negative"
);
try
{
ssc
.
setOption
(
StandardSocketOption
.
SO_RCVBUF
,
size
);
ssc
.
setOption
(
StandardSocketOption
s
.
SO_RCVBUF
,
size
);
}
catch
(
IOException
x
)
{
Net
.
translateToSocketException
(
x
);
}
...
...
@@ -205,7 +205,7 @@ public class ServerSocketAdaptor // package-private
public
int
getReceiveBufferSize
()
throws
SocketException
{
try
{
return
ssc
.
getOption
(
StandardSocketOption
.
SO_RCVBUF
).
intValue
();
return
ssc
.
getOption
(
StandardSocketOption
s
.
SO_RCVBUF
).
intValue
();
}
catch
(
IOException
x
)
{
Net
.
translateToSocketException
(
x
);
return
-
1
;
// Never happens
...
...
src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -160,8 +160,8 @@ class ServerSocketChannelImpl
private
static
Set
<
SocketOption
<?>>
defaultOptions
()
{
HashSet
<
SocketOption
<?>>
set
=
new
HashSet
<
SocketOption
<?>>(
2
);
set
.
add
(
StandardSocketOption
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
s
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_REUSEADDR
);
return
Collections
.
unmodifiableSet
(
set
);
}
}
...
...
src/share/classes/sun/nio/ch/SocketAdaptor.java
浏览文件 @
503c18aa
...
...
@@ -318,21 +318,21 @@ public class SocketAdaptor
}
public
void
setTcpNoDelay
(
boolean
on
)
throws
SocketException
{
setBooleanOption
(
StandardSocketOption
.
TCP_NODELAY
,
on
);
setBooleanOption
(
StandardSocketOption
s
.
TCP_NODELAY
,
on
);
}
public
boolean
getTcpNoDelay
()
throws
SocketException
{
return
getBooleanOption
(
StandardSocketOption
.
TCP_NODELAY
);
return
getBooleanOption
(
StandardSocketOption
s
.
TCP_NODELAY
);
}
public
void
setSoLinger
(
boolean
on
,
int
linger
)
throws
SocketException
{
if
(!
on
)
linger
=
-
1
;
setIntOption
(
StandardSocketOption
.
SO_LINGER
,
linger
);
setIntOption
(
StandardSocketOption
s
.
SO_LINGER
,
linger
);
}
public
int
getSoLinger
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
SO_LINGER
);
return
getIntOption
(
StandardSocketOption
s
.
SO_LINGER
);
}
public
void
sendUrgentData
(
int
data
)
throws
IOException
{
...
...
@@ -366,46 +366,46 @@ public class SocketAdaptor
// size 0 valid for SocketChannel, invalid for Socket
if
(
size
<=
0
)
throw
new
IllegalArgumentException
(
"Invalid send size"
);
setIntOption
(
StandardSocketOption
.
SO_SNDBUF
,
size
);
setIntOption
(
StandardSocketOption
s
.
SO_SNDBUF
,
size
);
}
public
int
getSendBufferSize
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
SO_SNDBUF
);
return
getIntOption
(
StandardSocketOption
s
.
SO_SNDBUF
);
}
public
void
setReceiveBufferSize
(
int
size
)
throws
SocketException
{
// size 0 valid for SocketChannel, invalid for Socket
if
(
size
<=
0
)
throw
new
IllegalArgumentException
(
"Invalid receive size"
);
setIntOption
(
StandardSocketOption
.
SO_RCVBUF
,
size
);
setIntOption
(
StandardSocketOption
s
.
SO_RCVBUF
,
size
);
}
public
int
getReceiveBufferSize
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
SO_RCVBUF
);
return
getIntOption
(
StandardSocketOption
s
.
SO_RCVBUF
);
}
public
void
setKeepAlive
(
boolean
on
)
throws
SocketException
{
setBooleanOption
(
StandardSocketOption
.
SO_KEEPALIVE
,
on
);
setBooleanOption
(
StandardSocketOption
s
.
SO_KEEPALIVE
,
on
);
}
public
boolean
getKeepAlive
()
throws
SocketException
{
return
getBooleanOption
(
StandardSocketOption
.
SO_KEEPALIVE
);
return
getBooleanOption
(
StandardSocketOption
s
.
SO_KEEPALIVE
);
}
public
void
setTrafficClass
(
int
tc
)
throws
SocketException
{
setIntOption
(
StandardSocketOption
.
IP_TOS
,
tc
);
setIntOption
(
StandardSocketOption
s
.
IP_TOS
,
tc
);
}
public
int
getTrafficClass
()
throws
SocketException
{
return
getIntOption
(
StandardSocketOption
.
IP_TOS
);
return
getIntOption
(
StandardSocketOption
s
.
IP_TOS
);
}
public
void
setReuseAddress
(
boolean
on
)
throws
SocketException
{
setBooleanOption
(
StandardSocketOption
.
SO_REUSEADDR
,
on
);
setBooleanOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
on
);
}
public
boolean
getReuseAddress
()
throws
SocketException
{
return
getBooleanOption
(
StandardSocketOption
.
SO_REUSEADDR
);
return
getBooleanOption
(
StandardSocketOption
s
.
SO_REUSEADDR
);
}
public
void
close
()
throws
IOException
{
...
...
src/share/classes/sun/nio/ch/SocketChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -170,7 +170,7 @@ class SocketChannelImpl
throw
new
ClosedChannelException
();
// special handling for IP_TOS: no-op when IPv6
if
(
name
==
StandardSocketOption
.
IP_TOS
)
{
if
(
name
==
StandardSocketOption
s
.
IP_TOS
)
{
if
(!
Net
.
isIPv6Available
())
Net
.
setSocketOption
(
fd
,
StandardProtocolFamily
.
INET
,
name
,
value
);
return
this
;
...
...
@@ -197,7 +197,7 @@ class SocketChannelImpl
throw
new
ClosedChannelException
();
// special handling for IP_TOS: always return 0 when IPv6
if
(
name
==
StandardSocketOption
.
IP_TOS
)
{
if
(
name
==
StandardSocketOption
s
.
IP_TOS
)
{
return
(
Net
.
isIPv6Available
())
?
(
T
)
Integer
.
valueOf
(
0
)
:
(
T
)
Net
.
getSocketOption
(
fd
,
StandardProtocolFamily
.
INET
,
name
);
}
...
...
@@ -212,14 +212,14 @@ class SocketChannelImpl
private
static
Set
<
SocketOption
<?>>
defaultOptions
()
{
HashSet
<
SocketOption
<?>>
set
=
new
HashSet
<
SocketOption
<?>>(
8
);
set
.
add
(
StandardSocketOption
.
SO_SNDBUF
);
set
.
add
(
StandardSocketOption
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
.
SO_KEEPALIVE
);
set
.
add
(
StandardSocketOption
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
.
SO_LINGER
);
set
.
add
(
StandardSocketOption
.
TCP_NODELAY
);
set
.
add
(
StandardSocketOption
s
.
SO_SNDBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_RCVBUF
);
set
.
add
(
StandardSocketOption
s
.
SO_KEEPALIVE
);
set
.
add
(
StandardSocketOption
s
.
SO_REUSEADDR
);
set
.
add
(
StandardSocketOption
s
.
SO_LINGER
);
set
.
add
(
StandardSocketOption
s
.
TCP_NODELAY
);
// additional options required by socket adaptor
set
.
add
(
StandardSocketOption
.
IP_TOS
);
set
.
add
(
StandardSocketOption
s
.
IP_TOS
);
set
.
add
(
ExtendedSocketOption
.
SO_OOBINLINE
);
return
Collections
.
unmodifiableSet
(
set
);
}
...
...
src/share/classes/sun/nio/fs/AbstractPoller.java
浏览文件 @
503c18aa
...
...
@@ -105,16 +105,16 @@ abstract class AbstractPoller implements Runnable {
Set
<
WatchEvent
.
Kind
<?>>
eventSet
=
new
HashSet
<>(
events
.
length
);
for
(
WatchEvent
.
Kind
<?>
event:
events
)
{
// standard events
if
(
event
==
StandardWatchEventKind
.
ENTRY_CREATE
||
event
==
StandardWatchEventKind
.
ENTRY_MODIFY
||
event
==
StandardWatchEventKind
.
ENTRY_DELETE
)
if
(
event
==
StandardWatchEventKind
s
.
ENTRY_CREATE
||
event
==
StandardWatchEventKind
s
.
ENTRY_MODIFY
||
event
==
StandardWatchEventKind
s
.
ENTRY_DELETE
)
{
eventSet
.
add
(
event
);
continue
;
}
// OVERFLOW is ignored
if
(
event
==
StandardWatchEventKind
.
OVERFLOW
)
{
if
(
event
==
StandardWatchEventKind
s
.
OVERFLOW
)
{
if
(
events
.
length
==
1
)
throw
new
IllegalArgumentException
(
"No events to register"
);
continue
;
...
...
src/share/classes/sun/nio/fs/AbstractWatchKey.java
浏览文件 @
503c18aa
...
...
@@ -42,8 +42,8 @@ abstract class AbstractWatchKey implements WatchKey {
/**
* Special event to signal overflow
*/
static
final
Event
<
Void
>
OVERFLOW_EVENT
=
new
Event
<
Void
>(
StandardWatchEventKind
.
OVERFLOW
,
null
);
static
final
Event
<
Object
>
OVERFLOW_EVENT
=
new
Event
<
Object
>(
StandardWatchEventKinds
.
OVERFLOW
,
null
);
/**
* Possible key states
...
...
@@ -103,14 +103,14 @@ abstract class AbstractWatchKey implements WatchKey {
*/
@SuppressWarnings
(
"unchecked"
)
final
void
signalEvent
(
WatchEvent
.
Kind
<?>
kind
,
Object
context
)
{
boolean
isModify
=
(
kind
==
StandardWatchEventKind
.
ENTRY_MODIFY
);
boolean
isModify
=
(
kind
==
StandardWatchEventKind
s
.
ENTRY_MODIFY
);
synchronized
(
this
)
{
int
size
=
events
.
size
();
if
(
size
>
0
)
{
// if the previous event is an OVERFLOW event or this is a
// repeated event then we simply increment the counter
WatchEvent
<?>
prev
=
events
.
get
(
size
-
1
);
if
((
prev
.
kind
()
==
StandardWatchEventKind
.
OVERFLOW
)
||
if
((
prev
.
kind
()
==
StandardWatchEventKind
s
.
OVERFLOW
)
||
((
kind
==
prev
.
kind
()
&&
Objects
.
equals
(
context
,
prev
.
context
()))))
{
...
...
@@ -124,7 +124,7 @@ abstract class AbstractWatchKey implements WatchKey {
if
(
isModify
)
{
WatchEvent
<?>
ev
=
lastModifyEvents
.
get
(
context
);
if
(
ev
!=
null
)
{
assert
ev
.
kind
()
==
StandardWatchEventKind
.
ENTRY_MODIFY
;
assert
ev
.
kind
()
==
StandardWatchEventKind
s
.
ENTRY_MODIFY
;
((
Event
<?>)
ev
).
increment
();
return
;
}
...
...
@@ -138,7 +138,7 @@ abstract class AbstractWatchKey implements WatchKey {
// if the list has reached the limit then drop pending events
// and queue an OVERFLOW event
if
(
size
>=
MAX_EVENT_LIST_SIZE
)
{
kind
=
StandardWatchEventKind
.
OVERFLOW
;
kind
=
StandardWatchEventKind
s
.
OVERFLOW
;
isModify
=
false
;
context
=
null
;
}
...
...
@@ -149,7 +149,7 @@ abstract class AbstractWatchKey implements WatchKey {
new
Event
<
Object
>((
WatchEvent
.
Kind
<
Object
>)
kind
,
context
);
if
(
isModify
)
{
lastModifyEvents
.
put
(
context
,
ev
);
}
else
if
(
kind
==
StandardWatchEventKind
.
OVERFLOW
)
{
}
else
if
(
kind
==
StandardWatchEventKind
s
.
OVERFLOW
)
{
// drop all pending events
events
.
clear
();
lastModifyEvents
.
clear
();
...
...
src/share/classes/sun/nio/fs/PollingWatchService.java
浏览文件 @
503c18aa
...
...
@@ -80,16 +80,16 @@ class PollingWatchService
new
HashSet
<
WatchEvent
.
Kind
<?>>(
events
.
length
);
for
(
WatchEvent
.
Kind
<?>
event:
events
)
{
// standard events
if
(
event
==
StandardWatchEventKind
.
ENTRY_CREATE
||
event
==
StandardWatchEventKind
.
ENTRY_MODIFY
||
event
==
StandardWatchEventKind
.
ENTRY_DELETE
)
if
(
event
==
StandardWatchEventKind
s
.
ENTRY_CREATE
||
event
==
StandardWatchEventKind
s
.
ENTRY_MODIFY
||
event
==
StandardWatchEventKind
s
.
ENTRY_DELETE
)
{
eventSet
.
add
(
event
);
continue
;
}
// OVERFLOW is ignored
if
(
event
==
StandardWatchEventKind
.
OVERFLOW
)
{
if
(
event
==
StandardWatchEventKind
s
.
OVERFLOW
)
{
if
(
events
.
length
==
1
)
throw
new
IllegalArgumentException
(
"No events to register"
);
continue
;
...
...
@@ -355,16 +355,16 @@ class PollingWatchService
new
CacheEntry
(
lastModified
,
tickCount
));
// queue ENTRY_CREATE if event enabled
if
(
events
.
contains
(
StandardWatchEventKind
.
ENTRY_CREATE
))
{
signalEvent
(
StandardWatchEventKind
.
ENTRY_CREATE
,
entry
.
getFileName
());
if
(
events
.
contains
(
StandardWatchEventKind
s
.
ENTRY_CREATE
))
{
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_CREATE
,
entry
.
getFileName
());
continue
;
}
else
{
// if ENTRY_CREATE is not enabled and ENTRY_MODIFY is
// enabled then queue event to avoid missing out on
// modifications to the file immediately after it is
// created.
if
(
events
.
contains
(
StandardWatchEventKind
.
ENTRY_MODIFY
))
{
signalEvent
(
StandardWatchEventKind
.
ENTRY_MODIFY
,
entry
.
getFileName
());
if
(
events
.
contains
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
))
{
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
,
entry
.
getFileName
());
}
}
continue
;
...
...
@@ -372,8 +372,8 @@ class PollingWatchService
// check if file has changed
if
(
e
.
lastModified
!=
lastModified
)
{
if
(
events
.
contains
(
StandardWatchEventKind
.
ENTRY_MODIFY
))
{
signalEvent
(
StandardWatchEventKind
.
ENTRY_MODIFY
,
if
(
events
.
contains
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
))
{
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
,
entry
.
getFileName
());
}
}
...
...
@@ -403,8 +403,8 @@ class PollingWatchService
Path
name
=
mapEntry
.
getKey
();
// remove from map and queue delete event (if enabled)
i
.
remove
();
if
(
events
.
contains
(
StandardWatchEventKind
.
ENTRY_DELETE
))
{
signalEvent
(
StandardWatchEventKind
.
ENTRY_DELETE
,
name
);
if
(
events
.
contains
(
StandardWatchEventKind
s
.
ENTRY_DELETE
))
{
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_DELETE
,
name
);
}
}
}
...
...
src/share/classes/sun/security/jgss/spi/GSSContextSpi.java
浏览文件 @
503c18aa
...
...
@@ -24,22 +24,10 @@
*/
/*
* ===========================================================================
* IBM Confidential
* OCO Source Materials
* Licensed Materials - Property of IBM
*
* (C) Copyright IBM Corp. 1999 All Rights Reserved.
*
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with the U.S.
* Copyright Office.
*
* Copyright 1997 The Open Group Research Institute. All rights reserved.
* ===========================================================================
*
*/
package
sun.security.jgss.spi
;
import
org.ietf.jgss.*
;
...
...
src/share/classes/sun/security/ssl/JsseJce.java
浏览文件 @
503c18aa
...
...
@@ -62,7 +62,7 @@ final class JsseJce {
// Flag indicating whether EC crypto is available.
// If null, then we have not checked yet.
// If yes, then all the EC based crypto we need is available.
private
static
volatile
Boolean
ecAvailable
;
private
static
Boolean
ecAvailable
;
// Flag indicating whether Kerberos crypto is available.
// If true, then all the Kerberos-based crypto we need is available.
...
...
@@ -190,7 +190,7 @@ final class JsseJce {
// no instantiation of this class
}
static
boolean
isEcAvailable
()
{
s
ynchronized
s
tatic
boolean
isEcAvailable
()
{
if
(
ecAvailable
==
null
)
{
try
{
JsseJce
.
getSignature
(
SIGNATURE_ECDSA
);
...
...
@@ -206,7 +206,7 @@ final class JsseJce {
return
ecAvailable
;
}
static
void
clearEcAvailable
()
{
s
ynchronized
s
tatic
void
clearEcAvailable
()
{
ecAvailable
=
null
;
}
...
...
src/share/classes/sun/text/resources/BreakIteratorRules_th.java
浏览文件 @
503c18aa
...
...
@@ -27,17 +27,7 @@
*/
/*
* IBM Confidential
* OCO Source Materials
*
* IBM Java(tm)2 SDK, Standard Edition, v 1.2
*
* (C) Copyright IBM Corp. 1999
*
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with the U.S.
* Copyright office.
*
* (C) Copyright IBM Corp. 1999 All Rights Reserved.
*/
/*
...
...
src/share/javavm/export/jmm.h
浏览文件 @
503c18aa
...
...
@@ -48,7 +48,7 @@ enum {
JMM_VERSION_1_0
=
0x20010000
,
JMM_VERSION_1_1
=
0x20010100
,
// JDK 6
JMM_VERSION_1_2
=
0x20010200
,
// JDK 7
JMM_VERSION
=
0x2001020
0
JMM_VERSION
=
0x2001020
1
};
typedef
struct
{
...
...
@@ -293,6 +293,9 @@ typedef struct jmmInterface_1_ {
jlongArray
ids
,
jboolean
lockedMonitors
,
jboolean
lockedSynchronizers
);
void
(
JNICALL
*
SetGCNotificationEnabled
)
(
JNIEnv
*
env
,
jobject
mgr
,
jboolean
enabled
);
}
JmmInterface
;
#ifdef __cplusplus
...
...
src/share/native/sun/management/GarbageCollectorImpl.c
浏览文件 @
503c18aa
/*
* Copyright (c) 2003, 20
04
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -36,3 +36,17 @@ JNIEXPORT jlong JNICALL Java_sun_management_GarbageCollectorImpl_getCollectionTi
(
JNIEnv
*
env
,
jobject
mgr
)
{
return
jmm_interface
->
GetLongAttribute
(
env
,
mgr
,
JMM_GC_TIME_MS
);
}
JNIEXPORT
void
JNICALL
Java_sun_management_GarbageCollectorImpl_setNotificationEnabled
(
JNIEnv
*
env
,
jobject
dummy
,
jobject
gc
,
jboolean
enabled
)
{
if
(
gc
==
NULL
)
{
JNU_ThrowNullPointerException
(
env
,
"Invalid GarbageCollectorMBean"
);
return
;
}
if
((
jmm_version
>
JMM_VERSION_1_2
)
||
(
jmm_version
==
JMM_VERSION_1_2
&&
((
jmm_version
&
0xFF
)
>=
1
)))
{
jmm_interface
->
SetGCNotificationEnabled
(
env
,
gc
,
enabled
);
}
}
src/share/native/sun/management/VMManagementImpl.c
浏览文件 @
503c18aa
...
...
@@ -95,6 +95,13 @@ Java_sun_management_VMManagementImpl_initOptionalSupportFields
value
=
mos
.
isThreadAllocatedMemorySupported
;
setStaticBooleanField
(
env
,
cls
,
"threadAllocatedMemorySupport"
,
value
);
if
((
jmm_version
>
JMM_VERSION_1_2
)
||
(
jmm_version
==
JMM_VERSION_1_2
&&
((
jmm_version
&
0xFF
)
>=
1
)))
{
setStaticBooleanField
(
env
,
cls
,
"gcNotificationSupport"
,
JNI_TRUE
);
}
else
{
setStaticBooleanField
(
env
,
cls
,
"gcNotificationSupport"
,
JNI_FALSE
);
}
}
JNIEXPORT
jobjectArray
JNICALL
...
...
src/share/native/sun/nio/ch/genSocketOptionRegistry.c
浏览文件 @
503c18aa
...
...
@@ -63,7 +63,7 @@ int main(int argc, const char* argv[]) {
out
(
"// AUTOMATICALLY GENERATED FILE - DO NOT EDIT "
);
out
(
"package sun.nio.ch; "
);
out
(
"import java.net.SocketOption; "
);
out
(
"import java.net.StandardSocketOption
;
"
);
out
(
"import java.net.StandardSocketOption
s;
"
);
out
(
"import java.net.ProtocolFamily; "
);
out
(
"import java.net.StandardProtocolFamily; "
);
out
(
"import java.util.Map; "
);
...
...
@@ -73,7 +73,7 @@ int main(int argc, const char* argv[]) {
out
(
" private static class RegistryKey { "
);
out
(
" private final SocketOption<?> name; "
);
out
(
" private final ProtocolFamily family; "
);
out
(
" RegistryKey(SocketOption<?> name, ProtocolFamily family) {
"
);
out
(
" RegistryKey(SocketOption<?> name, ProtocolFamily family) { "
);
out
(
" this.name = name; "
);
out
(
" this.family = family; "
);
out
(
" } "
);
...
...
@@ -95,23 +95,23 @@ int main(int argc, const char* argv[]) {
out
(
" Map<RegistryKey,OptionKey> map = "
);
out
(
" new HashMap<RegistryKey,OptionKey>(); "
);
emit_unspec
(
"StandardSocketOption.SO_BROADCAST"
,
SOL_SOCKET
,
SO_BROADCAST
);
emit_unspec
(
"StandardSocketOption.SO_KEEPALIVE"
,
SOL_SOCKET
,
SO_KEEPALIVE
);
emit_unspec
(
"StandardSocketOption.SO_LINGER"
,
SOL_SOCKET
,
SO_LINGER
);
emit_unspec
(
"StandardSocketOption.SO_SNDBUF"
,
SOL_SOCKET
,
SO_SNDBUF
);
emit_unspec
(
"StandardSocketOption.SO_RCVBUF"
,
SOL_SOCKET
,
SO_RCVBUF
);
emit_unspec
(
"StandardSocketOption.SO_REUSEADDR"
,
SOL_SOCKET
,
SO_REUSEADDR
);
emit_unspec
(
"StandardSocketOption.TCP_NODELAY"
,
IPPROTO_TCP
,
TCP_NODELAY
);
emit_unspec
(
"StandardSocketOption
s
.SO_BROADCAST"
,
SOL_SOCKET
,
SO_BROADCAST
);
emit_unspec
(
"StandardSocketOption
s
.SO_KEEPALIVE"
,
SOL_SOCKET
,
SO_KEEPALIVE
);
emit_unspec
(
"StandardSocketOption
s
.SO_LINGER"
,
SOL_SOCKET
,
SO_LINGER
);
emit_unspec
(
"StandardSocketOption
s
.SO_SNDBUF"
,
SOL_SOCKET
,
SO_SNDBUF
);
emit_unspec
(
"StandardSocketOption
s
.SO_RCVBUF"
,
SOL_SOCKET
,
SO_RCVBUF
);
emit_unspec
(
"StandardSocketOption
s
.SO_REUSEADDR"
,
SOL_SOCKET
,
SO_REUSEADDR
);
emit_unspec
(
"StandardSocketOption
s
.TCP_NODELAY"
,
IPPROTO_TCP
,
TCP_NODELAY
);
emit_inet
(
"StandardSocketOption.IP_TOS"
,
IPPROTO_IP
,
IP_TOS
);
emit_inet
(
"StandardSocketOption.IP_MULTICAST_IF"
,
IPPROTO_IP
,
IP_MULTICAST_IF
);
emit_inet
(
"StandardSocketOption.IP_MULTICAST_TTL"
,
IPPROTO_IP
,
IP_MULTICAST_TTL
);
emit_inet
(
"StandardSocketOption.IP_MULTICAST_LOOP"
,
IPPROTO_IP
,
IP_MULTICAST_LOOP
);
emit_inet
(
"StandardSocketOption
s
.IP_TOS"
,
IPPROTO_IP
,
IP_TOS
);
emit_inet
(
"StandardSocketOption
s
.IP_MULTICAST_IF"
,
IPPROTO_IP
,
IP_MULTICAST_IF
);
emit_inet
(
"StandardSocketOption
s
.IP_MULTICAST_TTL"
,
IPPROTO_IP
,
IP_MULTICAST_TTL
);
emit_inet
(
"StandardSocketOption
s
.IP_MULTICAST_LOOP"
,
IPPROTO_IP
,
IP_MULTICAST_LOOP
);
#ifdef AF_INET6
emit_inet6
(
"StandardSocketOption.IP_MULTICAST_IF"
,
IPPROTO_IPV6
,
IPV6_MULTICAST_IF
);
emit_inet6
(
"StandardSocketOption.IP_MULTICAST_TTL"
,
IPPROTO_IPV6
,
IPV6_MULTICAST_HOPS
);
emit_inet6
(
"StandardSocketOption.IP_MULTICAST_LOOP"
,
IPPROTO_IPV6
,
IPV6_MULTICAST_LOOP
);
emit_inet6
(
"StandardSocketOption
s
.IP_MULTICAST_IF"
,
IPPROTO_IPV6
,
IPV6_MULTICAST_IF
);
emit_inet6
(
"StandardSocketOption
s
.IP_MULTICAST_TTL"
,
IPPROTO_IPV6
,
IPV6_MULTICAST_HOPS
);
emit_inet6
(
"StandardSocketOption
s
.IP_MULTICAST_LOOP"
,
IPPROTO_IPV6
,
IPV6_MULTICAST_LOOP
);
#endif
emit_unspec
(
"ExtendedSocketOption.SO_OOBINLINE"
,
SOL_SOCKET
,
SO_OOBINLINE
);
...
...
src/share/sample/nio/chatserver/ChatServer.java
浏览文件 @
503c18aa
...
...
@@ -32,7 +32,7 @@
import
java.io.IOException
;
import
java.net.InetSocketAddress
;
import
java.net.SocketAddress
;
import
java.net.StandardSocketOption
;
import
java.net.StandardSocketOption
s
;
import
java.nio.channels.*
;
import
java.util.*
;
import
java.util.concurrent.Executors
;
...
...
@@ -105,7 +105,7 @@ public class ChatServer implements Runnable {
*/
private
AsynchronousServerSocketChannel
createListener
(
AsynchronousChannelGroup
channelGroup
)
throws
IOException
{
final
AsynchronousServerSocketChannel
listener
=
openChannel
(
channelGroup
);
listener
.
setOption
(
StandardSocketOption
.
SO_REUSEADDR
,
true
);
listener
.
setOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
true
);
listener
.
bind
(
new
InetSocketAddress
(
port
));
return
listener
;
}
...
...
@@ -123,7 +123,7 @@ public class ChatServer implements Runnable {
private
void
handleNewConnection
(
AsynchronousSocketChannel
channel
)
{
Client
client
=
new
Client
(
channel
,
new
ClientReader
(
this
,
new
NameReader
(
this
)));
try
{
channel
.
setOption
(
StandardSocketOption
.
TCP_NODELAY
,
true
);
channel
.
setOption
(
StandardSocketOption
s
.
TCP_NODELAY
,
true
);
}
catch
(
IOException
e
)
{
// ignore
}
...
...
src/share/sample/nio/file/WatchDir.java
浏览文件 @
503c18aa
...
...
@@ -30,7 +30,7 @@
*/
import
java.nio.file.*
;
import
static
java
.
nio
.
file
.
StandardWatchEventKind
.*;
import
static
java
.
nio
.
file
.
StandardWatchEventKind
s
.*;
import
static
java
.
nio
.
file
.
LinkOption
.*;
import
java.nio.file.attribute.*
;
import
java.io.IOException
;
...
...
src/share/sample/nio/multicast/Reader.java
浏览文件 @
503c18aa
...
...
@@ -96,7 +96,7 @@ public class Reader {
family
=
StandardProtocolFamily
.
INET6
;
}
DatagramChannel
dc
=
DatagramChannel
.
open
(
family
)
.
setOption
(
StandardSocketOption
.
SO_REUSEADDR
,
true
)
.
setOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
true
)
.
bind
(
new
InetSocketAddress
(
target
.
port
()));
if
(
includeList
.
isEmpty
())
{
...
...
src/share/sample/nio/multicast/Sender.java
浏览文件 @
503c18aa
...
...
@@ -59,7 +59,7 @@ public class Sender {
family
=
StandardProtocolFamily
.
INET6
;
DatagramChannel
dc
=
DatagramChannel
.
open
(
family
).
bind
(
new
InetSocketAddress
(
0
));
if
(
target
.
interf
()
!=
null
)
{
dc
.
setOption
(
StandardSocketOption
.
IP_MULTICAST_IF
,
target
.
interf
());
dc
.
setOption
(
StandardSocketOption
s
.
IP_MULTICAST_IF
,
target
.
interf
());
}
// send multicast packet
...
...
src/solaris/classes/sun/nio/ch/SctpChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -55,7 +55,7 @@ import com.sun.nio.sctp.SctpChannel;
import
com.sun.nio.sctp.SctpSocketOption
;
import
sun.nio.ch.PollArrayWrapper
;
import
sun.nio.ch.SelChImpl
;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
.*;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
s
.*;
import
static
sun
.
nio
.
ch
.
SctpResultContainer
.
SEND_FAILED
;
import
static
sun
.
nio
.
ch
.
SctpResultContainer
.
ASSOCIATION_CHANGED
;
import
static
sun
.
nio
.
ch
.
SctpResultContainer
.
PEER_ADDRESS_CHANGED
;
...
...
src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -53,7 +53,7 @@ import com.sun.nio.sctp.MessageInfo;
import
com.sun.nio.sctp.SctpChannel
;
import
com.sun.nio.sctp.SctpMultiChannel
;
import
com.sun.nio.sctp.SctpSocketOption
;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
.*;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
s
.*;
import
static
sun
.
nio
.
ch
.
SctpResultContainer
.*;
/**
...
...
src/solaris/classes/sun/nio/ch/SctpNet.java
浏览文件 @
503c18aa
...
...
@@ -35,7 +35,7 @@ import java.util.HashSet;
import
java.security.AccessController
;
import
sun.security.action.GetPropertyAction
;
import
com.sun.nio.sctp.SctpSocketOption
;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
.*;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
s
.*;
public
class
SctpNet
{
static
final
String
osName
=
AccessController
.
doPrivileged
(
...
...
src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java
浏览文件 @
503c18aa
...
...
@@ -40,7 +40,7 @@ import com.sun.nio.sctp.IllegalUnbindException;
import
com.sun.nio.sctp.SctpChannel
;
import
com.sun.nio.sctp.SctpServerChannel
;
import
com.sun.nio.sctp.SctpSocketOption
;
import
com.sun.nio.sctp.SctpStandardSocketOption
;
import
com.sun.nio.sctp.SctpStandardSocketOption
s
;
/**
* An implementation of SctpServerChannel
...
...
@@ -386,7 +386,7 @@ public class SctpServerChannelImpl extends SctpServerChannel
private
static
Set
<
SctpSocketOption
<?>>
defaultOptions
()
{
HashSet
<
SctpSocketOption
<?>>
set
=
new
HashSet
<
SctpSocketOption
<?>>(
1
);
set
.
add
(
SctpStandardSocketOption
.
SCTP_INIT_MAXSTREAMS
);
set
.
add
(
SctpStandardSocketOption
s
.
SCTP_INIT_MAXSTREAMS
);
return
Collections
.
unmodifiableSet
(
set
);
}
}
...
...
src/solaris/classes/sun/nio/fs/LinuxWatchService.java
浏览文件 @
503c18aa
...
...
@@ -210,15 +210,15 @@ class LinuxWatchService
int
mask
=
0
;
for
(
WatchEvent
.
Kind
<?>
event:
events
)
{
if
(
event
==
StandardWatchEventKind
.
ENTRY_CREATE
)
{
if
(
event
==
StandardWatchEventKind
s
.
ENTRY_CREATE
)
{
mask
|=
IN_CREATE
|
IN_MOVED_TO
;
continue
;
}
if
(
event
==
StandardWatchEventKind
.
ENTRY_DELETE
)
{
if
(
event
==
StandardWatchEventKind
s
.
ENTRY_DELETE
)
{
mask
|=
IN_DELETE
|
IN_MOVED_FROM
;
continue
;
}
if
(
event
==
StandardWatchEventKind
.
ENTRY_MODIFY
)
{
if
(
event
==
StandardWatchEventKind
s
.
ENTRY_MODIFY
)
{
mask
|=
IN_MODIFY
|
IN_ATTRIB
;
continue
;
}
...
...
@@ -378,17 +378,17 @@ class LinuxWatchService
*/
private
WatchEvent
.
Kind
<?>
maskToEventKind
(
int
mask
)
{
if
((
mask
&
IN_MODIFY
)
>
0
)
return
StandardWatchEventKind
.
ENTRY_MODIFY
;
return
StandardWatchEventKind
s
.
ENTRY_MODIFY
;
if
((
mask
&
IN_ATTRIB
)
>
0
)
return
StandardWatchEventKind
.
ENTRY_MODIFY
;
return
StandardWatchEventKind
s
.
ENTRY_MODIFY
;
if
((
mask
&
IN_CREATE
)
>
0
)
return
StandardWatchEventKind
.
ENTRY_CREATE
;
return
StandardWatchEventKind
s
.
ENTRY_CREATE
;
if
((
mask
&
IN_MOVED_TO
)
>
0
)
return
StandardWatchEventKind
.
ENTRY_CREATE
;
return
StandardWatchEventKind
s
.
ENTRY_CREATE
;
if
((
mask
&
IN_DELETE
)
>
0
)
return
StandardWatchEventKind
.
ENTRY_DELETE
;
return
StandardWatchEventKind
s
.
ENTRY_DELETE
;
if
((
mask
&
IN_MOVED_FROM
)
>
0
)
return
StandardWatchEventKind
.
ENTRY_DELETE
;
return
StandardWatchEventKind
s
.
ENTRY_DELETE
;
return
null
;
}
...
...
@@ -400,7 +400,7 @@ class LinuxWatchService
if
((
mask
&
IN_Q_OVERFLOW
)
>
0
)
{
for
(
Map
.
Entry
<
Integer
,
LinuxWatchKey
>
entry:
wdToKey
.
entrySet
())
{
entry
.
getValue
()
.
signalEvent
(
StandardWatchEventKind
.
OVERFLOW
,
null
);
.
signalEvent
(
StandardWatchEventKind
s
.
OVERFLOW
,
null
);
}
return
;
}
...
...
src/solaris/classes/sun/nio/fs/SolarisWatchService.java
浏览文件 @
503c18aa
...
...
@@ -486,7 +486,7 @@ class SolarisWatchService
void
processDirectoryEvents
(
SolarisWatchKey
key
,
int
mask
)
{
if
((
mask
&
(
FILE_MODIFIED
|
FILE_ATTRIB
))
!=
0
)
{
registerChildren
(
key
.
getDirectory
(),
key
,
key
.
events
().
contains
(
StandardWatchEventKind
.
ENTRY_CREATE
));
key
.
events
().
contains
(
StandardWatchEventKind
s
.
ENTRY_CREATE
));
}
}
...
...
@@ -504,14 +504,14 @@ class SolarisWatchService
// entry modified
if
(((
mask
&
(
FILE_MODIFIED
|
FILE_ATTRIB
))
!=
0
)
&&
events
.
contains
(
StandardWatchEventKind
.
ENTRY_MODIFY
))
events
.
contains
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
))
{
key
.
signalEvent
(
StandardWatchEventKind
.
ENTRY_MODIFY
,
node
.
name
());
key
.
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
,
node
.
name
());
}
// entry removed
if
(((
mask
&
(
FILE_REMOVED
))
!=
0
)
&&
events
.
contains
(
StandardWatchEventKind
.
ENTRY_DELETE
))
events
.
contains
(
StandardWatchEventKind
s
.
ENTRY_DELETE
))
{
// Due to 6636438/6636412 we may get a remove event for cases
// where a rmdir/unlink/rename is attempted but fails. Until
...
...
@@ -527,7 +527,7 @@ class SolarisWatchService
}
catch
(
UnixException
x
)
{
}
if
(
removed
)
key
.
signalEvent
(
StandardWatchEventKind
.
ENTRY_DELETE
,
node
.
name
());
key
.
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_DELETE
,
node
.
name
());
}
return
false
;
}
...
...
@@ -547,7 +547,7 @@ class SolarisWatchService
// if the ENTRY_MODIFY event is not enabled then we don't need
// modification events for entries in the directory
int
events
=
FILE_NOFOLLOW
;
if
(
parent
.
events
().
contains
(
StandardWatchEventKind
.
ENTRY_MODIFY
))
if
(
parent
.
events
().
contains
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
))
events
|=
(
FILE_MODIFIED
|
FILE_ATTRIB
);
DirectoryStream
<
Path
>
stream
=
null
;
...
...
@@ -567,7 +567,7 @@ class SolarisWatchService
// send ENTRY_CREATE if enabled
if
(
sendEvents
)
{
parent
.
signalEvent
(
StandardWatchEventKind
.
ENTRY_CREATE
,
name
);
parent
.
signalEvent
(
StandardWatchEventKind
s
.
ENTRY_CREATE
,
name
);
}
// register it
...
...
@@ -602,12 +602,12 @@ class SolarisWatchService
// update events, rembering if ENTRY_MODIFY was previously
// enabled or disabled.
boolean
wasModifyEnabled
=
key
.
events
()
.
contains
(
StandardWatchEventKind
.
ENTRY_MODIFY
);
.
contains
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
);
key
.
setEvents
(
events
);
// check if ENTRY_MODIFY has changed
boolean
isModifyEnabled
=
events
.
contains
(
StandardWatchEventKind
.
ENTRY_MODIFY
);
.
contains
(
StandardWatchEventKind
s
.
ENTRY_MODIFY
);
if
(
wasModifyEnabled
==
isModifyEnabled
)
{
return
;
}
...
...
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
浏览文件 @
503c18aa
...
...
@@ -892,8 +892,9 @@ Java_sun_nio_fs_UnixNativeDispatcher_getpwuid(JNIEnv* env, jclass this, jint uid
if
(
res
!=
0
||
p
==
NULL
||
p
->
pw_name
==
NULL
||
*
(
p
->
pw_name
)
==
'\0'
)
{
/* not found or error */
if
(
errno
!=
0
&&
errno
!=
ENOENT
)
throwUnixException
(
env
,
errno
);
if
(
errno
==
0
)
errno
=
ENOENT
;
throwUnixException
(
env
,
errno
);
}
else
{
jsize
len
=
strlen
(
p
->
pw_name
);
result
=
(
*
env
)
->
NewByteArray
(
env
,
len
);
...
...
@@ -941,14 +942,14 @@ Java_sun_nio_fs_UnixNativeDispatcher_getgrgid(JNIEnv* env, jclass this, jint gid
retry
=
0
;
if
(
res
!=
0
||
g
==
NULL
||
g
->
gr_name
==
NULL
||
*
(
g
->
gr_name
)
==
'\0'
)
{
/* not found or error */
if
(
errno
!=
0
&&
errno
!=
ENOENT
)
{
if
(
errno
==
ERANGE
)
{
/* insufficient buffer size so need larger buffer */
buflen
+=
ENT_BUF_SIZE
;
retry
=
1
;
}
else
{
throwUnixException
(
env
,
errno
)
;
}
if
(
errno
==
ERANGE
)
{
/* insufficient buffer size so need larger buffer */
buflen
+=
ENT_BUF_SIZE
;
retry
=
1
;
}
else
{
if
(
errno
==
0
)
errno
=
ENOENT
;
throwUnixException
(
env
,
errno
);
}
}
else
{
jsize
len
=
strlen
(
g
->
gr_name
);
...
...
src/windows/classes/sun/nio/fs/WindowsWatchService.java
浏览文件 @
503c18aa
...
...
@@ -464,15 +464,15 @@ class WindowsWatchService
{
switch
(
action
)
{
case
FILE_ACTION_MODIFIED
:
return
StandardWatchEventKind
.
ENTRY_MODIFY
;
return
StandardWatchEventKind
s
.
ENTRY_MODIFY
;
case
FILE_ACTION_ADDED
:
case
FILE_ACTION_RENAMED_NEW_NAME
:
return
StandardWatchEventKind
.
ENTRY_CREATE
;
return
StandardWatchEventKind
s
.
ENTRY_CREATE
;
case
FILE_ACTION_REMOVED
:
case
FILE_ACTION_RENAMED_OLD_NAME
:
return
StandardWatchEventKind
.
ENTRY_DELETE
;
return
StandardWatchEventKind
s
.
ENTRY_DELETE
;
default
:
return
null
;
// action not recognized
...
...
@@ -548,7 +548,7 @@ class WindowsWatchService
if
(
info
.
error
()
!=
0
)
{
// buffer overflow
if
(
info
.
error
()
==
ERROR_NOTIFY_ENUM_DIR
)
{
key
.
signalEvent
(
StandardWatchEventKind
.
OVERFLOW
,
null
);
key
.
signalEvent
(
StandardWatchEventKind
s
.
OVERFLOW
,
null
);
}
else
{
// other error so cancel key
implCancelKey
(
key
);
...
...
@@ -562,7 +562,7 @@ class WindowsWatchService
processEvents
(
key
,
info
.
bytesTransferred
());
}
else
{
// insufficient buffer size
key
.
signalEvent
(
StandardWatchEventKind
.
OVERFLOW
,
null
);
key
.
signalEvent
(
StandardWatchEventKind
s
.
OVERFLOW
,
null
);
}
// start read for next batch of changes
...
...
src/windows/native/sun/security/mscapi/security.cpp
浏览文件 @
503c18aa
...
...
@@ -705,7 +705,7 @@ JNIEXPORT jobject JNICALL Java_sun_security_mscapi_RSAKeyPairGenerator_generateR
HCRYPTPROV
hCryptProv
=
NULL
;
HCRYPTKEY
hKeyPair
;
DWORD
dwFlags
=
(
keySize
<<
16
)
|
CRYPT_EXPORTABLE
;
jobject
keypair
;
jobject
keypair
=
NULL
;
const
char
*
pszKeyContainerName
=
NULL
;
// UUID
__try
...
...
test/ProblemList.txt
浏览文件 @
503c18aa
...
...
@@ -195,6 +195,9 @@ java/beans/XMLEncoder/6329581/Test6329581.java generic-all
# jdk_lang
# requires junit
java/lang/invoke/InvokeDynamicPrintArgs.java generic-all
# Times out on solaris 10 sparc
java/lang/ClassLoader/Assert.java generic-all
...
...
test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java
0 → 100644
浏览文件 @
503c18aa
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7036199
* @summary Check that GarbageCollectionNotification contents are reasonable
* @author Frederic Parain
* @run main/othervm GarbageCollectionNotificationContentTest
*/
import
java.util.*
;
import
java.lang.management.*
;
import
java.lang.reflect.*
;
import
javax.management.*
;
import
javax.management.openmbean.*
;
import
com.sun.management.GarbageCollectionNotificationInfo
;
import
com.sun.management.GcInfo
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
import
java.lang.reflect.Field
;
public
class
GarbageCollectionNotificationContentTest
{
private
static
HashMap
<
String
,
GarbageCollectionNotificationInfo
>
listenerInvoked
=
new
HashMap
<
String
,
GarbageCollectionNotificationInfo
>();
static
volatile
long
count
=
0
;
static
volatile
long
number
=
0
;
static
Object
synchronizer
=
new
Object
();
static
class
GcListener
implements
NotificationListener
{
public
void
handleNotification
(
Notification
notif
,
Object
handback
)
{
String
type
=
notif
.
getType
();
if
(
type
.
equals
(
GarbageCollectionNotificationInfo
.
GARBAGE_COLLECTION_NOTIFICATION
))
{
GarbageCollectionNotificationInfo
gcNotif
=
GarbageCollectionNotificationInfo
.
from
((
CompositeData
)
notif
.
getUserData
());
String
source
=
((
ObjectName
)
notif
.
getSource
()).
getCanonicalName
();
synchronized
(
synchronizer
)
{
if
(
listenerInvoked
.
get
(
source
)
==
null
)
{
listenerInvoked
.
put
(((
ObjectName
)
notif
.
getSource
()).
getCanonicalName
(),
gcNotif
);
count
++;
if
(
count
>=
number
)
{
synchronizer
.
notify
();
}
}
}
}
}
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
MBeanServer
mbs
=
ManagementFactory
.
getPlatformMBeanServer
();
final
Boolean
isNotificationSupported
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Boolean
>()
{
public
Boolean
run
()
{
try
{
Class
cl
=
Class
.
forName
(
"sun.management.VMManagementImpl"
);
Field
f
=
cl
.
getDeclaredField
(
"gcNotificationSupport"
);
f
.
setAccessible
(
true
);
return
f
.
getBoolean
(
null
);
}
catch
(
ClassNotFoundException
e
)
{
return
false
;
}
catch
(
NoSuchFieldException
e
)
{
return
false
;
}
catch
(
IllegalAccessException
e
)
{
return
false
;
}
}
});
if
(!
isNotificationSupported
)
{
System
.
out
.
println
(
"GC Notification not supported by the JVM, test skipped"
);
return
;
}
final
ObjectName
gcMXBeanPattern
=
new
ObjectName
(
"java.lang:type=GarbageCollector,*"
);
Set
<
ObjectName
>
names
=
mbs
.
queryNames
(
gcMXBeanPattern
,
null
);
if
(
names
.
isEmpty
())
throw
new
Exception
(
"Test incorrect: no GC MXBeans"
);
number
=
names
.
size
();
for
(
ObjectName
n
:
names
)
{
if
(
mbs
.
isInstanceOf
(
n
,
"javax.management.NotificationEmitter"
))
{
listenerInvoked
.
put
(
n
.
getCanonicalName
(),
null
);
GcListener
listener
=
new
GcListener
();
mbs
.
addNotificationListener
(
n
,
listener
,
null
,
null
);
}
}
// Invocation of System.gc() to trigger major GC
System
.
gc
();
// Allocation of many short living and small objects to trigger minor GC
Object
data
[]
=
new
Object
[
32
];
for
(
int
i
=
0
;
i
<
100000000
;
i
++)
{
data
[
i
%
32
]
=
new
int
[
8
];
}
int
wakeup
=
0
;
synchronized
(
synchronizer
)
{
while
(
count
!=
number
)
{
synchronizer
.
wait
(
10000
);
wakeup
++;
if
(
wakeup
>
10
)
break
;
}
}
for
(
GarbageCollectionNotificationInfo
notif
:
listenerInvoked
.
values
()
)
{
checkGarbageCollectionNotificationInfoContent
(
notif
);
}
System
.
out
.
println
(
"Test passed"
);
}
private
static
void
checkGarbageCollectionNotificationInfoContent
(
GarbageCollectionNotificationInfo
notif
)
throws
Exception
{
System
.
out
.
println
(
"GC notification for "
+
notif
.
getGcName
());
System
.
out
.
print
(
"Action: "
+
notif
.
getGcAction
());
System
.
out
.
println
(
" Cause: "
+
notif
.
getGcCause
());
GcInfo
info
=
notif
.
getGcInfo
();
System
.
out
.
print
(
"GC Info #"
+
info
.
getId
());
System
.
out
.
print
(
" start:"
+
info
.
getStartTime
());
System
.
out
.
print
(
" end:"
+
info
.
getEndTime
());
System
.
out
.
println
(
" ("
+
info
.
getDuration
()
+
"ms)"
);
Map
<
String
,
MemoryUsage
>
usage
=
info
.
getMemoryUsageBeforeGc
();
List
<
String
>
pnames
=
new
ArrayList
<
String
>();
for
(
Map
.
Entry
entry
:
usage
.
entrySet
()
)
{
String
poolname
=
(
String
)
entry
.
getKey
();
pnames
.
add
(
poolname
);
MemoryUsage
busage
=
(
MemoryUsage
)
entry
.
getValue
();
MemoryUsage
ausage
=
(
MemoryUsage
)
info
.
getMemoryUsageAfterGc
().
get
(
poolname
);
if
(
ausage
==
null
)
{
throw
new
RuntimeException
(
"After Gc Memory does not exist"
+
" for "
+
poolname
);
}
System
.
out
.
println
(
"Usage for pool "
+
poolname
);
System
.
out
.
println
(
" Before GC: "
+
busage
);
System
.
out
.
println
(
" After GC: "
+
ausage
);
}
// check if memory usage for all memory pools are returned
List
<
MemoryPoolMXBean
>
pools
=
ManagementFactory
.
getMemoryPoolMXBeans
();
for
(
MemoryPoolMXBean
p
:
pools
)
{
if
(!
pnames
.
contains
(
p
.
getName
()))
{
throw
new
RuntimeException
(
"GcInfo does not contain "
+
"memory usage for pool "
+
p
.
getName
());
}
}
}
}
test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java
0 → 100644
浏览文件 @
503c18aa
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7036199
* @summary Check that GarbageCollection notification are thrown by every GarbageCollectorMXBean
* @author Frederic Parain
* @run main/othervm GarbageCollectionNotificationTest
*/
import
java.util.*
;
import
java.lang.management.*
;
import
java.lang.reflect.*
;
import
javax.management.*
;
import
javax.management.openmbean.*
;
import
com.sun.management.GarbageCollectionNotificationInfo
;
import
com.sun.management.GcInfo
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
import
java.lang.reflect.Field
;
public
class
GarbageCollectionNotificationTest
{
private
static
HashMap
<
String
,
Boolean
>
listenerInvoked
=
new
HashMap
<
String
,
Boolean
>();
static
volatile
long
count
=
0
;
static
volatile
long
number
=
0
;
static
Object
synchronizer
=
new
Object
();
static
class
GcListener
implements
NotificationListener
{
public
void
handleNotification
(
Notification
notif
,
Object
handback
)
{
String
type
=
notif
.
getType
();
if
(
type
.
equals
(
GarbageCollectionNotificationInfo
.
GARBAGE_COLLECTION_NOTIFICATION
))
{
GarbageCollectionNotificationInfo
gcNotif
=
GarbageCollectionNotificationInfo
.
from
((
CompositeData
)
notif
.
getUserData
());
String
source
=
((
ObjectName
)
notif
.
getSource
()).
getCanonicalName
();
synchronized
(
synchronizer
)
{
if
(!
listenerInvoked
.
get
(
source
))
{
listenerInvoked
.
put
(((
ObjectName
)
notif
.
getSource
()).
getCanonicalName
(),
true
);
count
++;
if
(
count
>=
number
)
{
synchronizer
.
notify
();
}
}
}
}
}
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
MBeanServer
mbs
=
ManagementFactory
.
getPlatformMBeanServer
();
final
Boolean
isNotificationSupported
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Boolean
>()
{
public
Boolean
run
()
{
try
{
Class
cl
=
Class
.
forName
(
"sun.management.VMManagementImpl"
);
Field
f
=
cl
.
getDeclaredField
(
"gcNotificationSupport"
);
f
.
setAccessible
(
true
);
return
f
.
getBoolean
(
null
);
}
catch
(
ClassNotFoundException
e
)
{
return
false
;
}
catch
(
NoSuchFieldException
e
)
{
return
false
;
}
catch
(
IllegalAccessException
e
)
{
return
false
;
}
}
});
if
(!
isNotificationSupported
)
{
System
.
out
.
println
(
"GC Notification not supported by the JVM, test skipped"
);
return
;
}
final
ObjectName
gcMXBeanPattern
=
new
ObjectName
(
"java.lang:type=GarbageCollector,*"
);
Set
<
ObjectName
>
names
=
mbs
.
queryNames
(
gcMXBeanPattern
,
null
);
if
(
names
.
isEmpty
())
throw
new
Exception
(
"Test incorrect: no GC MXBeans"
);
number
=
names
.
size
();
for
(
ObjectName
n
:
names
)
{
if
(
mbs
.
isInstanceOf
(
n
,
"javax.management.NotificationEmitter"
))
{
listenerInvoked
.
put
(
n
.
getCanonicalName
(),
false
);
GcListener
listener
=
new
GcListener
();
mbs
.
addNotificationListener
(
n
,
listener
,
null
,
null
);
}
}
// Invocation of System.gc() to trigger major GC
System
.
gc
();
// Allocation of many short living and small objects to trigger minor GC
Object
data
[]
=
new
Object
[
32
];
for
(
int
i
=
0
;
i
<
100000000
;
i
++)
{
data
[
i
%
32
]
=
new
int
[
8
];
}
int
wakeup
=
0
;
synchronized
(
synchronizer
)
{
while
(
count
!=
number
)
{
synchronizer
.
wait
(
10000
);
wakeup
++;
if
(
wakeup
>
10
)
break
;
}
}
for
(
String
source
:
listenerInvoked
.
keySet
())
{
if
(!
listenerInvoked
.
get
(
source
))
throw
new
Exception
(
"Test incorrect: notifications have not been sent for "
+
source
);
}
System
.
out
.
println
(
"Test passed"
);
}
}
test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java
浏览文件 @
503c18aa
...
...
@@ -40,7 +40,7 @@ import com.sun.nio.sctp.SctpServerChannel;
import
com.sun.nio.sctp.SctpSocketOption
;
import
java.security.AccessController
;
import
sun.security.action.GetPropertyAction
;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
.*;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
s
.*;
import
static
java
.
lang
.
System
.
out
;
public
class
SocketOptionTests
{
...
...
test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java
浏览文件 @
503c18aa
...
...
@@ -48,7 +48,7 @@ import com.sun.nio.sctp.SctpServerChannel;
import
com.sun.nio.sctp.SctpSocketOption
;
import
java.security.AccessController
;
import
sun.security.action.GetPropertyAction
;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
.*;
import
static
com
.
sun
.
nio
.
sctp
.
SctpStandardSocketOption
s
.*;
import
static
java
.
lang
.
System
.
out
;
public
class
SocketOptionTests
{
...
...
test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java
浏览文件 @
503c18aa
...
...
@@ -29,7 +29,7 @@
import
java.nio.channels.*
;
import
java.net.*
;
import
static
java
.
net
.
StandardSocketOption
.*;
import
static
java
.
net
.
StandardSocketOption
s
.*;
import
java.io.IOException
;
import
java.util.Set
;
import
java.util.concurrent.ExecutionException
;
...
...
test/java/nio/channels/AsynchronousSocketChannel/Basic.java
浏览文件 @
503c18aa
...
...
@@ -29,7 +29,7 @@
import
java.nio.ByteBuffer
;
import
java.nio.channels.*
;
import
static
java
.
net
.
StandardSocketOption
.*;
import
static
java
.
net
.
StandardSocketOption
s
.*;
import
java.net.*
;
import
java.util.Random
;
import
java.util.concurrent.*
;
...
...
@@ -383,7 +383,7 @@ public class Basic {
// write bytes and close connection
SocketChannel
sc
=
server
.
accept
();
ByteBuffer
src
=
genBuffer
();
sc
.
setOption
(
StandardSocketOption
.
SO_SNDBUF
,
src
.
remaining
());
sc
.
setOption
(
StandardSocketOption
s
.
SO_SNDBUF
,
src
.
remaining
());
while
(
src
.
hasRemaining
())
sc
.
write
(
src
);
sc
.
close
();
...
...
test/java/nio/channels/DatagramChannel/BasicMulticastTests.java
浏览文件 @
503c18aa
...
...
@@ -52,7 +52,7 @@ public class BasicMulticastTests {
StandardProtocolFamily
.
INET
:
StandardProtocolFamily
.
INET6
;
DatagramChannel
dc
=
DatagramChannel
.
open
(
family
)
.
setOption
(
StandardSocketOption
.
SO_REUSEADDR
,
true
)
.
setOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
true
)
.
bind
(
new
InetSocketAddress
(
source
,
0
));
// check existing key is returned
...
...
@@ -115,7 +115,7 @@ public class BasicMulticastTests {
System
.
out
.
println
(
"Exception Tests"
);
DatagramChannel
dc
=
DatagramChannel
.
open
(
StandardProtocolFamily
.
INET
)
.
setOption
(
StandardSocketOption
.
SO_REUSEADDR
,
true
)
.
setOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
true
)
.
bind
(
new
InetSocketAddress
(
0
));
InetAddress
group
=
InetAddress
.
getByName
(
"225.4.5.6"
);
...
...
test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java
浏览文件 @
503c18aa
...
...
@@ -59,7 +59,7 @@ public class MulticastSendReceiveTests {
StandardProtocolFamily
.
INET6
:
StandardProtocolFamily
.
INET
;
DatagramChannel
dc
=
DatagramChannel
.
open
(
family
)
.
bind
(
new
InetSocketAddress
(
local
,
0
))
.
setOption
(
StandardSocketOption
.
IP_MULTICAST_IF
,
nif
);
.
setOption
(
StandardSocketOption
s
.
IP_MULTICAST_IF
,
nif
);
int
id
=
rand
.
nextInt
();
byte
[]
msg
=
Integer
.
toString
(
id
).
getBytes
(
"UTF-8"
);
ByteBuffer
buf
=
ByteBuffer
.
wrap
(
msg
);
...
...
@@ -146,7 +146,7 @@ public class MulticastSendReceiveTests {
System
.
out
.
format
(
"\nTest DatagramChannel to %s socket\n"
,
family
.
name
());
try
(
DatagramChannel
dc
=
(
family
==
UNSPEC
)
?
DatagramChannel
.
open
()
:
DatagramChannel
.
open
(
family
))
{
dc
.
setOption
(
StandardSocketOption
.
SO_REUSEADDR
,
true
)
dc
.
setOption
(
StandardSocketOption
s
.
SO_REUSEADDR
,
true
)
.
bind
(
new
InetSocketAddress
(
0
));
// join group
...
...
test/java/nio/channels/DatagramChannel/SocketOptionTests.java
浏览文件 @
503c18aa
...
...
@@ -31,7 +31,7 @@ import java.nio.channels.*;
import
java.net.*
;
import
java.io.IOException
;
import
java.util.*
;
import
static
java
.
net
.
StandardSocketOption
.*;
import
static
java
.
net
.
StandardSocketOption
s
.*;
public
class
SocketOptionTests
{
...
...
test/java/nio/channels/FileChannel/ClosedByInterrupt.java
浏览文件 @
503c18aa
...
...
@@ -52,13 +52,16 @@ public class ClosedByInterrupt {
fc
.
write
(
bb
);
}
// test with 1-
8
concurrent threads
for
(
int
i
=
1
;
i
<=
8
;
i
++)
{
// test with 1-
16
concurrent threads
for
(
int
i
=
1
;
i
<=
16
;
i
++)
{
System
.
out
.
format
(
"%d thread(s)%n"
,
i
);
test
(
f
,
i
);
if
(
failed
)
break
;
}
if
(
failed
)
throw
new
RuntimeException
(
"Test failed"
);
}
/**
...
...
@@ -132,12 +135,14 @@ public class ClosedByInterrupt {
// give the interruptible thread a chance
try
{
Thread
.
sleep
(
rand
.
nextInt
(
50
));
}
catch
(
InterruptedException
ignore
)
{
}
}
catch
(
InterruptedException
e
)
{
unexpected
(
e
);
}
}
}
}
catch
(
ClosedByInterruptException
e
)
{
if
(
interruptible
)
{
if
(
Thread
.
currentThread
().
isI
nterrupted
())
{
if
(
Thread
.
i
nterrupted
())
{
expected
(
e
+
" thrown and interrupt status set"
);
}
else
{
unexpected
(
e
+
" thrown but interrupt status not set"
);
...
...
@@ -158,7 +163,7 @@ public class ClosedByInterrupt {
}
static
void
expected
(
Exception
e
)
{
System
.
out
.
format
(
"%s (
not
expected)%n"
,
e
);
System
.
out
.
format
(
"%s (expected)%n"
,
e
);
}
static
void
expected
(
String
msg
)
{
...
...
test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java
浏览文件 @
503c18aa
...
...
@@ -32,7 +32,7 @@ import java.nio.channels.*;
import
java.net.*
;
import
java.io.IOException
;
import
java.util.*
;
import
static
java
.
net
.
StandardSocketOption
.*;
import
static
java
.
net
.
StandardSocketOption
s
.*;
public
class
SocketOptionTests
{
...
...
test/java/nio/channels/SocketChannel/Shutdown.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/channels/SocketChannel/SocketOptionTests.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/charset/StandardCharset/Standard.java
→
test/java/nio/charset/StandardCharset
s
/Standard.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/file/Files/CheckPermissions.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/file/WatchService/Basic.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/file/WatchService/FileTreeModifier.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/file/WatchService/LotsOfEvents.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/file/WatchService/SensitivityModifier.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/nio/file/WatchService/WithSecurityManager.java
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/util/logging/LoggingDeadlock3.java
0 → 100644
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/util/logging/LoggingDeadlock3.props
0 → 100644
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/java/util/logging/LoggingDeadlock4.java
0 → 100644
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
test/javax/management/timer/StartTest.java
0 → 100644
浏览文件 @
503c18aa
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录