Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
1026945b
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看板
提交
1026945b
编写于
12月 04, 2013
作者:
M
mfang
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
ed234e2f
8ae4714a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
32 addition
and
201 deletion
+32
-201
test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java
...ang/management/MemoryMXBean/CollectionUsageThreshold.java
+32
-44
test/java/lang/management/MemoryMXBean/CollectionUsageThresholdConcMarkSweepGC.sh
...t/MemoryMXBean/CollectionUsageThresholdConcMarkSweepGC.sh
+0
-53
test/java/lang/management/MemoryMXBean/CollectionUsageThresholdParallelGC.sh
...gement/MemoryMXBean/CollectionUsageThresholdParallelGC.sh
+0
-52
test/java/lang/management/MemoryMXBean/CollectionUsageThresholdSerialGC.sh
...nagement/MemoryMXBean/CollectionUsageThresholdSerialGC.sh
+0
-52
未找到文件。
test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java
浏览文件 @
1026945b
/*
* Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
3
, 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
...
...
@@ -31,44 +31,45 @@
* @author Mandy Chung
*
* @build CollectionUsageThreshold MemoryUtil
* @run main/timeout=300 CollectionUsageThreshold
* @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseSerialGC CollectionUsageThreshold
* @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseParallelGC CollectionUsageThreshold
* @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseG1GC CollectionUsageThreshold
* @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC CollectionUsageThreshold
*/
import
java.lang.Thread.*
;
import
java.lang.management.*
;
import
java.util.*
;
import
java.util.concurrent.*
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
javax.management.*
;
import
javax.management.openmbean.CompositeData
;
import
java.lang.management.*
;
import
static
java
.
lang
.
management
.
MemoryNotificationInfo
.*;;
import
static
java
.
lang
.
management
.
ManagementFactory
.*;
public
class
CollectionUsageThreshold
{
private
static
MemoryMXBean
mm
=
ManagementFactory
.
getMemoryMXBean
();
private
static
List
<
MemoryPoolMXBean
>
pools
=
ManagementFactory
.
getMemoryPoolMXBeans
();
private
static
List
<
MemoryManagerMXBean
>
managers
=
ManagementFactory
.
getMemoryManagerMXBeans
();
private
static
Map
<
String
,
PoolRecord
>
result
=
new
HashMap
<>();
private
static
final
MemoryMXBean
mm
=
getMemoryMXBean
();
private
static
final
Map
<
String
,
PoolRecord
>
result
=
new
HashMap
<>();
private
static
boolean
trace
=
false
;
private
static
boolean
testFailed
=
false
;
private
static
int
numMemoryPools
=
1
;
private
static
volatile
int
numMemoryPools
=
1
;
private
static
final
int
NUM_GCS
=
3
;
private
static
final
int
THRESHOLD
=
10
;
private
static
Checker
checker
;
private
static
int
numGCs
=
0
;
private
static
volatile
int
numGCs
=
0
;
// semaphore to signal the arrival of a low memory notification
private
static
Semaphore
signals
=
new
Semaphore
(
0
);
private
static
final
Semaphore
signals
=
new
Semaphore
(
0
);
// barrier for the main thread to wait until the checker thread
// finishes checking the low memory notification result
private
static
CyclicBarrier
barrier
=
new
CyclicBarrier
(
2
);
private
static
final
CyclicBarrier
barrier
=
new
CyclicBarrier
(
2
);
static
class
PoolRecord
{
private
MemoryPoolMXBean
pool
;
private
int
listenerInvoked
=
0
;
private
long
notifCount
=
0
;
private
final
MemoryPoolMXBean
pool
;
private
final
AtomicInteger
listenerInvoked
=
new
AtomicInteger
(
0
)
;
private
volatile
long
notifCount
=
0
;
PoolRecord
(
MemoryPoolMXBean
p
)
{
this
.
pool
=
p
;
}
int
getListenerInvokedCount
()
{
return
listenerInvoked
;
return
listenerInvoked
.
get
()
;
}
long
getNotifCount
()
{
return
notifCount
;
...
...
@@ -77,18 +78,17 @@ public class CollectionUsageThreshold {
return
pool
;
}
void
addNotification
(
MemoryNotificationInfo
minfo
)
{
listenerInvoked
++
;
listenerInvoked
.
incrementAndGet
()
;
notifCount
=
minfo
.
getCount
();
}
}
static
class
SensorListener
implements
NotificationListener
{
private
int
numNotifs
=
0
;
@Override
public
void
handleNotification
(
Notification
notif
,
Object
handback
)
{
String
type
=
notif
.
getType
();
if
(
type
.
equals
(
MemoryNotificationInfo
.
MEMORY_THRESHOLD_EXCEEDED
)
||
type
.
equals
(
MemoryNotificationInfo
.
MEMORY_COLLECTION_THRESHOLD_EXCEEDED
))
{
if
(
MEMORY_THRESHOLD_EXCEEDED
.
equals
(
type
)
||
MEMORY_COLLECTION_THRESHOLD_EXCEEDED
.
equals
(
type
))
{
MemoryNotificationInfo
minfo
=
MemoryNotificationInfo
.
from
((
CompositeData
)
notif
.
getUserData
());
...
...
@@ -98,28 +98,26 @@ public class CollectionUsageThreshold {
throw
new
RuntimeException
(
"Pool "
+
minfo
.
getPoolName
()
+
" is not selected"
);
}
if
(
type
!=
MemoryNotificationInfo
.
MEMORY_COLLECTION_THRESHOLD_EXCEEDED
)
{
if
(!
MEMORY_COLLECTION_THRESHOLD_EXCEEDED
.
equals
(
type
))
{
throw
new
RuntimeException
(
"Pool "
+
minfo
.
getPoolName
()
+
" got unexpected notification type: "
+
type
);
}
pr
.
addNotification
(
minfo
);
synchronized
(
this
)
{
System
.
out
.
println
(
"notifying the checker thread to check result"
);
numNotifs
++;
signals
.
release
();
}
System
.
out
.
println
(
"notifying the checker thread to check result"
);
signals
.
release
();
}
}
}
private
static
long
newThreshold
;
public
static
void
main
(
String
args
[])
throws
Exception
{
if
(
args
.
length
>
0
&&
args
[
0
].
equals
(
"trace"
))
{
trace
=
true
;
}
List
<
MemoryPoolMXBean
>
pools
=
getMemoryPoolMXBeans
();
List
<
MemoryManagerMXBean
>
managers
=
getMemoryManagerMXBeans
();
if
(
trace
)
{
MemoryUtil
.
printMemoryPools
(
pools
);
MemoryUtil
.
printMemoryManagers
(
managers
);
...
...
@@ -127,7 +125,6 @@ public class CollectionUsageThreshold {
// Find the Old generation which supports low memory detection
for
(
MemoryPoolMXBean
p
:
pools
)
{
MemoryUsage
u
=
p
.
getUsage
();
if
(
p
.
isUsageThresholdSupported
()
&&
p
.
isCollectionUsageThresholdSupported
())
{
if
(
p
.
getName
().
toLowerCase
().
contains
(
"perm"
))
{
// if we have a "perm gen" pool increase the number of expected
...
...
@@ -149,7 +146,7 @@ public class CollectionUsageThreshold {
// This test creates a checker thread responsible for checking
// the low memory notifications. It blocks until a permit
// from the signals semaphore is available.
checker
=
new
Checker
(
"Checker thread"
);
Checker
checker
=
new
Checker
(
"Checker thread"
);
checker
.
setDaemon
(
true
);
checker
.
start
();
...
...
@@ -182,12 +179,7 @@ public class CollectionUsageThreshold {
pr
.
getPool
().
setCollectionUsageThreshold
(
0
);
}
}
if
(
testFailed
)
throw
new
RuntimeException
(
"TEST FAILED."
);
System
.
out
.
println
(
"Test passed."
);
}
...
...
@@ -205,20 +197,16 @@ public class CollectionUsageThreshold {
}
static
class
Checker
extends
Thread
{
private
boolean
checkerReady
=
false
;
private
int
waiters
=
0
;
private
boolean
readyToCheck
=
false
;
Checker
(
String
name
)
{
super
(
name
);
};
@Override
public
void
run
()
{
while
(
true
)
{
try
{
signals
.
acquire
(
numMemoryPools
);
checkResult
();
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
catch
(
BrokenBarrierException
e
)
{
}
catch
(
InterruptedException
|
BrokenBarrierException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
...
...
test/java/lang/management/MemoryMXBean/CollectionUsageThresholdConcMarkSweepGC.sh
已删除
100644 → 0
浏览文件 @
ed234e2f
#
# Copyright (c) 2003, 2010, 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 4959889
# @summary Test CollectionUsageThreshold with concurrent marksweep collector
# @author Mandy Chung
#
# @ignore 6982965
# @run build CollectionUsageThreshold
# @run shell/timeout=300 CollectionUsageThresholdConcMarkSweepGC.sh
#
#Set appropriate jdk
if
[
!
-z
"
${
TESTJAVA
}
"
]
;
then
jdk
=
"
$TESTJAVA
"
else
echo
"--Error: TESTJAVA must be defined as the pathname of a jdk to test."
exit
1
fi
runOne
()
{
echo
"runOne
$@
"
$TESTJAVA
/bin/java
${
TESTVMOPTS
}
-classpath
$TESTCLASSES
$@
||
exit
2
}
# Test CollectionUsageThreshold with concurrent collector
runOne
-XX
:+UseConcMarkSweepGC CollectionUsageThreshold
exit
0
test/java/lang/management/MemoryMXBean/CollectionUsageThresholdParallelGC.sh
已删除
100644 → 0
浏览文件 @
ed234e2f
#
# Copyright (c) 2003, 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 4959889
# @summary Test CollectionUsageThreshold with parallel collector
# @author Mandy Chung
#
# @run build CollectionUsageThreshold
# @run shell/timeout=300 CollectionUsageThresholdParallelGC.sh
#
#Set appropriate jdk
if
[
!
-z
"
${
TESTJAVA
}
"
]
;
then
jdk
=
"
$TESTJAVA
"
else
echo
"--Error: TESTJAVA must be defined as the pathname of a jdk to test."
exit
1
fi
runOne
()
{
echo
"runOne
$@
"
$TESTJAVA
/bin/java
${
TESTVMOPTS
}
-classpath
$TESTCLASSES
$@
||
exit
2
}
# Test CollectionUsageThreshold with parallel collector
runOne
-XX
:+UseParallelGC CollectionUsageThreshold
exit
0
test/java/lang/management/MemoryMXBean/CollectionUsageThresholdSerialGC.sh
已删除
100644 → 0
浏览文件 @
ed234e2f
#
# Copyright (c) 2003, 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 4959889
# @summary Test CollectionUsageThreshold with serial collector
# @author Mandy Chung
#
# @run build CollectionUsageThreshold
# @run shell/timeout=300 CollectionUsageThresholdSerialGC.sh
#
#Set appropriate jdk
if
[
!
-z
"
${
TESTJAVA
}
"
]
;
then
jdk
=
"
$TESTJAVA
"
else
echo
"--Error: TESTJAVA must be defined as the pathname of a jdk to test."
exit
1
fi
runOne
()
{
echo
"runOne
$@
"
$TESTJAVA
/bin/java
${
TESTVMOPTS
}
-classpath
$TESTCLASSES
$@
||
exit
2
}
# Test CollectionUsageThreshold with serial collector
runOne
-XX
:+UseSerialGC CollectionUsageThreshold
exit
0
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录