Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
d699ae08
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看板
提交
d699ae08
编写于
12月 06, 2013
作者:
H
hseigel
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
8cb2a129
402082eb
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
58 addition
and
33 deletion
+58
-33
agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java
agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java
+37
-21
agent/src/share/classes/sun/jvm/hotspot/runtime/ThreadLocalAllocBuffer.java
...asses/sun/jvm/hotspot/runtime/ThreadLocalAllocBuffer.java
+1
-1
src/cpu/x86/vm/frame_x86.cpp
src/cpu/x86/vm/frame_x86.cpp
+5
-7
src/share/vm/runtime/reflection.cpp
src/share/vm/runtime/reflection.cpp
+15
-4
未找到文件。
agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java
浏览文件 @
d699ae08
...
...
@@ -364,7 +364,7 @@ public class ObjectHeap {
}
catch
(
AddressException
e
)
{
// This is okay at the top of these regions
}
}
catch
(
UnknownOopException
e
)
{
// This is okay at the top of these regions
}
...
...
@@ -373,7 +373,7 @@ public class ObjectHeap {
visitor
.
epilogue
();
}
private
void
addLiveRegions
(
List
input
,
List
output
)
{
private
void
addLiveRegions
(
String
name
,
List
input
,
List
output
)
{
for
(
Iterator
itr
=
input
.
iterator
();
itr
.
hasNext
();)
{
MemRegion
reg
=
(
MemRegion
)
itr
.
next
();
Address
top
=
reg
.
end
();
...
...
@@ -386,6 +386,9 @@ public class ObjectHeap {
}
output
.
add
(
top
);
output
.
add
(
bottom
);
if
(
DEBUG
)
{
System
.
err
.
println
(
"Live region: "
+
name
+
": "
+
bottom
+
", "
+
top
);
}
}
}
...
...
@@ -395,7 +398,7 @@ public class ObjectHeap {
}
public
void
doSpace
(
Space
s
)
{
addLiveRegions
(
s
.
getLiveRegions
(),
liveRegions
);
addLiveRegions
(
s
.
toString
(),
s
.
getLiveRegions
(),
liveRegions
);
}
private
List
liveRegions
;
}
...
...
@@ -426,11 +429,11 @@ public class ObjectHeap {
ParallelScavengeHeap
psh
=
(
ParallelScavengeHeap
)
heap
;
PSYoungGen
youngGen
=
psh
.
youngGen
();
// Add eden space
addLiveRegions
(
youngGen
.
edenSpace
().
getLiveRegions
(),
liveRegions
);
addLiveRegions
(
"eden"
,
youngGen
.
edenSpace
().
getLiveRegions
(),
liveRegions
);
// Add from-space but not to-space
addLiveRegions
(
youngGen
.
fromSpace
().
getLiveRegions
(),
liveRegions
);
addLiveRegions
(
"from"
,
youngGen
.
fromSpace
().
getLiveRegions
(),
liveRegions
);
PSOldGen
oldGen
=
psh
.
oldGen
();
addLiveRegions
(
oldGen
.
objectSpace
().
getLiveRegions
(),
liveRegions
);
addLiveRegions
(
"old "
,
oldGen
.
objectSpace
().
getLiveRegions
(),
liveRegions
);
}
else
if
(
heap
instanceof
G1CollectedHeap
)
{
G1CollectedHeap
g1h
=
(
G1CollectedHeap
)
heap
;
g1h
.
heapRegionIterate
(
lrc
);
...
...
@@ -451,23 +454,27 @@ public class ObjectHeap {
if
(
VM
.
getVM
().
getUseTLAB
())
{
for
(
JavaThread
thread
=
VM
.
getVM
().
getThreads
().
first
();
thread
!=
null
;
thread
=
thread
.
next
())
{
if
(
thread
.
isJavaThread
())
{
ThreadLocalAllocBuffer
tlab
=
thread
.
tlab
();
if
(
tlab
.
start
()
!=
null
)
{
if
((
tlab
.
top
()
==
null
)
||
(
tlab
.
end
()
==
null
))
{
System
.
err
.
print
(
"Warning: skipping invalid TLAB for thread "
);
ThreadLocalAllocBuffer
tlab
=
thread
.
tlab
();
if
(
tlab
.
start
()
!=
null
)
{
if
((
tlab
.
top
()
==
null
)
||
(
tlab
.
end
()
==
null
))
{
System
.
err
.
print
(
"Warning: skipping invalid TLAB for thread "
);
thread
.
printThreadIDOn
(
System
.
err
);
System
.
err
.
println
();
}
else
{
if
(
DEBUG
)
{
System
.
err
.
print
(
"TLAB for "
+
thread
.
getThreadName
()
+
", #"
);
thread
.
printThreadIDOn
(
System
.
err
);
System
.
err
.
println
();
}
else
{
// Go from:
// - below start() to start()
// - start() to top()
// - end() and above
liveRegions
.
add
(
tlab
.
start
());
liveRegions
.
add
(
tlab
.
start
());
liveRegions
.
add
(
tlab
.
top
());
liveRegions
.
add
(
tlab
.
hardEnd
());
System
.
err
.
print
(
": "
);
tlab
.
printOn
(
System
.
err
);
}
// Go from:
// - below start() to start()
// - start() to top()
// - end() and above
liveRegions
.
add
(
tlab
.
start
());
liveRegions
.
add
(
tlab
.
start
());
liveRegions
.
add
(
tlab
.
top
());
liveRegions
.
add
(
tlab
.
hardEnd
());
}
}
}
...
...
@@ -480,6 +487,15 @@ public class ObjectHeap {
Assert
.
that
(
liveRegions
.
size
()
%
2
==
0
,
"Must have even number of region boundaries"
);
}
if
(
DEBUG
)
{
System
.
err
.
println
(
"liveRegions:"
);
for
(
int
i
=
0
;
i
<
liveRegions
.
size
();
i
+=
2
)
{
Address
bottom
=
(
Address
)
liveRegions
.
get
(
i
);
Address
top
=
(
Address
)
liveRegions
.
get
(
i
+
1
);
System
.
err
.
println
(
" "
+
bottom
+
" - "
+
top
);
}
}
return
liveRegions
;
}
...
...
agent/src/share/classes/sun/jvm/hotspot/runtime/ThreadLocalAllocBuffer.java
浏览文件 @
d699ae08
...
...
@@ -109,6 +109,6 @@ public class ThreadLocalAllocBuffer extends VMObject {
public
void
printOn
(
PrintStream
tty
)
{
tty
.
println
(
" ["
+
start
()
+
","
+
top
()
+
","
+
end
()
+
")"
);
top
()
+
","
+
end
()
+
"
,{"
+
hardEnd
()
+
"}
)"
);
}
}
src/cpu/x86/vm/frame_x86.cpp
浏览文件 @
d699ae08
...
...
@@ -94,13 +94,6 @@ bool frame::safe_for_sender(JavaThread *thread) {
// other generic buffer blobs are more problematic so we just assume they are
// ok. adapter blobs never have a frame complete and are never ok.
// check for a valid frame_size, otherwise we are unlikely to get a valid sender_pc
if
(
!
Interpreter
::
contains
(
_pc
)
&&
_cb
->
frame_size
()
<=
0
)
{
//assert(0, "Invalid frame_size");
return
false
;
}
if
(
!
_cb
->
is_frame_complete_at
(
_pc
))
{
if
(
_cb
->
is_nmethod
()
||
_cb
->
is_adapter_blob
()
||
_cb
->
is_runtime_stub
())
{
return
false
;
...
...
@@ -144,6 +137,11 @@ bool frame::safe_for_sender(JavaThread *thread) {
// must be some sort of compiled/runtime frame
// fp does not have to be safe (although it could be check for c1?)
// check for a valid frame_size, otherwise we are unlikely to get a valid sender_pc
if
(
_cb
->
frame_size
()
<=
0
)
{
return
false
;
}
sender_sp
=
_unextended_sp
+
_cb
->
frame_size
();
// On Intel the return_address is always the word on the stack
sender_pc
=
(
address
)
*
(
sender_sp
-
1
);
...
...
src/share/vm/runtime/reflection.cpp
浏览文件 @
d699ae08
...
...
@@ -537,15 +537,26 @@ bool Reflection::verify_field_access(Klass* current_class,
return
true
;
}
Klass
*
host_class
=
current_class
;
while
(
host_class
->
oop_is_instance
()
&&
InstanceKlass
::
cast
(
host_class
)
->
is_anonymous
())
{
Klass
*
next_host_class
=
InstanceKlass
::
cast
(
host_class
)
->
host_klass
();
if
(
next_host_class
==
NULL
)
break
;
host_class
=
next_host_class
;
}
if
(
host_class
==
field_class
)
{
return
true
;
}
if
(
access
.
is_protected
())
{
if
(
!
protected_restriction
)
{
// See if current_class is a subclass of field_class
if
(
curren
t_class
->
is_subclass_of
(
field_class
))
{
// See if current_class
(or outermost host class)
is a subclass of field_class
if
(
hos
t_class
->
is_subclass_of
(
field_class
))
{
if
(
access
.
is_static
()
||
// static fields are ok, see 6622385
current_class
==
resolved_class
||
field_class
==
resolved_class
||
curren
t_class
->
is_subclass_of
(
resolved_class
)
||
resolved_class
->
is_subclass_of
(
curren
t_class
))
{
hos
t_class
->
is_subclass_of
(
resolved_class
)
||
resolved_class
->
is_subclass_of
(
hos
t_class
))
{
return
true
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录