Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
c6c700ed
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看板
提交
c6c700ed
编写于
3月 21, 2017
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
4b871a91
0555df7e
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
64 addition
and
22 deletion
+64
-22
.hgtags
.hgtags
+6
-0
src/os/linux/vm/os_linux.cpp
src/os/linux/vm/os_linux.cpp
+1
-1
src/share/vm/classfile/javaClasses.cpp
src/share/vm/classfile/javaClasses.cpp
+10
-1
src/share/vm/classfile/javaClasses.hpp
src/share/vm/classfile/javaClasses.hpp
+3
-1
src/share/vm/oops/instanceKlass.cpp
src/share/vm/oops/instanceKlass.cpp
+7
-4
src/share/vm/oops/instanceKlass.hpp
src/share/vm/oops/instanceKlass.hpp
+1
-1
src/share/vm/prims/jvm.cpp
src/share/vm/prims/jvm.cpp
+1
-1
src/share/vm/prims/methodHandles.cpp
src/share/vm/prims/methodHandles.cpp
+31
-10
src/share/vm/prims/methodHandles.hpp
src/share/vm/prims/methodHandles.hpp
+4
-3
未找到文件。
.hgtags
浏览文件 @
c6c700ed
...
...
@@ -949,6 +949,10 @@ b132b08b28bf23a26329928cf6b4ffda5857f4d3 jdk8u121-b12
90f94521c3515e5f27af0ab9b31d036e88bb322a jdk8u121-b13
351bf1d4ff9a41137f91e2ec97ec59ed29a38d8b jdk8u121-b31
41daac438a2ac5a80755dc3de88b76e4ac66750a jdk8u121-b32
eb9e617d6f64d4ad689feac0707b5e4335b00ce2 jdk8u121-b33
c60b0994e8eee152666252c3ba4105db65c004db jdk8u121-b34
0612a789929b88612509668bea4b3138613e91e4 jdk8u121-b35
0ea269e49511a890e6fabfd468638dd1c0ed0be3 jdk8u121-b36
c0a1ba0df20fda10ddb8599e888eb56ad98b3874 jdk8u131-b00
0b85ccd6240991e1a501602ff5addec6b88ae0af jdk8u131-b01
ef90c721a4e59b01ca36f25619010a1afe9ed4d5 jdk8u131-b02
...
...
@@ -960,5 +964,7 @@ c965fc1aa840a0903709ad69aa0e2100330ccd84 jdk8u131-b05
db221c0a423e776bec5c3198d11d3f26827bd786 jdk8u131-b08
56e71d16083904ceddfdd1d66312582a42781646 jdk8u131-b09
1da23ae49386608550596502d90a381ee6c1dfaa jdk8u131-b10
829ea9b92cda9545652f1b309f56c57383024ebb jdk8u131-b11
692bc6b674dcab72453de08ee9da0856a7e41c0f jdk8u141-b00
0cee0db0180b64655751e7058c251103f9660f85 jdk8u141-b01
2d5100bddeb80cf767485b787fc3051311e3d7b9 jdk8u151-b00
src/os/linux/vm/os_linux.cpp
浏览文件 @
c6c700ed
...
...
@@ -2859,7 +2859,7 @@ void os::Linux::rebuild_cpu_to_node_map() {
// in the library.
const
size_t
BitsPerCLong
=
sizeof
(
long
)
*
CHAR_BIT
;
size_t
cpu_num
=
os
::
active_
processor_count
();
size_t
cpu_num
=
processor_count
();
size_t
cpu_map_size
=
NCPUS
/
BitsPerCLong
;
size_t
cpu_map_valid_size
=
MIN2
((
cpu_num
+
BitsPerCLong
-
1
)
/
BitsPerCLong
,
cpu_map_size
);
...
...
src/share/vm/classfile/javaClasses.cpp
浏览文件 @
c6c700ed
/*
* Copyright (c) 1997, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
7
, 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
...
...
@@ -2852,6 +2852,15 @@ void java_lang_invoke_MemberName::set_vmindex(oop mname, intptr_t index) {
mname
->
address_field_put
(
_vmindex_offset
,
(
address
)
index
);
}
bool
java_lang_invoke_MemberName
::
equals
(
oop
mn1
,
oop
mn2
)
{
if
(
mn1
==
mn2
)
{
return
true
;
}
return
(
vmtarget
(
mn1
)
==
vmtarget
(
mn2
)
&&
flags
(
mn1
)
==
flags
(
mn2
)
&&
vmindex
(
mn1
)
==
vmindex
(
mn2
)
&&
clazz
(
mn1
)
==
clazz
(
mn2
));
}
oop
java_lang_invoke_LambdaForm
::
vmentry
(
oop
lform
)
{
assert
(
is_instance
(
lform
),
"wrong type"
);
return
lform
->
obj_field
(
_vmentry_offset
);
...
...
src/share/vm/classfile/javaClasses.hpp
浏览文件 @
c6c700ed
/*
* Copyright (c) 1997, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
7
, 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
...
...
@@ -1132,6 +1132,8 @@ class java_lang_invoke_MemberName: AllStatic {
static
int
flags_offset_in_bytes
()
{
return
_flags_offset
;
}
static
int
vmtarget_offset_in_bytes
()
{
return
_vmtarget_offset
;
}
static
int
vmindex_offset_in_bytes
()
{
return
_vmindex_offset
;
}
static
bool
equals
(
oop
mt1
,
oop
mt2
);
};
...
...
src/share/vm/oops/instanceKlass.cpp
浏览文件 @
c6c700ed
...
...
@@ -3018,7 +3018,7 @@ nmethod* InstanceKlass::lookup_osr_nmethod(const Method* m, int bci, int comp_le
return
NULL
;
}
bool
InstanceKlass
::
add_member_name
(
Handle
mem_name
)
{
oop
InstanceKlass
::
add_member_name
(
Handle
mem_name
,
bool
intern
)
{
jweak
mem_name_wref
=
JNIHandles
::
make_weak_global
(
mem_name
);
MutexLocker
ml
(
MemberNameTable_lock
);
DEBUG_ONLY
(
No_Safepoint_Verifier
nsv
);
...
...
@@ -3028,7 +3028,7 @@ bool InstanceKlass::add_member_name(Handle mem_name) {
// is called!
Method
*
method
=
(
Method
*
)
java_lang_invoke_MemberName
::
vmtarget
(
mem_name
());
if
(
method
->
is_obsolete
())
{
return
false
;
return
NULL
;
}
else
if
(
method
->
is_old
())
{
// Replace method with redefined version
java_lang_invoke_MemberName
::
set_vmtarget
(
mem_name
(),
method_with_idnum
(
method
->
method_idnum
()));
...
...
@@ -3037,8 +3037,11 @@ bool InstanceKlass::add_member_name(Handle mem_name) {
if
(
_member_names
==
NULL
)
{
_member_names
=
new
(
ResourceObj
::
C_HEAP
,
mtClass
)
MemberNameTable
(
idnum_allocated_count
());
}
_member_names
->
add_member_name
(
mem_name_wref
);
return
true
;
if
(
intern
)
{
return
_member_names
->
find_or_add_member_name
(
mem_name_wref
);
}
else
{
return
_member_names
->
add_member_name
(
mem_name_wref
);
}
}
// -----------------------------------------------------------------------------------------------------
...
...
src/share/vm/oops/instanceKlass.hpp
浏览文件 @
c6c700ed
...
...
@@ -1110,7 +1110,7 @@ public:
// JSR-292 support
MemberNameTable
*
member_names
()
{
return
_member_names
;
}
void
set_member_names
(
MemberNameTable
*
member_names
)
{
_member_names
=
member_names
;
}
bool
add_member_name
(
Handle
member_name
);
oop
add_member_name
(
Handle
member_name
,
bool
intern
);
public:
// JVMTI support
...
...
src/share/vm/prims/jvm.cpp
浏览文件 @
c6c700ed
...
...
@@ -643,7 +643,7 @@ JVM_ENTRY(jobject, JVM_Clone(JNIEnv* env, jobject handle))
// This can safepoint and redefine method, so need both new_obj and method
// in a handle, for two different reasons. new_obj can move, method can be
// deleted if nothing is using it on the stack.
m
->
method_holder
()
->
add_member_name
(
new_obj
());
m
->
method_holder
()
->
add_member_name
(
new_obj
()
,
false
);
}
}
...
...
src/share/vm/prims/methodHandles.cpp
浏览文件 @
c6c700ed
...
...
@@ -173,7 +173,7 @@ oop MethodHandles::init_MemberName(Handle mname, Handle target) {
return
NULL
;
}
oop
MethodHandles
::
init_method_MemberName
(
Handle
mname
,
CallInfo
&
info
)
{
oop
MethodHandles
::
init_method_MemberName
(
Handle
mname
,
CallInfo
&
info
,
bool
intern
)
{
assert
(
info
.
resolved_appendix
().
is_null
(),
"only normal methods here"
);
methodHandle
m
=
info
.
resolved_method
();
KlassHandle
m_klass
=
m
->
method_holder
();
...
...
@@ -270,13 +270,7 @@ oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) {
// If relevant, the vtable or itable value is stored as vmindex.
// This is done eagerly, since it is readily available without
// constructing any new objects.
// TO DO: maybe intern mname_oop
if
(
m
->
method_holder
()
->
add_member_name
(
mname
))
{
return
mname
();
}
else
{
// Redefinition caused this to fail. Return NULL (and an exception?)
return
NULL
;
}
return
m
->
method_holder
()
->
add_member_name
(
mname
,
intern
);
}
oop
MethodHandles
::
init_field_MemberName
(
Handle
mname
,
fieldDescriptor
&
fd
,
bool
is_setter
)
{
...
...
@@ -917,7 +911,9 @@ int MethodHandles::find_MemberNames(KlassHandle k,
if
(
!
java_lang_invoke_MemberName
::
is_instance
(
result
()))
return
-
99
;
// caller bug!
CallInfo
info
(
m
);
oop
saved
=
MethodHandles
::
init_method_MemberName
(
result
,
info
);
// Since this is going through the methods to create MemberNames, don't search
// for matching methods already in the table
oop
saved
=
MethodHandles
::
init_method_MemberName
(
result
,
info
,
/*intern*/
false
);
if
(
saved
!=
result
())
results
->
obj_at_put
(
rfill
-
1
,
saved
);
// show saved instance to user
}
else
if
(
++
overflow
>=
overflow_limit
)
{
...
...
@@ -949,9 +945,34 @@ MemberNameTable::~MemberNameTable() {
}
}
void
MemberNameTable
::
add_member_name
(
jweak
mem_name_wref
)
{
oop
MemberNameTable
::
add_member_name
(
jweak
mem_name_wref
)
{
assert_locked_or_safepoint
(
MemberNameTable_lock
);
this
->
push
(
mem_name_wref
);
return
JNIHandles
::
resolve
(
mem_name_wref
);
}
oop
MemberNameTable
::
find_or_add_member_name
(
jweak
mem_name_wref
)
{
assert_locked_or_safepoint
(
MemberNameTable_lock
);
oop
new_mem_name
=
JNIHandles
::
resolve
(
mem_name_wref
);
// Find matching member name in the list.
// This is linear because these are short lists.
int
len
=
this
->
length
();
int
new_index
=
len
;
for
(
int
idx
=
0
;
idx
<
len
;
idx
++
)
{
oop
mname
=
JNIHandles
::
resolve
(
this
->
at
(
idx
));
if
(
mname
==
NULL
)
{
new_index
=
idx
;
continue
;
}
if
(
java_lang_invoke_MemberName
::
equals
(
new_mem_name
,
mname
))
{
JNIHandles
::
destroy_weak_global
(
mem_name_wref
);
return
mname
;
}
}
// Not found, push the new one, or reuse empty slot
this
->
at_put_grow
(
new_index
,
mem_name_wref
);
return
new_mem_name
;
}
#if INCLUDE_JVMTI
...
...
src/share/vm/prims/methodHandles.hpp
浏览文件 @
c6c700ed
/*
* Copyright (c) 2008, 201
4
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 201
7
, 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
...
...
@@ -60,7 +60,7 @@ class MethodHandles: AllStatic {
static
Handle
new_MemberName
(
TRAPS
);
// must be followed by init_MemberName
static
oop
init_MemberName
(
Handle
mname_h
,
Handle
target_h
);
// compute vmtarget/vmindex from target
static
oop
init_field_MemberName
(
Handle
mname_h
,
fieldDescriptor
&
fd
,
bool
is_setter
=
false
);
static
oop
init_method_MemberName
(
Handle
mname_h
,
CallInfo
&
info
);
static
oop
init_method_MemberName
(
Handle
mname_h
,
CallInfo
&
info
,
bool
intern
=
true
);
static
int
method_ref_kind
(
Method
*
m
,
bool
do_dispatch_if_possible
=
true
);
static
int
find_MemberNames
(
KlassHandle
k
,
Symbol
*
name
,
Symbol
*
sig
,
int
mflags
,
KlassHandle
caller
,
...
...
@@ -236,7 +236,8 @@ class MemberNameTable : public GrowableArray<jweak> {
public:
MemberNameTable
(
int
methods_cnt
);
~
MemberNameTable
();
void
add_member_name
(
jweak
mem_name_ref
);
oop
add_member_name
(
jweak
mem_name_ref
);
oop
find_or_add_member_name
(
jweak
mem_name_ref
);
#if INCLUDE_JVMTI
// RedefineClasses() API support:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录