Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
274c6b58
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看板
提交
274c6b58
编写于
6月 03, 2015
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
6370beff
8c05dcbe
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
169 addition
and
15 deletion
+169
-15
.hgtags
.hgtags
+2
-0
make/hotspot_version
make/hotspot_version
+1
-1
src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
+1
-1
src/share/vm/opto/phaseX.cpp
src/share/vm/opto/phaseX.cpp
+24
-4
src/share/vm/prims/jniCheck.cpp
src/share/vm/prims/jniCheck.cpp
+16
-9
test/TEST.groups
test/TEST.groups
+4
-0
test/compiler/types/TestTypePropagationToCmpU.java
test/compiler/types/TestTypePropagationToCmpU.java
+59
-0
test/gc/g1/Test2GbHeap.java
test/gc/g1/Test2GbHeap.java
+62
-0
未找到文件。
.hgtags
浏览文件 @
274c6b58
...
@@ -666,3 +666,5 @@ f5800068c61d0627c14e99836e9ce5cf0ef00075 hs25.60-b16
...
@@ -666,3 +666,5 @@ f5800068c61d0627c14e99836e9ce5cf0ef00075 hs25.60-b16
ab2353694ea7fd4907c5c88b8334f8feaafca8c7 jdk8u60-b16
ab2353694ea7fd4907c5c88b8334f8feaafca8c7 jdk8u60-b16
5efc25c367164b6856554b0d625f3c422fdf9558 hs25.60-b17
5efc25c367164b6856554b0d625f3c422fdf9558 hs25.60-b17
c26d09f1065cd26bd8b926efc5d3938b71e09eb5 jdk8u60-b17
c26d09f1065cd26bd8b926efc5d3938b71e09eb5 jdk8u60-b17
624f4cc05e7e95dd2103f343c54d7bdea6a81919 hs25.60-b18
3fa5c654c143fe309e5ddda92adc5fb132365bcf jdk8u60-b18
make/hotspot_version
浏览文件 @
274c6b58
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2015
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2015
HS_MAJOR_VER=25
HS_MAJOR_VER=25
HS_MINOR_VER=60
HS_MINOR_VER=60
HS_BUILD_NUMBER=1
7
HS_BUILD_NUMBER=1
8
JDK_MAJOR_VER=1
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
JDK_MINOR_VER=8
...
...
src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
浏览文件 @
274c6b58
...
@@ -75,7 +75,7 @@ protected:
...
@@ -75,7 +75,7 @@ protected:
assert
((
uintptr_t
)
end
%
mapping_granularity_in_bytes
==
0
,
assert
((
uintptr_t
)
end
%
mapping_granularity_in_bytes
==
0
,
err_msg
(
"end mapping area address must be a multiple of mapping granularity %zd, is "
PTR_FORMAT
,
err_msg
(
"end mapping area address must be a multiple of mapping granularity %zd, is "
PTR_FORMAT
,
mapping_granularity_in_bytes
,
p2i
(
end
)));
mapping_granularity_in_bytes
,
p2i
(
end
)));
size_t
num_target_elems
=
(
end
-
bottom
)
/
(
mapping_granularity_in_bytes
/
HeapWordSize
);
size_t
num_target_elems
=
pointer_delta
(
end
,
bottom
,
mapping_granularity_in_bytes
);
idx_t
bias
=
(
uintptr_t
)
bottom
/
mapping_granularity_in_bytes
;
idx_t
bias
=
(
uintptr_t
)
bottom
/
mapping_granularity_in_bytes
;
address
base
=
create_new_base_array
(
num_target_elems
,
target_elem_size_in_bytes
);
address
base
=
create_new_base_array
(
num_target_elems
,
target_elem_size_in_bytes
);
initialize_base
(
base
,
num_target_elems
,
bias
,
target_elem_size_in_bytes
,
log2_intptr
(
mapping_granularity_in_bytes
));
initialize_base
(
base
,
num_target_elems
,
bias
,
target_elem_size_in_bytes
,
log2_intptr
(
mapping_granularity_in_bytes
));
...
...
src/share/vm/opto/phaseX.cpp
浏览文件 @
274c6b58
...
@@ -1521,11 +1521,12 @@ void PhaseCCP::analyze() {
...
@@ -1521,11 +1521,12 @@ void PhaseCCP::analyze() {
set_type
(
n
,
t
);
set_type
(
n
,
t
);
for
(
DUIterator_Fast
imax
,
i
=
n
->
fast_outs
(
imax
);
i
<
imax
;
i
++
)
{
for
(
DUIterator_Fast
imax
,
i
=
n
->
fast_outs
(
imax
);
i
<
imax
;
i
++
)
{
Node
*
m
=
n
->
fast_out
(
i
);
// Get user
Node
*
m
=
n
->
fast_out
(
i
);
// Get user
if
(
m
->
is_Region
()
)
{
// New path to Region? Must recheck Phis too
if
(
m
->
is_Region
()
)
{
// New path to Region? Must recheck Phis too
for
(
DUIterator_Fast
i2max
,
i2
=
m
->
fast_outs
(
i2max
);
i2
<
i2max
;
i2
++
)
{
for
(
DUIterator_Fast
i2max
,
i2
=
m
->
fast_outs
(
i2max
);
i2
<
i2max
;
i2
++
)
{
Node
*
p
=
m
->
fast_out
(
i2
);
// Propagate changes to uses
Node
*
p
=
m
->
fast_out
(
i2
);
// Propagate changes to uses
if
(
p
->
bottom_type
()
!=
type
(
p
)
)
// If not already bottomed out
if
(
p
->
bottom_type
()
!=
type
(
p
))
{
// If not already bottomed out
worklist
.
push
(
p
);
// Propagate change to user
worklist
.
push
(
p
);
// Propagate change to user
}
}
}
}
}
// If we changed the receiver type to a call, we need to revisit
// If we changed the receiver type to a call, we need to revisit
...
@@ -1535,12 +1536,31 @@ void PhaseCCP::analyze() {
...
@@ -1535,12 +1536,31 @@ void PhaseCCP::analyze() {
if
(
m
->
is_Call
())
{
if
(
m
->
is_Call
())
{
for
(
DUIterator_Fast
i2max
,
i2
=
m
->
fast_outs
(
i2max
);
i2
<
i2max
;
i2
++
)
{
for
(
DUIterator_Fast
i2max
,
i2
=
m
->
fast_outs
(
i2max
);
i2
<
i2max
;
i2
++
)
{
Node
*
p
=
m
->
fast_out
(
i2
);
// Propagate changes to uses
Node
*
p
=
m
->
fast_out
(
i2
);
// Propagate changes to uses
if
(
p
->
is_Proj
()
&&
p
->
as_Proj
()
->
_con
==
TypeFunc
::
Control
&&
p
->
outcnt
()
==
1
)
if
(
p
->
is_Proj
()
&&
p
->
as_Proj
()
->
_con
==
TypeFunc
::
Control
&&
p
->
outcnt
()
==
1
)
{
worklist
.
push
(
p
->
unique_out
());
worklist
.
push
(
p
->
unique_out
());
}
}
}
}
}
if
(
m
->
bottom_type
()
!=
type
(
m
)
)
// If not already bottomed out
if
(
m
->
bottom_type
()
!=
type
(
m
))
{
// If not already bottomed out
worklist
.
push
(
m
);
// Propagate change to user
worklist
.
push
(
m
);
// Propagate change to user
}
// CmpU nodes can get their type information from two nodes up in the
// graph (instead of from the nodes immediately above). Make sure they
// are added to the worklist if nodes they depend on are updated, since
// they could be missed and get wrong types otherwise.
uint
m_op
=
m
->
Opcode
();
if
(
m_op
==
Op_AddI
||
m_op
==
Op_SubI
)
{
for
(
DUIterator_Fast
i2max
,
i2
=
m
->
fast_outs
(
i2max
);
i2
<
i2max
;
i2
++
)
{
Node
*
p
=
m
->
fast_out
(
i2
);
// Propagate changes to uses
if
(
p
->
Opcode
()
==
Op_CmpU
)
{
// Got a CmpU which might need the new type information from node n.
if
(
p
->
bottom_type
()
!=
type
(
p
))
{
// If not already bottomed out
worklist
.
push
(
p
);
// Propagate change to user
}
}
}
}
}
}
}
}
}
}
...
...
src/share/vm/prims/jniCheck.cpp
浏览文件 @
274c6b58
...
@@ -185,6 +185,9 @@ static void NativeReportJNIWarning(JavaThread* thr, const char *msg) {
...
@@ -185,6 +185,9 @@ static void NativeReportJNIWarning(JavaThread* thr, const char *msg) {
* throw an ArrayIndexOutOfBoundsException or ArrayStoreException.
* throw an ArrayIndexOutOfBoundsException or ArrayStoreException.
*
*
* In all other cases, a non-error return value guarantees that no exceptions have been thrown.
* In all other cases, a non-error return value guarantees that no exceptions have been thrown.
*
* Programmers often defend against ArrayIndexOutOfBoundsException, so warning
* for these functions would be pedantic.
*/
*/
static
inline
void
static
inline
void
check_pending_exception
(
JavaThread
*
thr
)
{
check_pending_exception
(
JavaThread
*
thr
)
{
...
@@ -201,6 +204,16 @@ check_pending_exception(JavaThread* thr) {
...
@@ -201,6 +204,16 @@ check_pending_exception(JavaThread* thr) {
}
}
}
}
/**
* Add to the planned number of handles. I.e. plus current live & warning threshold
*/
static
inline
void
add_planned_handle_capacity
(
JNIHandleBlock
*
handles
,
size_t
capacity
)
{
handles
->
set_planned_capacity
(
capacity
+
handles
->
get_number_of_live_handles
()
+
CHECK_JNI_LOCAL_REF_CAP_WARN_THRESHOLD
);
}
static
inline
void
static
inline
void
functionEnterCritical
(
JavaThread
*
thr
)
functionEnterCritical
(
JavaThread
*
thr
)
...
@@ -243,7 +256,7 @@ functionExit(JavaThread* thr)
...
@@ -243,7 +256,7 @@ functionExit(JavaThread* thr)
thr
->
print_stack
();
thr
->
print_stack
();
)
)
// Complain just the once, reset to current + warn threshold
// Complain just the once, reset to current + warn threshold
handles
->
set_planned_capacity
(
live_handles
+
CHECK_JNI_LOCAL_REF_CAP_WARN_THRESHOLD
);
add_planned_handle_capacity
(
handles
,
0
);
}
}
}
}
...
@@ -720,7 +733,7 @@ JNI_ENTRY_CHECKED(jint,
...
@@ -720,7 +733,7 @@ JNI_ENTRY_CHECKED(jint,
NativeReportJNIFatalError
(
thr
,
"negative capacity"
);
NativeReportJNIFatalError
(
thr
,
"negative capacity"
);
jint
result
=
UNCHECKED
()
->
PushLocalFrame
(
env
,
capacity
);
jint
result
=
UNCHECKED
()
->
PushLocalFrame
(
env
,
capacity
);
if
(
result
==
JNI_OK
)
{
if
(
result
==
JNI_OK
)
{
thr
->
active_handles
()
->
set_planned_capacity
(
capacity
+
CHECK_JNI_LOCAL_REF_CAP_WARN_THRESHOLD
);
add_planned_handle_capacity
(
thr
->
active_handles
(),
capacity
);
}
}
functionExit
(
thr
);
functionExit
(
thr
);
return
result
;
return
result
;
...
@@ -824,7 +837,7 @@ JNI_ENTRY_CHECKED(jint,
...
@@ -824,7 +837,7 @@ JNI_ENTRY_CHECKED(jint,
}
}
jint
result
=
UNCHECKED
()
->
EnsureLocalCapacity
(
env
,
capacity
);
jint
result
=
UNCHECKED
()
->
EnsureLocalCapacity
(
env
,
capacity
);
if
(
result
==
JNI_OK
)
{
if
(
result
==
JNI_OK
)
{
thr
->
active_handles
()
->
set_planned_capacity
(
capacity
+
CHECK_JNI_LOCAL_REF_CAP_WARN_THRESHOLD
);
add_planned_handle_capacity
(
thr
->
active_handles
(),
capacity
);
}
}
functionExit
(
thr
);
functionExit
(
thr
);
return
result
;
return
result
;
...
@@ -1628,7 +1641,6 @@ JNI_ENTRY_CHECKED(jobject,
...
@@ -1628,7 +1641,6 @@ JNI_ENTRY_CHECKED(jobject,
check_is_obj_array
(
thr
,
array
);
check_is_obj_array
(
thr
,
array
);
)
)
jobject
result
=
UNCHECKED
()
->
GetObjectArrayElement
(
env
,
array
,
index
);
jobject
result
=
UNCHECKED
()
->
GetObjectArrayElement
(
env
,
array
,
index
);
thr
->
set_pending_jni_exception_check
(
"GetObjectArrayElement"
);
functionExit
(
thr
);
functionExit
(
thr
);
return
result
;
return
result
;
JNI_END
JNI_END
...
@@ -1643,7 +1655,6 @@ JNI_ENTRY_CHECKED(void,
...
@@ -1643,7 +1655,6 @@ JNI_ENTRY_CHECKED(void,
check_is_obj_array
(
thr
,
array
);
check_is_obj_array
(
thr
,
array
);
)
)
UNCHECKED
()
->
SetObjectArrayElement
(
env
,
array
,
index
,
val
);
UNCHECKED
()
->
SetObjectArrayElement
(
env
,
array
,
index
,
val
);
thr
->
set_pending_jni_exception_check
(
"SetObjectArrayElement"
);
functionExit
(
thr
);
functionExit
(
thr
);
JNI_END
JNI_END
...
@@ -1733,7 +1744,6 @@ JNI_ENTRY_CHECKED(void, \
...
@@ -1733,7 +1744,6 @@ JNI_ENTRY_CHECKED(void, \
check_primitive_array_type(thr, array, ElementTag); \
check_primitive_array_type(thr, array, ElementTag); \
) \
) \
UNCHECKED()->Get##Result##ArrayRegion(env,array,start,len,buf); \
UNCHECKED()->Get##Result##ArrayRegion(env,array,start,len,buf); \
thr->set_pending_jni_exception_check("Get"#Result"ArrayRegion"); \
functionExit(thr); \
functionExit(thr); \
JNI_END
JNI_END
...
@@ -1758,7 +1768,6 @@ JNI_ENTRY_CHECKED(void, \
...
@@ -1758,7 +1768,6 @@ JNI_ENTRY_CHECKED(void, \
check_primitive_array_type(thr, array, ElementTag); \
check_primitive_array_type(thr, array, ElementTag); \
) \
) \
UNCHECKED()->Set##Result##ArrayRegion(env,array,start,len,buf); \
UNCHECKED()->Set##Result##ArrayRegion(env,array,start,len,buf); \
thr->set_pending_jni_exception_check("Set"#Result"ArrayRegion"); \
functionExit(thr); \
functionExit(thr); \
JNI_END
JNI_END
...
@@ -1835,7 +1844,6 @@ JNI_ENTRY_CHECKED(void,
...
@@ -1835,7 +1844,6 @@ JNI_ENTRY_CHECKED(void,
checkString
(
thr
,
str
);
checkString
(
thr
,
str
);
)
)
UNCHECKED
()
->
GetStringRegion
(
env
,
str
,
start
,
len
,
buf
);
UNCHECKED
()
->
GetStringRegion
(
env
,
str
,
start
,
len
,
buf
);
thr
->
set_pending_jni_exception_check
(
"GetStringRegion"
);
functionExit
(
thr
);
functionExit
(
thr
);
JNI_END
JNI_END
...
@@ -1850,7 +1858,6 @@ JNI_ENTRY_CHECKED(void,
...
@@ -1850,7 +1858,6 @@ JNI_ENTRY_CHECKED(void,
checkString
(
thr
,
str
);
checkString
(
thr
,
str
);
)
)
UNCHECKED
()
->
GetStringUTFRegion
(
env
,
str
,
start
,
len
,
buf
);
UNCHECKED
()
->
GetStringUTFRegion
(
env
,
str
,
start
,
len
,
buf
);
thr
->
set_pending_jni_exception_check
(
"GetStringUTFRegion"
);
functionExit
(
thr
);
functionExit
(
thr
);
JNI_END
JNI_END
...
...
test/TEST.groups
浏览文件 @
274c6b58
...
@@ -149,6 +149,8 @@ hotspot_all = \
...
@@ -149,6 +149,8 @@ hotspot_all = \
# Tests that require compact3 API's
# Tests that require compact3 API's
#
#
needs_compact3 = \
needs_compact3 = \
compiler/jsr292/RedefineMethodUsedByMultipleMethodHandles.java \
compiler/rangechecks/TestRangeCheckSmearing.java \
compiler/whitebox/DeoptimizeMethodTest.java \
compiler/whitebox/DeoptimizeMethodTest.java \
compiler/whitebox/SetForceInlineMethodTest.java \
compiler/whitebox/SetForceInlineMethodTest.java \
compiler/whitebox/SetDontInlineMethodTest.java \
compiler/whitebox/SetDontInlineMethodTest.java \
...
@@ -159,6 +161,7 @@ needs_compact3 = \
...
@@ -159,6 +161,7 @@ needs_compact3 = \
compiler/whitebox/IsMethodCompilableTest.java \
compiler/whitebox/IsMethodCompilableTest.java \
gc/6581734/Test6581734.java \
gc/6581734/Test6581734.java \
gc/7072527/TestFullGCCount.java \
gc/7072527/TestFullGCCount.java \
gc/TestGCLogRotationViaJcmd.java \
gc/g1/TestHumongousAllocInitialMark.java \
gc/g1/TestHumongousAllocInitialMark.java \
gc/g1/TestHumongousShrinkHeap.java \
gc/g1/TestHumongousShrinkHeap.java \
gc/arguments/TestG1HeapRegionSize.java \
gc/arguments/TestG1HeapRegionSize.java \
...
@@ -177,6 +180,7 @@ needs_compact3 = \
...
@@ -177,6 +180,7 @@ needs_compact3 = \
serviceability/threads/TestFalseDeadLock.java \
serviceability/threads/TestFalseDeadLock.java \
serviceability/jvmti/GetObjectSizeOverflow.java \
serviceability/jvmti/GetObjectSizeOverflow.java \
serviceability/jvmti/TestRedefineWithUnresolvedClass.java \
serviceability/jvmti/TestRedefineWithUnresolvedClass.java \
serviceability/sa/jmap-hashcode/Test8028623.java \
compiler/tiered/NonTieredLevelsTest.java \
compiler/tiered/NonTieredLevelsTest.java \
compiler/tiered/TieredLevelsTest.java \
compiler/tiered/TieredLevelsTest.java \
compiler/intrinsics/bmi/verifycode
compiler/intrinsics/bmi/verifycode
...
...
test/compiler/types/TestTypePropagationToCmpU.java
0 → 100644
浏览文件 @
274c6b58
/*
* Copyright (c) 2015, 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 8080156 8060036
* @summary Test correctness of type propagation to CmpUNodes.
* @run main TestTypePropagationToCmpU
*/
public
class
TestTypePropagationToCmpU
{
public
static
void
main
(
String
[]
args
)
{
try
{
// Trigger compilation
for
(
int
i
=
0
;
i
<
100_000
;
++
i
)
{
test
();
}
}
catch
(
NullPointerException
e
)
{
// Test should never throw a NullPointerException
throw
new
RuntimeException
(
"Test failed"
);
}
}
static
int
global
=
42
;
public
static
void
test
()
{
int
a
=
Integer
.
MIN_VALUE
;
int
b
=
global
;
char
[]
buf
=
{
0
};
for
(
int
i
=
0
;
i
<=
b
;
++
i
)
{
a
=
i
-
b
;
}
// C2 adds a range check and an uncommon trap here to ensure that the array index
// is in bounds. If type information is not propagated correctly to the corresponding
// CmpUNode, this trap may be always taken. Because C2 also removes the unnecessary
// allocation of 'buf', a NullPointerException is thrown in this case.
char
c
=
buf
[(
a
*
11
)
/
2
-
a
];
// a is 0 here if global >= 0
buf
[
0
]
=
0
;
}
}
test/gc/g1/Test2GbHeap.java
0 → 100644
浏览文件 @
274c6b58
/*
* 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 Test2GbHeap
* @bug 8031686
* @summary Regression test to ensure we can start G1 with 2gb heap.
* @key gc
* @key regression
* @library /testlibrary
*/
import
java.util.ArrayList
;
import
com.oracle.java.testlibrary.OutputAnalyzer
;
import
com.oracle.java.testlibrary.ProcessTools
;
public
class
Test2GbHeap
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
ArrayList
<
String
>
testArguments
=
new
ArrayList
<
String
>();
testArguments
.
add
(
"-XX:+UseG1GC"
);
testArguments
.
add
(
"-Xmx2g"
);
testArguments
.
add
(
"-version"
);
ProcessBuilder
pb
=
ProcessTools
.
createJavaProcessBuilder
(
testArguments
.
toArray
(
new
String
[
0
]));
OutputAnalyzer
output
=
new
OutputAnalyzer
(
pb
.
start
());
// Avoid failing test for setups not supported.
if
(
output
.
getOutput
().
contains
(
"Could not reserve enough space for 2097152KB object heap"
))
{
// Will fail on machines with too little memory (and Windows 32-bit VM), ignore such failures.
output
.
shouldHaveExitValue
(
1
);
}
else
if
(
output
.
getOutput
().
contains
(
"G1 GC is disabled in this release"
))
{
// G1 is not supported on embedded, ignore such failures.
output
.
shouldHaveExitValue
(
1
);
}
else
{
// Normally everything should be fine.
output
.
shouldHaveExitValue
(
0
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录