Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
a4ede8d6
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a4ede8d6
编写于
4月 18, 2013
作者:
K
kevinw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7109087: gc/7072527/TestFullGCCount.java fails when GC is set in command-line
Reviewed-by: mgerdin
上级
116591f9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
46 deletion
+42
-46
hotspot/test/gc/7072527/TestFullGCCount.java
hotspot/test/gc/7072527/TestFullGCCount.java
+42
-46
未找到文件。
hotspot/test/gc/7072527/TestFullGCCount.java
浏览文件 @
a4ede8d6
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011,
2013,
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
...
...
@@ -25,71 +25,67 @@
* @test TestFullGCount.java
* @bug 7072527
* @summary CMS: JMM GC counters overcount in some cases
* @run main/othervm -XX:+UseConcMarkSweepGC TestFullGCCount
*
* @run main/othervm -XX:+PrintGC TestFullGCCount
*/
import
java.util.*
;
import
java.lang.management.*
;
/*
* Originally for a specific failure in CMS, this test now monitors all
* collectors for double-counting of collections.
*/
public
class
TestFullGCCount
{
public
String
collectorName
=
"ConcurrentMarkSweep"
;
static
List
<
GarbageCollectorMXBean
>
collectors
=
ManagementFactory
.
getGarbageCollectorMXBeans
()
;
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
int
iterations
=
20
;
boolean
failed
=
false
;
String
errorMessage
=
""
;
HashMap
<
String
,
List
>
counts
=
new
HashMap
<
String
,
List
>();
TestFullGCCount
t
=
null
;
if
(
args
.
length
==
2
)
{
t
=
new
TestFullGCCount
(
args
[
0
],
args
[
1
]);
}
else
{
t
=
new
TestFullGCCount
();
// Prime the collection of count lists for all collectors.
for
(
int
i
=
0
;
i
<
collectors
.
size
();
i
++)
{
GarbageCollectorMXBean
collector
=
collectors
.
get
(
i
);
counts
.
put
(
collector
.
getName
(),
new
ArrayList
<
Long
>(
iterations
));
}
System
.
out
.
println
(
"Monitoring collector: "
+
t
.
collectorName
);
t
.
run
();
}
public
TestFullGCCount
(
String
pool
,
String
collector
)
{
collectorName
=
collector
;
}
public
TestFullGCCount
()
{
}
// Perform some gc, record collector counts.
for
(
int
i
=
0
;
i
<
iterations
;
i
++)
{
System
.
gc
();
addCollectionCount
(
counts
,
i
);
}
public
void
run
()
{
int
count
=
0
;
int
iterations
=
20
;
long
counts
[]
=
new
long
[
iterations
];
boolean
diffAlways2
=
true
;
// assume we will fail
// Check the increments:
// Old gen collectors should increase by one,
// New collectors may or may not increase.
// Any increase >=2 is unexpected.
for
(
String
collector
:
counts
.
keySet
())
{
System
.
out
.
println
(
"Checking: "
+
collector
);
for
(
int
i
=
0
;
i
<
iterations
;
i
++)
{
System
.
gc
();
counts
[
i
]
=
getCollectionCount
();
if
(
i
>
0
)
{
if
(
counts
[
i
]
-
counts
[
i
-
1
]
!=
2
)
{
diffAlways2
=
false
;
for
(
int
i
=
0
;
i
<
iterations
-
1
;
i
++)
{
List
<
Long
>
theseCounts
=
counts
.
get
(
collector
);
long
a
=
theseCounts
.
get
(
i
);
long
b
=
theseCounts
.
get
(
i
+
1
);
if
(
b
-
a
>=
2
)
{
failed
=
true
;
errorMessage
+=
"Collector '"
+
collector
+
"' has increment "
+
(
b
-
a
)
+
" at iteration "
+
i
+
"\n"
;
}
}
}
if
(
diffAlways2
)
{
throw
new
RuntimeException
(
"FAILED: System.gc must be incrementing count twice."
);
if
(
failed
)
{
System
.
err
.
println
(
errorMessage
);
throw
new
RuntimeException
(
"FAILED: System.gc collections miscounted."
);
}
System
.
out
.
println
(
"Passed."
);
}
private
long
getCollectionCount
()
{
long
count
=
0
;
List
<
MemoryPoolMXBean
>
pools
=
ManagementFactory
.
getMemoryPoolMXBeans
();
List
<
GarbageCollectorMXBean
>
collectors
=
ManagementFactory
.
getGarbageCollectorMXBeans
();
for
(
int
i
=
0
;
i
<
collectors
.
size
();
i
++)
{
private
static
void
addCollectionCount
(
HashMap
<
String
,
List
>
counts
,
int
iteration
)
{
for
(
int
i
=
0
;
i
<
collectors
.
size
();
i
++)
{
GarbageCollectorMXBean
collector
=
collectors
.
get
(
i
);
String
name
=
collector
.
getName
();
if
(
name
.
contains
(
collectorName
))
{
System
.
out
.
println
(
name
+
": collection count = "
+
collector
.
getCollectionCount
());
count
=
collector
.
getCollectionCount
();
}
List
thisList
=
counts
.
get
(
collector
.
getName
());
thisList
.
add
(
collector
.
getCollectionCount
());
}
return
count
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录