Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
df91a9e0
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看板
提交
df91a9e0
编写于
12月 13, 2013
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
02f05010
b17ee940
变更
64
隐藏空白更改
内联
并排
Showing
64 changed file
with
212 addition
and
184 deletion
+212
-184
.hgtags
.hgtags
+2
-0
agent/make/jsdbproc64.sh
agent/make/jsdbproc64.sh
+7
-7
agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1HeapRegionTable.java
...n/jvm/hotspot/gc_implementation/g1/G1HeapRegionTable.java
+4
-4
agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
...s/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
+8
-1
make/hotspot_version
make/hotspot_version
+1
-1
src/cpu/sparc/vm/vm_version_sparc.cpp
src/cpu/sparc/vm/vm_version_sparc.cpp
+21
-6
src/cpu/sparc/vm/vm_version_sparc.hpp
src/cpu/sparc/vm/vm_version_sparc.hpp
+7
-1
src/cpu/x86/vm/c1_Runtime1_x86.cpp
src/cpu/x86/vm/c1_Runtime1_x86.cpp
+11
-18
src/cpu/x86/vm/macroAssembler_x86.cpp
src/cpu/x86/vm/macroAssembler_x86.cpp
+18
-34
src/share/vm/classfile/defaultMethods.cpp
src/share/vm/classfile/defaultMethods.cpp
+3
-3
src/share/vm/gc_implementation/shared/markSweep.cpp
src/share/vm/gc_implementation/shared/markSweep.cpp
+0
-19
src/share/vm/gc_implementation/shared/markSweep.hpp
src/share/vm/gc_implementation/shared/markSweep.hpp
+0
-2
src/share/vm/gc_implementation/shared/markSweep.inline.hpp
src/share/vm/gc_implementation/shared/markSweep.inline.hpp
+5
-0
src/share/vm/interpreter/linkResolver.cpp
src/share/vm/interpreter/linkResolver.cpp
+35
-12
src/share/vm/interpreter/linkResolver.hpp
src/share/vm/interpreter/linkResolver.hpp
+2
-2
src/share/vm/oops/instanceKlass.cpp
src/share/vm/oops/instanceKlass.cpp
+11
-1
src/share/vm/oops/instanceKlass.hpp
src/share/vm/oops/instanceKlass.hpp
+1
-0
src/share/vm/oops/instanceMirrorKlass.cpp
src/share/vm/oops/instanceMirrorKlass.cpp
+7
-12
src/share/vm/oops/klassVtable.cpp
src/share/vm/oops/klassVtable.cpp
+13
-1
src/share/vm/oops/objArrayKlass.cpp
src/share/vm/oops/objArrayKlass.cpp
+0
-1
src/share/vm/opto/c2_globals.hpp
src/share/vm/opto/c2_globals.hpp
+1
-1
src/share/vm/prims/jvmtiEnvThreadState.cpp
src/share/vm/prims/jvmtiEnvThreadState.cpp
+14
-5
src/share/vm/prims/jvmtiImpl.hpp
src/share/vm/prims/jvmtiImpl.hpp
+1
-1
src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
+0
-12
test/TEST.groups
test/TEST.groups
+0
-1
test/compiler/intrinsics/mathexact/AddExactICondTest.java
test/compiler/intrinsics/mathexact/AddExactICondTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactIConstantTest.java
.../compiler/intrinsics/mathexact/AddExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactILoadTest.java
test/compiler/intrinsics/mathexact/AddExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java
...iler/intrinsics/mathexact/AddExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java
...mpiler/intrinsics/mathexact/AddExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactLConstantTest.java
.../compiler/intrinsics/mathexact/AddExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/AddExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/CompareTest.java
test/compiler/intrinsics/mathexact/CompareTest.java
+1
-1
test/compiler/intrinsics/mathexact/DecExactITest.java
test/compiler/intrinsics/mathexact/DecExactITest.java
+1
-1
test/compiler/intrinsics/mathexact/DecExactLTest.java
test/compiler/intrinsics/mathexact/DecExactLTest.java
+2
-2
test/compiler/intrinsics/mathexact/GVNTest.java
test/compiler/intrinsics/mathexact/GVNTest.java
+1
-1
test/compiler/intrinsics/mathexact/IncExactITest.java
test/compiler/intrinsics/mathexact/IncExactITest.java
+1
-1
test/compiler/intrinsics/mathexact/IncExactLTest.java
test/compiler/intrinsics/mathexact/IncExactLTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactICondTest.java
test/compiler/intrinsics/mathexact/MulExactICondTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactIConstantTest.java
.../compiler/intrinsics/mathexact/MulExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactILoadTest.java
test/compiler/intrinsics/mathexact/MulExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java
...iler/intrinsics/mathexact/MulExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java
...mpiler/intrinsics/mathexact/MulExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java
test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactLConstantTest.java
.../compiler/intrinsics/mathexact/MulExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/MulExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactIConstantTest.java
.../compiler/intrinsics/mathexact/NegExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactILoadTest.java
test/compiler/intrinsics/mathexact/NegExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java
...iler/intrinsics/mathexact/NegExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java
...mpiler/intrinsics/mathexact/NegExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactLConstantTest.java
.../compiler/intrinsics/mathexact/NegExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/NegExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NestedMathExactTest.java
test/compiler/intrinsics/mathexact/NestedMathExactTest.java
+1
-1
test/compiler/intrinsics/mathexact/SplitThruPhiTest.java
test/compiler/intrinsics/mathexact/SplitThruPhiTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactICondTest.java
test/compiler/intrinsics/mathexact/SubExactICondTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactIConstantTest.java
.../compiler/intrinsics/mathexact/SubExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactILoadTest.java
test/compiler/intrinsics/mathexact/SubExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java
...iler/intrinsics/mathexact/SubExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java
...mpiler/intrinsics/mathexact/SubExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java
test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactLConstantTest.java
.../compiler/intrinsics/mathexact/SubExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/SubExactLNonConstantTest.java
+1
-1
test/runtime/8024804/RegisterNatives.java
test/runtime/8024804/RegisterNatives.java
+1
-0
未找到文件。
.hgtags
浏览文件 @
df91a9e0
...
...
@@ -400,3 +400,5 @@ abad3b2d905d9e1ad767c94baa94aba6ed5b207b hs25-b60
c9f439732b18ea16f7e65815327d5ea7092cc258 jdk8-b118
b2426da30009cd3069d03de073f351e6432c7682 hs25-b61
ce42d815dd2130250acf6132b51b624001638f0d jdk8-b119
05fedd51e40da22c9460bf17c7185889e435db3d hs25-b62
fca262db9c4309f99d2f5542ab0780e45c2f1578 jdk8-b120
agent/make/jsdbproc64.sh
浏览文件 @
df91a9e0
#!/bin/sh
#!/bin/sh
#
# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2004,
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
...
...
@@ -21,10 +21,10 @@
# 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.
#
#
#
.
`
dirname
$0
`
/saenv64.sh
.
`
dirname
$0
`
/saenv64.sh
$SA_JAVA_CMD
sun.jvm.hotspot.tools.JSDB
$*
$SA_JAVA_CMD
sun.jvm.hotspot.tools.soql.JSDB
$*
agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1HeapRegionTable.java
浏览文件 @
df91a9e0
...
...
@@ -103,14 +103,14 @@ public class G1HeapRegionTable extends VMObject {
@Override
public
void
remove
()
{
/* not supported */
}
HeapRegionIterator
(
Address
addr
)
{
HeapRegionIterator
(
long
committedLength
)
{
index
=
0
;
length
=
length
()
;
length
=
committedLength
;
}
}
public
Iterator
<
HeapRegion
>
heapRegionIterator
()
{
return
new
HeapRegionIterator
(
addr
);
public
Iterator
<
HeapRegion
>
heapRegionIterator
(
long
committedLength
)
{
return
new
HeapRegionIterator
(
committedLength
);
}
public
G1HeapRegionTable
(
Address
addr
)
{
...
...
agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
浏览文件 @
df91a9e0
...
...
@@ -42,6 +42,8 @@ import sun.jvm.hotspot.types.TypeDataBase;
public
class
HeapRegionSeq
extends
VMObject
{
// G1HeapRegionTable _regions
static
private
long
regionsFieldOffset
;
// uint _committed_length
static
private
CIntegerField
committedLengthField
;
static
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
...
...
@@ -55,6 +57,7 @@ public class HeapRegionSeq extends VMObject {
Type
type
=
db
.
lookupType
(
"HeapRegionSeq"
);
regionsFieldOffset
=
type
.
getField
(
"_regions"
).
getOffset
();
committedLengthField
=
type
.
getCIntegerField
(
"_committed_length"
);
}
private
G1HeapRegionTable
regions
()
{
...
...
@@ -67,8 +70,12 @@ public class HeapRegionSeq extends VMObject {
return
regions
().
length
();
}
public
long
committedLength
()
{
return
committedLengthField
.
getValue
(
addr
);
}
public
Iterator
<
HeapRegion
>
heapRegionIterator
()
{
return
regions
().
heapRegionIterator
();
return
regions
().
heapRegionIterator
(
committedLength
()
);
}
public
HeapRegionSeq
(
Address
addr
)
{
...
...
make/hotspot_version
浏览文件 @
df91a9e0
...
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2013
HS_MAJOR_VER=25
HS_MINOR_VER=0
HS_BUILD_NUMBER=6
1
HS_BUILD_NUMBER=6
2
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
...
...
src/cpu/sparc/vm/vm_version_sparc.cpp
浏览文件 @
df91a9e0
...
...
@@ -89,6 +89,27 @@ void VM_Version::initialize() {
_supports_cx8
=
has_v9
();
_supports_atomic_getset4
=
true
;
// swap instruction
// There are Fujitsu Sparc64 CPUs which support blk_init as well so
// we have to take this check out of the 'is_niagara()' block below.
if
(
has_blk_init
())
{
// When using CMS or G1, we cannot use memset() in BOT updates
// because the sun4v/CMT version in libc_psr uses BIS which
// exposes "phantom zeros" to concurrent readers. See 6948537.
if
(
FLAG_IS_DEFAULT
(
UseMemSetInBOT
)
&&
(
UseConcMarkSweepGC
||
UseG1GC
))
{
FLAG_SET_DEFAULT
(
UseMemSetInBOT
,
false
);
}
// Issue a stern warning if the user has explicitly set
// UseMemSetInBOT (it is known to cause issues), but allow
// use for experimentation and debugging.
if
(
UseConcMarkSweepGC
||
UseG1GC
)
{
if
(
UseMemSetInBOT
)
{
assert
(
!
FLAG_IS_DEFAULT
(
UseMemSetInBOT
),
"Error"
);
warning
(
"Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
" on sun4v; please understand that you are using at your own risk!"
);
}
}
}
if
(
is_niagara
())
{
// Indirect branch is the same cost as direct
if
(
FLAG_IS_DEFAULT
(
UseInlineCaches
))
{
...
...
@@ -98,12 +119,6 @@ void VM_Version::initialize() {
if
(
FLAG_IS_DEFAULT
(
OptoLoopAlignment
))
{
FLAG_SET_DEFAULT
(
OptoLoopAlignment
,
4
);
}
// When using CMS or G1, we cannot use memset() in BOT updates
// because the sun4v/CMT version in libc_psr uses BIS which
// exposes "phantom zeros" to concurrent readers. See 6948537.
if
(
FLAG_IS_DEFAULT
(
UseMemSetInBOT
)
&&
(
UseConcMarkSweepGC
||
UseG1GC
))
{
FLAG_SET_DEFAULT
(
UseMemSetInBOT
,
false
);
}
#ifdef _LP64
// 32-bit oops don't make sense for the 64-bit VM on sparc
// since the 32-bit VM has the same registers and smaller objects.
...
...
src/cpu/sparc/vm/vm_version_sparc.hpp
浏览文件 @
df91a9e0
...
...
@@ -94,7 +94,13 @@ protected:
static
bool
is_M_family
(
int
features
)
{
return
(
features
&
M_family_m
)
!=
0
;
}
static
bool
is_T_family
(
int
features
)
{
return
(
features
&
T_family_m
)
!=
0
;
}
static
bool
is_niagara
()
{
return
is_T_family
(
_features
);
}
DEBUG_ONLY
(
static
bool
is_niagara
(
int
features
)
{
return
(
features
&
sun4v_m
)
!=
0
;
}
)
#ifdef ASSERT
static
bool
is_niagara
(
int
features
)
{
// 'sun4v_m' may be defined on both Sun/Oracle Sparc CPUs as well as
// on Fujitsu Sparc64 CPUs, but only Sun/Oracle Sparcs can be 'niagaras'.
return
(
features
&
sun4v_m
)
!=
0
&&
(
features
&
sparc64_family_m
)
==
0
;
}
#endif
// Returns true if it is niagara1 (T1).
static
bool
is_T1_model
(
int
features
)
{
return
is_T_family
(
features
)
&&
((
features
&
T1_model_m
)
!=
0
);
}
...
...
src/cpu/x86/vm/c1_Runtime1_x86.cpp
浏览文件 @
df91a9e0
...
...
@@ -1719,10 +1719,12 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
BarrierSet
*
bs
=
Universe
::
heap
()
->
barrier_set
();
CardTableModRefBS
*
ct
=
(
CardTableModRefBS
*
)
bs
;
assert
(
sizeof
(
*
ct
->
byte_map_base
)
==
sizeof
(
jbyte
),
"adjust this code"
);
Label
done
;
Label
runtime
;
// At this point we know new_value is non-NULL and the new_value crosses reg
sion
.
// At this point we know new_value is non-NULL and the new_value crosses reg
ions
.
// Must check to see if card is already dirty
const
Register
thread
=
NOT_LP64
(
rax
)
LP64_ONLY
(
r15_thread
);
...
...
@@ -1735,26 +1737,17 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
__
push
(
rax
);
__
push
(
rcx
);
NOT_LP64
(
__
get_thread
(
thread
);)
ExternalAddress
cardtable
((
address
)
ct
->
byte_map_base
);
assert
(
sizeof
(
*
ct
->
byte_map_base
)
==
sizeof
(
jbyte
),
"adjust this code"
);
const
Register
cardtable
=
rax
;
const
Register
card_addr
=
rcx
;
#ifdef _LP64
const
Register
tmp
=
rscratch1
;
f
.
load_argument
(
0
,
card_addr
);
__
shrq
(
card_addr
,
CardTableModRefBS
::
card_shift
);
__
lea
(
tmp
,
cardtable
);
// get the address of the card
__
addq
(
card_addr
,
tmp
);
#else
const
Register
card_index
=
rcx
;
f
.
load_argument
(
0
,
card_index
);
__
shrl
(
card_index
,
CardTableModRefBS
::
card_shift
);
__
shrptr
(
card_addr
,
CardTableModRefBS
::
card_shift
);
// Do not use ExternalAddress to load 'byte_map_base', since 'byte_map_base' is NOT
// a valid address and therefore is not properly handled by the relocation code.
__
movptr
(
cardtable
,
(
intptr_t
)
ct
->
byte_map_base
);
__
addptr
(
card_addr
,
cardtable
);
Address
index
(
noreg
,
card_index
,
Address
::
times_1
);
__
leal
(
card_addr
,
__
as_Address
(
ArrayAddress
(
cardtable
,
index
)));
#endif
NOT_LP64
(
__
get_thread
(
thread
);)
__
cmpb
(
Address
(
card_addr
,
0
),
(
int
)
G1SATBCardTableModRefBS
::
g1_young_card_val
());
__
jcc
(
Assembler
::
equal
,
done
);
...
...
src/cpu/x86/vm/macroAssembler_x86.cpp
浏览文件 @
df91a9e0
...
...
@@ -3354,6 +3354,8 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
BarrierSet
*
bs
=
Universe
::
heap
()
->
barrier_set
();
CardTableModRefBS
*
ct
=
(
CardTableModRefBS
*
)
bs
;
assert
(
sizeof
(
*
ct
->
byte_map_base
)
==
sizeof
(
jbyte
),
"adjust this code"
);
Label
done
;
Label
runtime
;
...
...
@@ -3371,28 +3373,16 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
// storing region crossing non-NULL, is card already dirty?
ExternalAddress
cardtable
((
address
)
ct
->
byte_map_base
);
assert
(
sizeof
(
*
ct
->
byte_map_base
)
==
sizeof
(
jbyte
),
"adjust this code"
);
#ifdef _LP64
const
Register
card_addr
=
tmp
;
const
Register
cardtable
=
tmp2
;
movq
(
card_addr
,
store_addr
);
shrq
(
card_addr
,
CardTableModRefBS
::
card_shift
);
lea
(
tmp2
,
cardtable
);
movptr
(
card_addr
,
store_addr
);
shrptr
(
card_addr
,
CardTableModRefBS
::
card_shift
);
// Do not use ExternalAddress to load 'byte_map_base', since 'byte_map_base' is NOT
// a valid address and therefore is not properly handled by the relocation code.
movptr
(
cardtable
,
(
intptr_t
)
ct
->
byte_map_base
);
addptr
(
card_addr
,
cardtable
);
// get the address of the card
addq
(
card_addr
,
tmp2
);
#else
const
Register
card_index
=
tmp
;
movl
(
card_index
,
store_addr
);
shrl
(
card_index
,
CardTableModRefBS
::
card_shift
);
Address
index
(
noreg
,
card_index
,
Address
::
times_1
);
const
Register
card_addr
=
tmp
;
lea
(
card_addr
,
as_Address
(
ArrayAddress
(
cardtable
,
index
)));
#endif
cmpb
(
Address
(
card_addr
,
0
),
(
int
)
G1SATBCardTableModRefBS
::
g1_young_card_val
());
jcc
(
Assembler
::
equal
,
done
);
...
...
@@ -3416,7 +3406,7 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
movq
(
Address
(
tmp2
,
0
),
card_addr
);
#else
addl
(
tmp2
,
queue_index
);
movl
(
Address
(
tmp2
,
0
),
card_
index
);
movl
(
Address
(
tmp2
,
0
),
card_
addr
);
#endif
jmp
(
done
);
...
...
@@ -3468,25 +3458,19 @@ void MacroAssembler::store_check_part_2(Register obj) {
// The calculation for byte_map_base is as follows:
// byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift);
// So this essentially converts an address to a displacement and
// it will never need to be relocated. On 64bit however the value may be too
// large for a 32bit displacement
// So this essentially converts an address to a displacement and it will
// never need to be relocated. On 64bit however the value may be too
// large for a 32bit displacement.
intptr_t
disp
=
(
intptr_t
)
ct
->
byte_map_base
;
if
(
is_simm32
(
disp
))
{
Address
cardtable
(
noreg
,
obj
,
Address
::
times_1
,
disp
);
movb
(
cardtable
,
0
);
}
else
{
// By doing it as an ExternalAddress disp could be converted to a rip-relative
// displacement and done in a single instruction given favorable mapping and
// a smarter version of as_Address. Worst case it is two instructions which
// is no worse off then loading disp into a register and doing as a simple
// Address() as above.
// We can't do as ExternalAddress as the only style since if disp == 0 we'll
// assert since NULL isn't acceptable in a reloci (see 6644928). In any case
// in some cases we'll get a single instruction version.
ExternalAddress
cardtable
((
address
)
disp
);
// By doing it as an ExternalAddress 'disp' could be converted to a rip-relative
// displacement and done in a single instruction given favorable mapping and a
// smarter version of as_Address. However, 'ExternalAddress' generates a relocation
// entry and that entry is not properly handled by the relocation code.
AddressLiteral
cardtable
((
address
)
ct
->
byte_map_base
,
relocInfo
::
none
);
Address
index
(
noreg
,
obj
,
Address
::
times_1
);
movb
(
as_Address
(
ArrayAddress
(
cardtable
,
index
)),
0
);
}
...
...
src/share/vm/classfile/defaultMethods.cpp
浏览文件 @
df91a9e0
...
...
@@ -625,13 +625,13 @@ static GrowableArray<EmptyVtableSlot*>* find_empty_vtable_slots(
while
(
super
!=
NULL
)
{
for
(
int
i
=
0
;
i
<
super
->
methods
()
->
length
();
++
i
)
{
Method
*
m
=
super
->
methods
()
->
at
(
i
);
if
(
m
->
is_overpass
())
{
if
(
m
->
is_overpass
()
||
m
->
is_static
()
)
{
// m is a method that would have been a miranda if not for the
// default method processing that occurred on behalf of our superclass,
// so it's a method we want to re-examine in this new context. That is,
// unless we have a real implementation of it in the current class.
Method
*
impl
=
klass
->
lookup_method
(
m
->
name
(),
m
->
signature
());
if
(
impl
==
NULL
||
impl
->
is_overpass
())
{
if
(
impl
==
NULL
||
impl
->
is_overpass
()
||
impl
->
is_static
()
)
{
if
(
!
already_in_vtable_slots
(
slots
,
m
))
{
slots
->
append
(
new
EmptyVtableSlot
(
m
));
}
...
...
@@ -648,7 +648,7 @@ static GrowableArray<EmptyVtableSlot*>* find_empty_vtable_slots(
// so it's a method we want to re-examine in this new context. That is,
// unless we have a real implementation of it in the current class.
Method
*
impl
=
klass
->
lookup_method
(
m
->
name
(),
m
->
signature
());
if
(
impl
==
NULL
||
impl
->
is_overpass
())
{
if
(
impl
==
NULL
||
impl
->
is_overpass
()
||
impl
->
is_static
()
)
{
if
(
!
already_in_vtable_slots
(
slots
,
m
))
{
slots
->
append
(
new
EmptyVtableSlot
(
m
));
}
...
...
src/share/vm/gc_implementation/shared/markSweep.cpp
浏览文件 @
df91a9e0
...
...
@@ -66,29 +66,10 @@ void MarkSweep::AdjustKlassClosure::do_klass(Klass* klass) {
klass
->
oops_do
(
&
MarkSweep
::
adjust_pointer_closure
);
}
void
MarkSweep
::
follow_klass
(
Klass
*
klass
)
{
ClassLoaderData
*
cld
=
klass
->
class_loader_data
();
// The actual processing of the klass is done when we
// traverse the list of Klasses in the class loader data.
MarkSweep
::
follow_class_loader
(
cld
);
}
void
MarkSweep
::
adjust_klass
(
Klass
*
klass
)
{
ClassLoaderData
*
cld
=
klass
->
class_loader_data
();
// The actual processing of the klass is done when we
// traverse the list of Klasses in the class loader data.
MarkSweep
::
adjust_class_loader
(
cld
);
}
void
MarkSweep
::
follow_class_loader
(
ClassLoaderData
*
cld
)
{
cld
->
oops_do
(
&
MarkSweep
::
mark_and_push_closure
,
&
MarkSweep
::
follow_klass_closure
,
true
);
}
void
MarkSweep
::
adjust_class_loader
(
ClassLoaderData
*
cld
)
{
cld
->
oops_do
(
&
MarkSweep
::
adjust_pointer_closure
,
&
MarkSweep
::
adjust_klass_closure
,
true
);
}
void
MarkSweep
::
follow_stack
()
{
do
{
while
(
!
_marking_stack
.
is_empty
())
{
...
...
src/share/vm/gc_implementation/shared/markSweep.hpp
浏览文件 @
df91a9e0
...
...
@@ -172,10 +172,8 @@ class MarkSweep : AllStatic {
static
void
follow_stack
();
// Empty marking stack.
static
void
follow_klass
(
Klass
*
klass
);
static
void
adjust_klass
(
Klass
*
klass
);
static
void
follow_class_loader
(
ClassLoaderData
*
cld
);
static
void
adjust_class_loader
(
ClassLoaderData
*
cld
);
static
void
preserve_mark
(
oop
p
,
markOop
mark
);
// Save the mark word so it can be restored later
...
...
src/share/vm/gc_implementation/shared/markSweep.inline.hpp
浏览文件 @
df91a9e0
...
...
@@ -44,6 +44,11 @@ inline void MarkSweep::mark_object(oop obj) {
}
}
inline
void
MarkSweep
::
follow_klass
(
Klass
*
klass
)
{
oop
op
=
klass
->
klass_holder
();
MarkSweep
::
mark_and_push
(
&
op
);
}
template
<
class
T
>
inline
void
MarkSweep
::
follow_root
(
T
*
p
)
{
assert
(
!
Universe
::
heap
()
->
is_in_reserved
(
p
),
"roots shouldn't be things within the heap"
);
...
...
src/share/vm/interpreter/linkResolver.cpp
浏览文件 @
df91a9e0
...
...
@@ -242,7 +242,7 @@ void LinkResolver::resolve_klass(KlassHandle& result, constantPoolHandle pool, i
// Look up method in klasses, including static methods
// Then look up local default methods
void
LinkResolver
::
lookup_method_in_klasses
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
TRAPS
)
{
void
LinkResolver
::
lookup_method_in_klasses
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
bool
checkpolymorphism
,
TRAPS
)
{
Method
*
result_oop
=
klass
->
uncached_lookup_method
(
name
,
signature
);
if
(
result_oop
==
NULL
)
{
Array
<
Method
*>*
default_methods
=
InstanceKlass
::
cast
(
klass
())
->
default_methods
();
...
...
@@ -251,7 +251,7 @@ void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle kl
}
}
if
(
EnableInvokeDynamic
&&
result_oop
!=
NULL
)
{
if
(
checkpolymorphism
&&
EnableInvokeDynamic
&&
result_oop
!=
NULL
)
{
vmIntrinsics
::
ID
iid
=
result_oop
->
intrinsic_id
();
if
(
MethodHandles
::
is_signature_polymorphic
(
iid
))
{
// Do not link directly to these. The VM must produce a synthetic one using lookup_polymorphic_method.
...
...
@@ -267,8 +267,8 @@ void LinkResolver::lookup_instance_method_in_klasses(methodHandle& result, Klass
Method
*
result_oop
=
klass
->
uncached_lookup_method
(
name
,
signature
);
result
=
methodHandle
(
THREAD
,
result_oop
);
while
(
!
result
.
is_null
()
&&
result
->
is_static
()
&&
result
->
method_holder
()
->
super
()
!=
NULL
)
{
klass
=
KlassHandle
(
THREAD
,
result
->
method_holder
()
->
super
());
result
=
methodHandle
(
THREAD
,
klass
->
uncached_lookup_method
(
name
,
signature
));
KlassHandle
super_
klass
=
KlassHandle
(
THREAD
,
result
->
method_holder
()
->
super
());
result
=
methodHandle
(
THREAD
,
super_
klass
->
uncached_lookup_method
(
name
,
signature
));
}
if
(
result
.
is_null
())
{
...
...
@@ -503,11 +503,14 @@ void LinkResolver::resolve_method_statically(methodHandle& resolved_method, Klas
}
if
(
code
==
Bytecodes
::
_invokeinterface
)
{
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
true
,
CHECK
);
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
true
,
true
,
CHECK
);
}
else
if
(
code
==
Bytecodes
::
_invokevirtual
)
{
resolve_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
true
,
true
,
CHECK
);
}
else
{
}
else
if
(
!
resolved_klass
->
is_interface
())
{
resolve_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
true
,
false
,
CHECK
);
}
else
{
bool
nostatics
=
(
code
==
Bytecodes
::
_invokestatic
)
?
false
:
true
;
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
true
,
nostatics
,
CHECK
);
}
}
...
...
@@ -528,7 +531,7 @@ void LinkResolver::resolve_method(methodHandle& resolved_method, KlassHandle res
}
// 2. lookup method in resolved klass and its super klasses
lookup_method_in_klasses
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
CHECK
);
lookup_method_in_klasses
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
true
,
CHECK
);
if
(
resolved_method
.
is_null
())
{
// not found in the class hierarchy
// 3. lookup method in all the interfaces implemented by the resolved klass
...
...
@@ -612,7 +615,8 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
TRAPS
)
{
bool
check_access
,
bool
nostatics
,
TRAPS
)
{
// check if klass is interface
if
(
!
resolved_klass
->
is_interface
())
{
...
...
@@ -623,7 +627,8 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method,
}
// lookup method in this interface or its super, java.lang.Object
lookup_instance_method_in_klasses
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
CHECK
);
// JDK8: also look for static methods
lookup_method_in_klasses
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
false
,
CHECK
);
if
(
resolved_method
.
is_null
())
{
// lookup method in all the super-interfaces
...
...
@@ -638,6 +643,16 @@ void LinkResolver::resolve_interface_method(methodHandle& resolved_method,
}
}
if
(
nostatics
&&
resolved_method
->
is_static
())
{
ResourceMark
rm
(
THREAD
);
char
buf
[
200
];
jio_snprintf
(
buf
,
sizeof
(
buf
),
"Expected instance not static method %s"
,
Method
::
name_and_sig_as_C_string
(
resolved_klass
(),
resolved_method
->
name
(),
resolved_method
->
signature
()));
THROW_MSG
(
vmSymbols
::
java_lang_IncompatibleClassChangeError
(),
buf
);
}
if
(
check_access
)
{
// JDK8 adds non-public interface methods, and accessability check requirement
assert
(
current_klass
.
not_null
()
,
"current_klass should not be null"
);
...
...
@@ -864,7 +879,11 @@ void LinkResolver::linktime_resolve_static_method(methodHandle& resolved_method,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
TRAPS
)
{
resolve_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
false
,
CHECK
);
if
(
!
resolved_klass
->
is_interface
())
{
resolve_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
false
,
CHECK
);
}
else
{
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
false
,
CHECK
);
}
assert
(
resolved_method
->
name
()
!=
vmSymbols
::
class_initializer_name
(),
"should have been checked in verifier"
);
// check if static
...
...
@@ -898,7 +917,11 @@ void LinkResolver::linktime_resolve_special_method(methodHandle& resolved_method
// and the selected method is recalculated relative to the direct superclass
// superinterface.method, which explicitly does not check shadowing
resolve_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
false
,
CHECK
);
if
(
!
resolved_klass
->
is_interface
())
{
resolve_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
false
,
CHECK
);
}
else
{
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
true
,
CHECK
);
}
// check if method name is <init>, that it is found in same klass as static type
if
(
resolved_method
->
name
()
==
vmSymbols
::
object_initializer_name
()
&&
...
...
@@ -1219,7 +1242,7 @@ void LinkResolver::resolve_interface_call(CallInfo& result, Handle recv, KlassHa
void
LinkResolver
::
linktime_resolve_interface_method
(
methodHandle
&
resolved_method
,
KlassHandle
resolved_klass
,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
TRAPS
)
{
// normal interface method resolution
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
CHECK
);
resolve_interface_method
(
resolved_method
,
resolved_klass
,
method_name
,
method_signature
,
current_klass
,
check_access
,
true
,
CHECK
);
assert
(
resolved_method
->
name
()
!=
vmSymbols
::
object_initializer_name
(),
"should have been checked in verifier"
);
assert
(
resolved_method
->
name
()
!=
vmSymbols
::
class_initializer_name
(),
"should have been checked in verifier"
);
...
...
src/share/vm/interpreter/linkResolver.hpp
浏览文件 @
df91a9e0
...
...
@@ -124,7 +124,7 @@ class LinkResolver: AllStatic {
friend
class
klassItable
;
private:
static
void
lookup_method_in_klasses
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
TRAPS
);
static
void
lookup_method_in_klasses
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
bool
checkpolymorphism
,
TRAPS
);
static
void
lookup_instance_method_in_klasses
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
TRAPS
);
static
void
lookup_method_in_interfaces
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
TRAPS
);
static
void
lookup_polymorphic_method
(
methodHandle
&
result
,
KlassHandle
klass
,
Symbol
*
name
,
Symbol
*
signature
,
...
...
@@ -134,7 +134,7 @@ class LinkResolver: AllStatic {
static
void
resolve_pool
(
KlassHandle
&
resolved_klass
,
Symbol
*&
method_name
,
Symbol
*&
method_signature
,
KlassHandle
&
current_klass
,
constantPoolHandle
pool
,
int
index
,
TRAPS
);
static
void
resolve_interface_method
(
methodHandle
&
resolved_method
,
KlassHandle
resolved_klass
,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
TRAPS
);
static
void
resolve_interface_method
(
methodHandle
&
resolved_method
,
KlassHandle
resolved_klass
,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
bool
nostatics
,
TRAPS
);
static
void
resolve_method
(
methodHandle
&
resolved_method
,
KlassHandle
resolved_klass
,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
bool
require_methodref
,
TRAPS
);
static
void
linktime_resolve_static_method
(
methodHandle
&
resolved_method
,
KlassHandle
resolved_klass
,
Symbol
*
method_name
,
Symbol
*
method_signature
,
KlassHandle
current_klass
,
bool
check_access
,
TRAPS
);
...
...
src/share/vm/oops/instanceKlass.cpp
浏览文件 @
df91a9e0
...
...
@@ -1427,6 +1427,17 @@ Method* InstanceKlass::find_method(Symbol* name, Symbol* signature) const {
return
InstanceKlass
::
find_method
(
methods
(),
name
,
signature
);
}
// find_instance_method looks up the name/signature in the local methods array
// and skips over static methods
Method
*
InstanceKlass
::
find_instance_method
(
Array
<
Method
*>*
methods
,
Symbol
*
name
,
Symbol
*
signature
)
{
Method
*
meth
=
InstanceKlass
::
find_method
(
methods
,
name
,
signature
);
if
(
meth
!=
NULL
&&
meth
->
is_static
())
{
meth
=
NULL
;
}
return
meth
;
}
// find_method looks up the name/signature in the local methods array
Method
*
InstanceKlass
::
find_method
(
Array
<
Method
*>*
methods
,
Symbol
*
name
,
Symbol
*
signature
)
{
...
...
@@ -2169,7 +2180,6 @@ int InstanceKlass::oop_adjust_pointers(oop obj) {
obj
,
\
MarkSweep
::
adjust_pointer
(
p
),
\
assert_is_in
)
MarkSweep
::
adjust_klass
(
obj
->
klass
());
return
size
;
}
...
...
src/share/vm/oops/instanceKlass.hpp
浏览文件 @
df91a9e0
...
...
@@ -515,6 +515,7 @@ class InstanceKlass: public Klass {
// find a local method (returns NULL if not found)
Method
*
find_method
(
Symbol
*
name
,
Symbol
*
signature
)
const
;
static
Method
*
find_method
(
Array
<
Method
*>*
methods
,
Symbol
*
name
,
Symbol
*
signature
);
static
Method
*
find_instance_method
(
Array
<
Method
*>*
methods
,
Symbol
*
name
,
Symbol
*
signature
);
// find a local method index in default_methods (returns -1 if not found)
static
int
find_method_index
(
Array
<
Method
*>*
methods
,
Symbol
*
name
,
Symbol
*
signature
);
...
...
src/share/vm/oops/instanceMirrorKlass.cpp
浏览文件 @
df91a9e0
...
...
@@ -155,7 +155,13 @@ void InstanceMirrorKlass::oop_follow_contents(oop obj) {
// Follow the klass field in the mirror.
Klass
*
klass
=
java_lang_Class
::
as_Klass
(
obj
);
if
(
klass
!=
NULL
)
{
MarkSweep
::
follow_klass
(
klass
);
// For anonymous classes we need to handle the class loader data,
// otherwise it won't be claimed and can be unloaded.
if
(
klass
->
oop_is_instance
()
&&
InstanceKlass
::
cast
(
klass
)
->
is_anonymous
())
{
MarkSweep
::
follow_class_loader
(
klass
->
class_loader_data
());
}
else
{
MarkSweep
::
follow_klass
(
klass
);
}
}
else
{
// If klass is NULL then this a mirror for a primitive type.
// We don't have to follow them, since they are handled as strong
...
...
@@ -196,17 +202,6 @@ int InstanceMirrorKlass::oop_adjust_pointers(oop obj) {
int
size
=
oop_size
(
obj
);
InstanceKlass
::
oop_adjust_pointers
(
obj
);
// Follow the klass field in the mirror.
Klass
*
klass
=
java_lang_Class
::
as_Klass
(
obj
);
if
(
klass
!=
NULL
)
{
MarkSweep
::
adjust_klass
(
klass
);
}
else
{
// If klass is NULL then this a mirror for a primitive type.
// We don't have to follow them, since they are handled as strong
// roots in Universe::oops_do.
assert
(
java_lang_Class
::
is_primitive
(
obj
),
"Sanity check"
);
}
InstanceMirrorKlass_OOP_ITERATE
(
\
start_of_static_fields
(
obj
),
java_lang_Class
::
static_oop_field_count
(
obj
),
\
MarkSweep
::
adjust_pointer
(
p
),
\
...
...
src/share/vm/oops/klassVtable.cpp
浏览文件 @
df91a9e0
...
...
@@ -665,6 +665,11 @@ bool klassVtable::is_miranda_entry_at(int i) {
// check if a method is a miranda method, given a class's methods table,
// its default_method table and its super
// Miranda methods are calculated twice:
// first: before vtable size calculation: including abstract and default
// This is seen by default method creation
// Second: recalculated during vtable initialization: only abstract
// This is seen by link resolution and selection.
// "miranda" means not static, not defined by this class.
// private methods in interfaces do not belong in the miranda list.
// the caller must make sure that the method belongs to an interface implemented by the class
...
...
@@ -678,7 +683,8 @@ bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
}
Symbol
*
name
=
m
->
name
();
Symbol
*
signature
=
m
->
signature
();
if
(
InstanceKlass
::
find_method
(
class_methods
,
name
,
signature
)
==
NULL
)
{
if
(
InstanceKlass
::
find_instance_method
(
class_methods
,
name
,
signature
)
==
NULL
)
{
// did not find it in the method table of the current class
if
((
default_methods
==
NULL
)
||
InstanceKlass
::
find_method
(
default_methods
,
name
,
signature
)
==
NULL
)
{
...
...
@@ -688,6 +694,12 @@ bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
}
Method
*
mo
=
InstanceKlass
::
cast
(
super
)
->
lookup_method
(
name
,
signature
);
while
(
mo
!=
NULL
&&
mo
->
access_flags
().
is_static
()
&&
mo
->
method_holder
()
!=
NULL
&&
mo
->
method_holder
()
->
super
()
!=
NULL
)
{
mo
=
mo
->
method_holder
()
->
super
()
->
uncached_lookup_method
(
name
,
signature
);
}
if
(
mo
==
NULL
||
mo
->
access_flags
().
is_private
()
)
{
// super class hierarchy does not implement it or protection is different
return
true
;
...
...
src/share/vm/oops/objArrayKlass.cpp
浏览文件 @
df91a9e0
...
...
@@ -569,7 +569,6 @@ int ObjArrayKlass::oop_adjust_pointers(oop obj) {
// Get size before changing pointers.
// Don't call size() or oop_size() since that is a virtual call.
int
size
=
a
->
object_size
();
MarkSweep
::
adjust_klass
(
a
->
klass
());
ObjArrayKlass_OOP_ITERATE
(
a
,
p
,
MarkSweep
::
adjust_pointer
(
p
))
return
size
;
}
...
...
src/share/vm/opto/c2_globals.hpp
浏览文件 @
df91a9e0
...
...
@@ -637,7 +637,7 @@
diagnostic(bool, OptimizeExpensiveOps, true, \
"Find best control for expensive operations") \
\
product(bool, UseMathExactIntrinsics, true,
\
experimental(bool, UseMathExactIntrinsics, false,
\
"Enables intrinsification of various java.lang.Math functions") \
\
experimental(bool, ReplaceInParentMaps, false, \
...
...
src/share/vm/prims/jvmtiEnvThreadState.cpp
浏览文件 @
df91a9e0
...
...
@@ -269,11 +269,20 @@ class VM_GetCurrentLocation : public VM_Operation {
void
doit
()
{
ResourceMark
rmark
;
// _thread != Thread::current()
RegisterMap
rm
(
_thread
,
false
);
javaVFrame
*
vf
=
_thread
->
last_java_vframe
(
&
rm
);
assert
(
vf
!=
NULL
,
"must have last java frame"
);
Method
*
method
=
vf
->
method
();
_method_id
=
method
->
jmethod_id
();
_bci
=
vf
->
bci
();
// There can be a race condition between a VM_Operation reaching a safepoint
// and the target thread exiting from Java execution.
// We must recheck the last Java frame still exists.
if
(
_thread
->
has_last_Java_frame
())
{
javaVFrame
*
vf
=
_thread
->
last_java_vframe
(
&
rm
);
assert
(
vf
!=
NULL
,
"must have last java frame"
);
Method
*
method
=
vf
->
method
();
_method_id
=
method
->
jmethod_id
();
_bci
=
vf
->
bci
();
}
else
{
// Clear current location as the target thread has no Java frames anymore.
_method_id
=
(
jmethodID
)
NULL
;
_bci
=
0
;
}
}
void
get_current_location
(
jmethodID
*
method_id
,
int
*
bci
)
{
*
method_id
=
_method_id
;
...
...
src/share/vm/prims/jvmtiImpl.hpp
浏览文件 @
df91a9e0
...
...
@@ -299,7 +299,7 @@ public:
static
inline
bool
is_breakpoint
(
address
bcp
);
static
void
oops_do
(
OopClosure
*
f
);
static
void
metadata_do
(
void
f
(
Metadata
*
));
static
void
metadata_do
(
void
f
(
Metadata
*
))
NOT_JVMTI_RETURN
;
static
void
gc_epilogue
();
};
...
...
src/share/vm/runtime/arguments.cpp
浏览文件 @
df91a9e0
...
...
@@ -2278,18 +2278,6 @@ bool Arguments::check_vm_args_consistency() {
status
=
status
&&
verify_percentage
(
MarkSweepDeadRatio
,
"MarkSweepDeadRatio"
);
status
=
status
&&
verify_min_value
(
MarkSweepAlwaysCompactCount
,
1
,
"MarkSweepAlwaysCompactCount"
);
#ifdef SPARC
if
(
UseConcMarkSweepGC
||
UseG1GC
)
{
// Issue a stern warning if the user has explicitly set
// UseMemSetInBOT (it is known to cause issues), but allow
// use for experimentation and debugging.
if
(
VM_Version
::
is_sun4v
()
&&
UseMemSetInBOT
)
{
assert
(
!
FLAG_IS_DEFAULT
(
UseMemSetInBOT
),
"Error"
);
warning
(
"Experimental flag -XX:+UseMemSetInBOT is known to cause instability"
" on sun4v; please understand that you are using at your own risk!"
);
}
}
#endif // SPARC
if
(
PrintNMTStatistics
)
{
#if INCLUDE_NMT
...
...
test/TEST.groups
浏览文件 @
df91a9e0
...
...
@@ -70,7 +70,6 @@ needs_jdk = \
runtime/7107135/Test7107135.sh \
runtime/7158988/FieldMonitor.java \
runtime/7194254/Test7194254.java \
runtime/8026365/InvokeSpecialAnonTest.java \
runtime/jsig/Test8017498.sh \
runtime/Metaspace/FragmentMetaspace.java \
runtime/NMT/BaselineWithParameter.java \
...
...
test/compiler/intrinsics/mathexact/AddExactICondTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @summary Test non constant addExact
* @compile AddExactICondTest.java
* @run main AddExactICondTest
* @run main AddExactICondTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactIConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @summary Test constant addExact
* @compile AddExactIConstantTest.java Verify.java
* @run main AddExactIConstantTest
* @run main AddExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactILoadTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @summary Test non constant addExact
* @compile AddExactILoadTest.java Verify.java
* @run main AddExactILoadTest
* @run main AddExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @summary Test non constant addExact
* @compile AddExactILoopDependentTest.java Verify.java
* @run main AddExactILoopDependentTest
* @run main AddExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @summary Test non constant addExact
* @compile AddExactINonConstantTest.java Verify.java
* @run main AddExactINonConstantTest
* @run main AddExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8025657
* @summary Test repeating addExact
* @compile AddExactIRepeatTest.java Verify.java
* @run main AddExactIRepeatTest
* @run main AddExactIRepeatTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactLConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant addExact
* @compile AddExactLConstantTest.java Verify.java
* @run main AddExactLConstantTest
* @run main AddExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant addExact
* @compile AddExactLNonConstantTest.java Verify.java
* @run main AddExactLNonConstantTest
* @run main AddExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/CompareTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026722
* @summary Verify that the compare after addExact is a signed compare
* @compile CompareTest.java
* @run main CompareTest
* @run main CompareTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/DecExactITest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test decrementExact
* @compile DecExactITest.java Verify.java
* @run main DecExactITest
* @run main DecExactITest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/DecExactLTest.java
浏览文件 @
df91a9e0
...
...
@@ -25,8 +25,8 @@
* @test
* @bug 8026844
* @summary Test decrementExact
* @compile DecExact
I
Test.java Verify.java
* @run main DecExact
ITest
* @compile DecExact
L
Test.java Verify.java
* @run main DecExact
LTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/GVNTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8028207
* @summary Verify that GVN doesn't mess up the two addExacts
* @compile GVNTest.java
* @run main GVNTest
* @run main GVNTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/IncExactITest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test incrementExact
* @compile IncExactITest.java Verify.java
* @run main IncExactITest
* @run main IncExactITest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/IncExactLTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test incrementExact
* @compile IncExactLTest.java Verify.java
* @run main IncExactLTest
* @run main IncExactLTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactICondTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test multiplyExact as condition
* @compile MulExactICondTest.java
* @run main MulExactICondTest
* @run main MulExactICondTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactIConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant multiplyExact
* @compile MulExactIConstantTest.java Verify.java
* @run main MulExactIConstantTest
* @run main MulExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactILoadTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test multiplyExact
* @compile MulExactILoadTest.java Verify.java
* @run main MulExactILoadTest
* @run main MulExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test loop dependent multiplyExact
* @compile MulExactILoopDependentTest.java Verify.java
* @run main MulExactILoopDependentTest
* @run main MulExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
public
class
MulExactILoopDependentTest
{
...
...
test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant multiplyExact
* @compile MulExactINonConstantTest.java Verify.java
* @run main MulExactINonConstantTest
* @run main MulExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test repeating multiplyExact
* @compile MulExactIRepeatTest.java Verify.java
* @run main MulExactIRepeatTest
* @run main MulExactIRepeatTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactLConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant mulExact
* @compile MulExactLConstantTest.java Verify.java
* @run main MulExactLConstantTest
* @run main MulExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant mulExact
* @compile MulExactLNonConstantTest.java Verify.java
* @run main MulExactLNonConstantTest
* @run main MulExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/NegExactIConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant negExact
* @compile NegExactIConstantTest.java Verify.java
* @run main NegExactIConstantTest
* @run main NegExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/NegExactILoadTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test negExact
* @compile NegExactILoadTest.java Verify.java
* @run main NegExactILoadTest
* @run main NegExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test negExact loop dependent
* @compile NegExactILoopDependentTest.java Verify.java
* @run main NegExactILoopDependentTest
* @run main NegExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
public
class
NegExactILoopDependentTest
{
...
...
test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant negExact
* @compile NegExactINonConstantTest.java Verify.java
* @run main NegExactINonConstantTest
* @run main NegExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/NegExactLConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant negExact
* @compile NegExactLConstantTest.java Verify.java
* @run main NegExactLConstantTest
* @run main NegExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant negExact
* @compile NegExactLNonConstantTest.java Verify.java
* @run main NegExactLNonConstantTest
* @run main NegExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/NestedMathExactTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8027444
* @summary Test nested loops
* @compile NestedMathExactTest.java
* @run main NestedMathExactTest
* @run main NestedMathExactTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SplitThruPhiTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8028198
* @summary Verify that split through phi does the right thing
* @compile SplitThruPhiTest.java
* @run main SplitThruPhiTest
* @run main SplitThruPhiTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactICondTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test subtractExact as condition
* @compile SubExactICondTest.java Verify.java
* @run main SubExactICondTest
* @run main SubExactICondTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactIConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test constant subtractExact
* @compile SubExactIConstantTest.java Verify.java
* @run main SubExactIConstantTest
* @run main SubExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactILoadTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant subtractExact
* @compile SubExactILoadTest.java Verify.java
* @run main SubExactILoadTest
* @run main SubExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant subtractExact
* @compile SubExactILoopDependentTest.java Verify.java
* @run main SubExactILoopDependentTest
* @run main SubExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test non constant subtractExact
* @compile SubExactINonConstantTest.java Verify.java
* @run main SubExactINonConstantTest
* @run main SubExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java
浏览文件 @
df91a9e0
...
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @summary Test repeating subtractExact
* @compile SubExactIRepeatTest.java Verify.java
* @run main SubExactIRepeatTest
* @run main SubExactIRepeatTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactLConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -27,7 +27,7 @@
* @bug 8027353
* @summary Test constant subtractExact
* @compile SubExactLConstantTest.java Verify.java
* @run main SubExactLConstantTest
* @run main SubExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java
浏览文件 @
df91a9e0
...
...
@@ -27,7 +27,7 @@
* @bug 8027353
* @summary Test non constant subtractExact
* @compile SubExactLNonConstantTest.java Verify.java
* @run main SubExactLNonConstantTest
* @run main SubExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
*
*/
...
...
test/runtime/8024804/RegisterNatives.java
浏览文件 @
df91a9e0
...
...
@@ -22,6 +22,7 @@
*/
/*
* @ignore 8028741
* @test
* @bug 8024804
* @summary registerNatives() interface resolution should receive IAE
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录