Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
9b3baa49
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9b3baa49
编写于
2月 22, 2016
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
aaf6d795
cfe9f392
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
148 addition
and
0 deletion
+148
-0
.hgtags
.hgtags
+2
-0
test/gc/TestSoftReferencesBehaviorOnOOME.java
test/gc/TestSoftReferencesBehaviorOnOOME.java
+146
-0
未找到文件。
.hgtags
浏览文件 @
9b3baa49
...
...
@@ -819,6 +819,7 @@ ca3b8c8e390ab0540b0cc2e5def869b38e460d86 jdk8u75-b01
916712f178c39d0acbc590f38802133fc86a7346 jdk8u75-b06
8c791dd1c24d85ebd18b03d49185c2a25263c129 jdk8u75-b07
e4a935cb6f7178912fd653e2a9514eadec7935ab jdk8u75-b08
e97c45c377eb8d022cfe24b73737fa312107e0a5 jdk8u75-b09
d7b01fb81aa8a5437cb03bc36afe15cf0e55fb89 jdk8u76-b00
c1679cc87ba045219169cabb6b9b378c2b5cc578 jdk8u76-b01
218483967e52b419d885d34af4488a81c5133804 jdk8u76-b02
...
...
@@ -828,3 +829,4 @@ c1679cc87ba045219169cabb6b9b378c2b5cc578 jdk8u76-b01
6449ee3bf707225372709ac830524c00984c601f jdk8u76-b06
7d1074c74d6000ec8257917ebfcee3fed4249f7d jdk8u76-b07
392f8722fc513e28f78c5c563d51af7dc8466b29 jdk8u76-b08
3bf0f5b8a892defd0bf9731b4e15926881fcda74 jdk8u76-b09
test/gc/TestSoftReferencesBehaviorOnOOME.java
0 → 100644
浏览文件 @
9b3baa49
/*
* Copyright (c) 2014 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 TestSoftReferencesBehaviorOnOOME
* @key gc
* @summary Tests that all SoftReferences has been cleared at time of OOM.
* @library /testlibrary
* @build TestSoftReferencesBehaviorOnOOME
* @run main/othervm -Xmx128m TestSoftReferencesBehaviorOnOOME 512 2k
* @run main/othervm -Xmx128m TestSoftReferencesBehaviorOnOOME 128k 256k
* @run main/othervm -Xmx128m TestSoftReferencesBehaviorOnOOME 2k 32k 10
*/
import
java.util.*
;
import
com.oracle.java.testlibrary.Utils
;
import
java.lang.ref.SoftReference
;
import
java.util.LinkedList
;
public
class
TestSoftReferencesBehaviorOnOOME
{
private
static
final
Random
rndGenerator
=
new
Random
();
public
static
void
main
(
String
[]
args
)
{
int
semiRefAllocFrequency
=
DEFAULT_FREQUENCY
;
long
minSize
=
DEFAULT_MIN_SIZE
,
maxSize
=
DEFAULT_MAX_SIZE
;
if
(
args
.
length
>=
3
)
{
semiRefAllocFrequency
=
Integer
.
parseInt
(
args
[
2
]);
}
if
(
args
.
length
>=
2
)
{
maxSize
=
getBytesCount
(
args
[
1
]);
}
if
(
args
.
length
>=
1
)
{
minSize
=
getBytesCount
(
args
[
0
]);
}
new
TestSoftReferencesBehaviorOnOOME
().
softReferencesOom
(
minSize
,
maxSize
,
semiRefAllocFrequency
);
}
/**
* Test that all SoftReferences has been cleared at time of OOM.
*/
void
softReferencesOom
(
long
minSize
,
long
maxSize
,
int
semiRefAllocFrequency
)
{
System
.
out
.
format
(
"minSize = %d, maxSize = %d, freq = %d%n"
,
minSize
,
maxSize
,
semiRefAllocFrequency
);
long
counter
=
0
;
long
multiplier
=
maxSize
-
minSize
;
LinkedList
<
SoftReference
>
arrSoftRefs
=
new
LinkedList
();
LinkedList
arrObjects
=
new
LinkedList
();
long
numberOfNotNulledObjects
=
0
;
long
oomSoftArraySize
=
0
;
try
{
while
(
true
)
{
// Keep every Xth object to make sure we hit OOM pretty fast
if
(
counter
%
semiRefAllocFrequency
!=
0
)
{
long
allocationSize
=
((
int
)
(
rndGenerator
.
nextDouble
()
*
multiplier
))
+
minSize
;
arrObjects
.
add
(
new
byte
[(
int
)
allocationSize
]);
}
else
{
arrSoftRefs
.
add
(
new
SoftReference
(
new
Object
()));
}
counter
++;
if
(
counter
==
Long
.
MAX_VALUE
)
{
counter
=
0
;
}
}
}
catch
(
OutOfMemoryError
oome
)
{
// Clear allocated ballast, so we don't get another OOM.
arrObjects
=
null
;
// Get the number of soft refs first, so we don't trigger
// another OOM.
oomSoftArraySize
=
arrSoftRefs
.
size
();
for
(
SoftReference
sr
:
arrSoftRefs
)
{
Object
o
=
sr
.
get
();
if
(
o
!=
null
)
{
numberOfNotNulledObjects
++;
}
}
// Make sure we clear all refs before we return failure
arrSoftRefs
=
null
;
if
(
numberOfNotNulledObjects
>
0
)
{
throw
new
RuntimeException
(
numberOfNotNulledObjects
+
" out of "
+
oomSoftArraySize
+
" SoftReferences was not "
+
"null at time of OutOfMemoryError"
);
}
}
finally
{
arrSoftRefs
=
null
;
arrObjects
=
null
;
}
}
private
static
final
long
getBytesCount
(
String
arg
)
{
String
postfixes
=
"kMGT"
;
long
mod
=
1
;
if
(
arg
.
trim
().
length
()
>=
2
)
{
mod
=
postfixes
.
indexOf
(
arg
.
trim
().
charAt
(
arg
.
length
()
-
1
)
);
if
(
mod
!=
-
1
)
{
mod
=
(
long
)
Math
.
pow
(
1024
,
mod
+
1
);
arg
=
arg
.
substring
(
0
,
arg
.
length
()
-
1
);
}
else
{
mod
=
1
;
// 10^0
}
}
return
Long
.
parseLong
(
arg
)
*
mod
;
}
private
static
final
long
DEFAULT_MIN_SIZE
=
512
;
private
static
final
long
DEFAULT_MAX_SIZE
=
1024
;
private
static
final
int
DEFAULT_FREQUENCY
=
4
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录