Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
e70c00fe
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e70c00fe
编写于
10月 19, 2010
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6968367: can_post_on_exceptions is still using VM_DeoptimizeFrame in some places
Reviewed-by: kvn, twisti
上级
96ad7c77
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
35 addition
and
18 deletion
+35
-18
hotspot/src/share/vm/c1/c1_Runtime1.cpp
hotspot/src/share/vm/c1/c1_Runtime1.cpp
+4
-7
hotspot/src/share/vm/includeDB_features
hotspot/src/share/vm/includeDB_features
+1
-0
hotspot/src/share/vm/includeDB_jvmti
hotspot/src/share/vm/includeDB_jvmti
+1
-0
hotspot/src/share/vm/prims/jvmtiEnv.cpp
hotspot/src/share/vm/prims/jvmtiEnv.cpp
+1
-2
hotspot/src/share/vm/prims/jvmtiEnvBase.cpp
hotspot/src/share/vm/prims/jvmtiEnvBase.cpp
+1
-2
hotspot/src/share/vm/prims/jvmtiImpl.cpp
hotspot/src/share/vm/prims/jvmtiImpl.cpp
+1
-2
hotspot/src/share/vm/runtime/deoptimization.cpp
hotspot/src/share/vm/runtime/deoptimization.cpp
+13
-1
hotspot/src/share/vm/runtime/deoptimization.hpp
hotspot/src/share/vm/runtime/deoptimization.hpp
+4
-0
hotspot/src/share/vm/runtime/safepoint.cpp
hotspot/src/share/vm/runtime/safepoint.cpp
+1
-2
hotspot/src/share/vm/runtime/vm_operations.cpp
hotspot/src/share/vm/runtime/vm_operations.cpp
+1
-1
hotspot/src/share/vm/runtime/vm_operations.hpp
hotspot/src/share/vm/runtime/vm_operations.hpp
+7
-1
未找到文件。
hotspot/src/share/vm/c1/c1_Runtime1.cpp
浏览文件 @
e70c00fe
...
...
@@ -107,7 +107,6 @@ static void deopt_caller() {
RegisterMap
reg_map
(
thread
,
false
);
frame
runtime_frame
=
thread
->
last_frame
();
frame
caller_frame
=
runtime_frame
.
sender
(
&
reg_map
);
// bypass VM_DeoptimizeFrame and deoptimize the frame directly
Deoptimization
::
deoptimize_frame
(
thread
,
caller_frame
.
id
());
assert
(
caller_is_deopted
(),
"Must be deoptimized"
);
}
...
...
@@ -368,8 +367,7 @@ JRT_BLOCK_ENTRY(address, Runtime1::counter_overflow(JavaThread* thread, int bci,
if
(
osr_nm
!=
NULL
)
{
RegisterMap
map
(
thread
,
false
);
frame
fr
=
thread
->
last_frame
().
sender
(
&
map
);
VM_DeoptimizeFrame
deopt
(
thread
,
fr
.
id
());
VMThread
::
execute
(
&
deopt
);
Deoptimization
::
deoptimize_frame
(
thread
,
fr
.
id
());
}
JRT_BLOCK_END
return
NULL
;
...
...
@@ -441,8 +439,8 @@ JRT_ENTRY_NO_ASYNC(static address, exception_handler_for_pc_helper(JavaThread* t
// We don't really want to deoptimize the nmethod itself since we
// can actually continue in the exception handler ourselves but I
// don't see an easy way to have the desired effect.
VM_DeoptimizeFrame
deopt
(
thread
,
caller_frame
.
id
());
VMThread
::
execute
(
&
deopt
);
Deoptimization
::
deoptimize_frame
(
thread
,
caller_frame
.
id
());
assert
(
caller_is_deopted
(),
"Must be deoptimized"
);
return
SharedRuntime
::
deopt_blob
()
->
unpack_with_exception_in_tls
();
}
...
...
@@ -835,8 +833,7 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_i
nm
->
make_not_entrant
();
}
VM_DeoptimizeFrame
deopt
(
thread
,
caller_frame
.
id
());
VMThread
::
execute
(
&
deopt
);
Deoptimization
::
deoptimize_frame
(
thread
,
caller_frame
.
id
());
// Return to the now deoptimized frame.
}
...
...
hotspot/src/share/vm/includeDB_features
浏览文件 @
e70c00fe
...
...
@@ -154,6 +154,7 @@ jvmtiExtensions.hpp allocation.hpp
jvmtiExtensions.hpp jvmti.h
jvmtiExtensions.hpp jvmtiEnv.hpp
jvmtiImpl.cpp deoptimization.hpp
jvmtiImpl.cpp exceptions.hpp
jvmtiImpl.cpp handles.hpp
jvmtiImpl.cpp handles.inline.hpp
...
...
hotspot/src/share/vm/includeDB_jvmti
浏览文件 @
e70c00fe
...
...
@@ -87,6 +87,7 @@ jvmtiEnv.cpp vmThread.hpp
jvmtiEnv.hpp jvmtiEnvBase.hpp
jvmtiEnvBase.cpp biasedLocking.hpp
jvmtiEnvBase.cpp deoptimization.hpp
jvmtiEnvBase.cpp interfaceSupport.hpp
jvmtiEnvBase.cpp jfieldIDWorkaround.hpp
jvmtiEnvBase.cpp jvmtiEnv.hpp
...
...
hotspot/src/share/vm/prims/jvmtiEnv.cpp
浏览文件 @
e70c00fe
...
...
@@ -1407,8 +1407,7 @@ JvmtiEnv::PopFrame(JavaThread* java_thread) {
// If any of the top 2 frames is a compiled one, need to deoptimize it
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
if
(
!
is_interpreted
[
i
])
{
VM_DeoptimizeFrame
op
(
java_thread
,
frame_sp
[
i
]);
VMThread
::
execute
(
&
op
);
Deoptimization
::
deoptimize_frame
(
java_thread
,
frame_sp
[
i
]);
}
}
...
...
hotspot/src/share/vm/prims/jvmtiEnvBase.cpp
浏览文件 @
e70c00fe
...
...
@@ -1322,8 +1322,7 @@ JvmtiEnvBase::check_top_frame(JavaThread* current_thread, JavaThread* java_threa
if
(
!
vf
->
fr
().
can_be_deoptimized
())
{
return
JVMTI_ERROR_OPAQUE_FRAME
;
}
VM_DeoptimizeFrame
deopt
(
java_thread
,
jvf
->
fr
().
id
());
VMThread
::
execute
(
&
deopt
);
Deoptimization
::
deoptimize_frame
(
java_thread
,
jvf
->
fr
().
id
());
}
// Get information about method return type
...
...
hotspot/src/share/vm/prims/jvmtiImpl.cpp
浏览文件 @
e70c00fe
...
...
@@ -799,8 +799,7 @@ void VM_GetOrSetLocal::doit() {
// Schedule deoptimization so that eventually the local
// update will be written to an interpreter frame.
VM_DeoptimizeFrame
deopt
(
_jvf
->
thread
(),
_jvf
->
fr
().
id
());
VMThread
::
execute
(
&
deopt
);
Deoptimization
::
deoptimize_frame
(
_jvf
->
thread
(),
_jvf
->
fr
().
id
());
// Now store a new value for the local which will be applied
// once deoptimization occurs. Note however that while this
...
...
hotspot/src/share/vm/runtime/deoptimization.cpp
浏览文件 @
e70c00fe
...
...
@@ -1065,7 +1065,9 @@ void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map)
}
void
Deoptimization
::
deoptimize_frame
(
JavaThread
*
thread
,
intptr_t
*
id
)
{
void
Deoptimization
::
deoptimize_frame_internal
(
JavaThread
*
thread
,
intptr_t
*
id
)
{
assert
(
thread
==
Thread
::
current
()
||
SafepointSynchronize
::
is_at_safepoint
(),
"can only deoptimize other thread at a safepoint"
);
// Compute frame and register map based on thread and sp.
RegisterMap
reg_map
(
thread
,
UseBiasedLocking
);
frame
fr
=
thread
->
last_frame
();
...
...
@@ -1076,6 +1078,16 @@ void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) {
}
void
Deoptimization
::
deoptimize_frame
(
JavaThread
*
thread
,
intptr_t
*
id
)
{
if
(
thread
==
Thread
::
current
())
{
Deoptimization
::
deoptimize_frame_internal
(
thread
,
id
);
}
else
{
VM_DeoptimizeFrame
deopt
(
thread
,
id
);
VMThread
::
execute
(
&
deopt
);
}
}
// JVMTI PopFrame support
JRT_LEAF
(
void
,
Deoptimization
::
popframe_preserve_args
(
JavaThread
*
thread
,
int
bytes_to_save
,
void
*
start_address
))
{
...
...
hotspot/src/share/vm/runtime/deoptimization.hpp
浏览文件 @
e70c00fe
...
...
@@ -216,6 +216,10 @@ class Deoptimization : AllStatic {
// Only called from VMDeoptimizeFrame
// @argument thread. Thread where stub_frame resides.
// @argument id. id of frame that should be deoptimized.
static
void
deoptimize_frame_internal
(
JavaThread
*
thread
,
intptr_t
*
id
);
// If thread is not the current thread then execute
// VM_DeoptimizeFrame otherwise deoptimize directly.
static
void
deoptimize_frame
(
JavaThread
*
thread
,
intptr_t
*
id
);
// Statistics
...
...
hotspot/src/share/vm/runtime/safepoint.cpp
浏览文件 @
e70c00fe
...
...
@@ -940,8 +940,7 @@ void ThreadSafepointState::handle_polling_page_exception() {
// as otherwise we may never deliver it.
if
(
thread
()
->
has_async_condition
())
{
ThreadInVMfromJavaNoAsyncException
__tiv
(
thread
());
VM_DeoptimizeFrame
deopt
(
thread
(),
caller_fr
.
id
());
VMThread
::
execute
(
&
deopt
);
Deoptimization
::
deoptimize_frame
(
thread
(),
caller_fr
.
id
());
}
// If an exception has been installed we must check for a pending deoptimization
...
...
hotspot/src/share/vm/runtime/vm_operations.cpp
浏览文件 @
e70c00fe
...
...
@@ -100,7 +100,7 @@ VM_DeoptimizeFrame::VM_DeoptimizeFrame(JavaThread* thread, intptr_t* id) {
void
VM_DeoptimizeFrame
::
doit
()
{
Deoptimization
::
deoptimize_frame
(
_thread
,
_id
);
Deoptimization
::
deoptimize_frame
_internal
(
_thread
,
_id
);
}
...
...
hotspot/src/share/vm/runtime/vm_operations.hpp
浏览文件 @
e70c00fe
...
...
@@ -231,12 +231,18 @@ class VM_Deoptimize: public VM_Operation {
bool
allow_nested_vm_operations
()
const
{
return
true
;
}
};
// Deopt helper that can deoptimize frames in threads other than the
// current thread. Only used through Deoptimization::deoptimize_frame.
class
VM_DeoptimizeFrame
:
public
VM_Operation
{
friend
class
Deoptimization
;
private:
JavaThread
*
_thread
;
intptr_t
*
_id
;
public:
VM_DeoptimizeFrame
(
JavaThread
*
thread
,
intptr_t
*
id
);
public:
VMOp_Type
type
()
const
{
return
VMOp_DeoptimizeFrame
;
}
void
doit
();
bool
allow_nested_vm_operations
()
const
{
return
true
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录