Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
d74a10db
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d74a10db
编写于
5月 22, 2014
作者:
A
allwin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8027230: Overflow in java.lang.instrument.Instrumentation.getObjectSize() method
Reviewed-by: dholmes, sspitsyn
上级
66b6ca80
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
111 addition
and
2 deletion
+111
-2
src/share/vm/prims/jvmtiEnv.cpp
src/share/vm/prims/jvmtiEnv.cpp
+2
-2
test/TEST.groups
test/TEST.groups
+2
-0
test/serviceability/jvmti/GetObjectSizeOverflow.java
test/serviceability/jvmti/GetObjectSizeOverflow.java
+64
-0
test/serviceability/jvmti/GetObjectSizeOverflowAgent.java
test/serviceability/jvmti/GetObjectSizeOverflowAgent.java
+43
-0
未找到文件。
src/share/vm/prims/jvmtiEnv.cpp
浏览文件 @
d74a10db
...
...
@@ -307,9 +307,9 @@ JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) {
!
java_lang_Class
::
is_primitive
(
mirror
))
{
Klass
*
k
=
java_lang_Class
::
as_Klass
(
mirror
);
assert
(
k
!=
NULL
,
"class for non-primitive mirror must exist"
);
*
size_ptr
=
k
->
size
()
*
wordSize
;
*
size_ptr
=
(
jlong
)
k
->
size
()
*
wordSize
;
}
else
{
*
size_ptr
=
mirror
->
size
()
*
wordSize
;
*
size_ptr
=
(
jlong
)
mirror
->
size
()
*
wordSize
;
}
return
JVMTI_ERROR_NONE
;
}
/* end GetObjectSize */
...
...
test/TEST.groups
浏览文件 @
d74a10db
...
...
@@ -134,6 +134,8 @@ needs_compact3 = \
gc/arguments/TestDynMaxHeapFreeRatio.java \
runtime/InternalApi/ThreadCpuTimesDeadlock.java \
serviceability/threads/TestFalseDeadLock.java \
serviceability/jvmti/GetObjectSizeOverflow.java \
serviceability/jvmti/TestRedefineWithUnresolvedClass.java \
compiler/tiered/NonTieredLevelsTest.java \
compiler/tiered/TieredLevelsTest.java \
compiler/intrinsics/bmi/verifycode
...
...
test/serviceability/jvmti/GetObjectSizeOverflow.java
0 → 100644
浏览文件 @
d74a10db
/*
* 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.
*/
import
java.io.PrintWriter
;
import
com.oracle.java.testlibrary.*
;
/*
* Test to verify GetObjectSize does not overflow on a 600M element int[]
*
* @test
* @bug 8027230
* @library /testlibrary
* @build GetObjectSizeOverflowAgent
* @run main ClassFileInstaller GetObjectSizeOverflowAgent
* @run main GetObjectSizeOverflow
*/
public
class
GetObjectSizeOverflow
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
if
(!
Platform
.
is64bit
())
{
System
.
out
.
println
(
"Test needs a 4GB heap and can only be run as a 64bit process, skipping."
);
return
;
}
PrintWriter
pw
=
new
PrintWriter
(
"MANIFEST.MF"
);
pw
.
println
(
"Premain-Class: GetObjectSizeOverflowAgent"
);
pw
.
close
();
ProcessBuilder
pb
=
new
ProcessBuilder
();
pb
.
command
(
new
String
[]
{
JDKToolFinder
.
getJDKTool
(
"jar"
),
"cmf"
,
"MANIFEST.MF"
,
"agent.jar"
,
"GetObjectSizeOverflowAgent.class"
});
pb
.
start
().
waitFor
();
ProcessBuilder
pt
=
ProcessTools
.
createJavaProcessBuilder
(
true
,
"-Xmx4000m"
,
"-javaagent:agent.jar"
,
"GetObjectSizeOverflowAgent"
);
OutputAnalyzer
output
=
new
OutputAnalyzer
(
pt
.
start
());
if
(
output
.
getStdout
().
contains
(
"Could not reserve enough space"
)
||
output
.
getStderr
().
contains
(
"java.lang.OutOfMemoryError"
))
{
System
.
out
.
println
(
"stdout: "
+
output
.
getStdout
());
System
.
out
.
println
(
"stderr: "
+
output
.
getStderr
());
System
.
out
.
println
(
"Test could not reserve or allocate enough space, skipping"
);
return
;
}
output
.
stdoutShouldContain
(
"GetObjectSizeOverflow passed"
);
}
}
test/serviceability/jvmti/GetObjectSizeOverflowAgent.java
0 → 100644
浏览文件 @
d74a10db
/*
* 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.
*/
import
java.lang.instrument.*
;
public
class
GetObjectSizeOverflowAgent
{
static
Instrumentation
instrumentation
;
public
static
void
premain
(
String
agentArgs
,
Instrumentation
instrumentation
)
{
GetObjectSizeOverflowAgent
.
instrumentation
=
instrumentation
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
int
[]
a
=
new
int
[
600_000_000
];
long
size
=
instrumentation
.
getObjectSize
(
a
);
if
(
size
<
2_400_000_000L
)
{
throw
new
RuntimeException
(
"Invalid size of array, expected >= 2400000000, got "
+
size
);
}
System
.
out
.
println
(
"GetObjectSizeOverflow passed"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录