Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
64586b6d
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,发现更多精彩内容 >>
提交
64586b6d
编写于
7月 02, 2014
作者:
S
sla
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
38ccdc5f
cd7aea60
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
40 addition
and
89 deletion
+40
-89
hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp
...vm/gc_implementation/parallelScavenge/generationSizer.cpp
+3
-4
hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
...e/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
+1
-1
hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
.../gc_implementation/parallelScavenge/psParallelCompact.cpp
+1
-1
hotspot/src/share/vm/memory/heap.cpp
hotspot/src/share/vm/memory/heap.cpp
+3
-7
hotspot/src/share/vm/prims/jni.cpp
hotspot/src/share/vm/prims/jni.cpp
+0
-2
hotspot/src/share/vm/runtime/os.cpp
hotspot/src/share/vm/runtime/os.cpp
+15
-66
hotspot/src/share/vm/runtime/os.hpp
hotspot/src/share/vm/runtime/os.hpp
+13
-5
hotspot/src/share/vm/runtime/virtualspace.cpp
hotspot/src/share/vm/runtime/virtualspace.cpp
+3
-3
hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java
hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java
+1
-0
未找到文件。
hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp
浏览文件 @
64586b6d
...
@@ -66,10 +66,9 @@ void GenerationSizer::initialize_flags() {
...
@@ -66,10 +66,9 @@ void GenerationSizer::initialize_flags() {
void
GenerationSizer
::
initialize_size_info
()
{
void
GenerationSizer
::
initialize_size_info
()
{
trace_gen_sizes
(
"ps heap raw"
);
trace_gen_sizes
(
"ps heap raw"
);
const
size_t
max_page_sz
=
os
::
page_size_for_region
(
_max_heap_byte_size
,
8
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
_min_heap_byte_size
,
const
size_t
min_pages
=
4
;
// 1 for eden + 1 for each survivor + 1 for old
_max_heap_byte_size
,
const
size_t
min_page_sz
=
os
::
page_size_for_region
(
_min_heap_byte_size
,
min_pages
);
8
);
const
size_t
page_sz
=
MIN2
(
max_page_sz
,
min_page_sz
);
// Can a page size be something else than a power of two?
// Can a page size be something else than a power of two?
assert
(
is_power_of_2
((
intptr_t
)
page_sz
),
"must be a power of 2"
);
assert
(
is_power_of_2
((
intptr_t
)
page_sz
),
"must be a power of 2"
);
...
...
hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
浏览文件 @
64586b6d
...
@@ -56,7 +56,7 @@ ParMarkBitMap::initialize(MemRegion covered_region)
...
@@ -56,7 +56,7 @@ ParMarkBitMap::initialize(MemRegion covered_region)
const
size_t
words
=
bits
/
BitsPerWord
;
const
size_t
words
=
bits
/
BitsPerWord
;
const
size_t
raw_bytes
=
words
*
sizeof
(
idx_t
);
const
size_t
raw_bytes
=
words
*
sizeof
(
idx_t
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
10
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
raw_bytes
,
10
);
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
_reserved_byte_size
=
align_size_up
(
raw_bytes
,
MAX2
(
page_sz
,
granularity
));
_reserved_byte_size
=
align_size_up
(
raw_bytes
,
MAX2
(
page_sz
,
granularity
));
...
...
hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
浏览文件 @
64586b6d
...
@@ -403,7 +403,7 @@ PSVirtualSpace*
...
@@ -403,7 +403,7 @@ PSVirtualSpace*
ParallelCompactData
::
create_vspace
(
size_t
count
,
size_t
element_size
)
ParallelCompactData
::
create_vspace
(
size_t
count
,
size_t
element_size
)
{
{
const
size_t
raw_bytes
=
count
*
element_size
;
const
size_t
raw_bytes
=
count
*
element_size
;
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
10
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
raw_bytes
,
10
);
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
_reserved_byte_size
=
align_size_up
(
raw_bytes
,
MAX2
(
page_sz
,
granularity
));
_reserved_byte_size
=
align_size_up
(
raw_bytes
,
MAX2
(
page_sz
,
granularity
));
...
...
hotspot/src/share/vm/memory/heap.cpp
浏览文件 @
64586b6d
...
@@ -98,13 +98,9 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size,
...
@@ -98,13 +98,9 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size,
_log2_segment_size
=
exact_log2
(
segment_size
);
_log2_segment_size
=
exact_log2
(
segment_size
);
// Reserve and initialize space for _memory.
// Reserve and initialize space for _memory.
size_t
page_size
=
os
::
vm_page_size
();
const
size_t
page_size
=
os
::
can_execute_large_page_memory
()
?
if
(
os
::
can_execute_large_page_memory
())
{
os
::
page_size_for_region
(
committed_size
,
reserved_size
,
8
)
:
const
size_t
min_pages
=
8
;
os
::
vm_page_size
();
page_size
=
MIN2
(
os
::
page_size_for_region
(
committed_size
,
min_pages
),
os
::
page_size_for_region
(
reserved_size
,
min_pages
));
}
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
const
size_t
r_align
=
MAX2
(
page_size
,
granularity
);
const
size_t
r_align
=
MAX2
(
page_size
,
granularity
);
const
size_t
r_size
=
align_size_up
(
reserved_size
,
r_align
);
const
size_t
r_size
=
align_size_up
(
reserved_size
,
r_align
);
...
...
hotspot/src/share/vm/prims/jni.cpp
浏览文件 @
64586b6d
...
@@ -3865,7 +3865,6 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) {
...
@@ -3865,7 +3865,6 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) {
unit_test_function_call
unit_test_function_call
// Forward declaration
// Forward declaration
void
TestOS_test
();
void
TestReservedSpace_test
();
void
TestReservedSpace_test
();
void
TestReserveMemorySpecial_test
();
void
TestReserveMemorySpecial_test
();
void
TestVirtualSpace_test
();
void
TestVirtualSpace_test
();
...
@@ -3887,7 +3886,6 @@ void TestCodeCacheRemSet_test();
...
@@ -3887,7 +3886,6 @@ void TestCodeCacheRemSet_test();
void
execute_internal_vm_tests
()
{
void
execute_internal_vm_tests
()
{
if
(
ExecuteInternalVMTests
)
{
if
(
ExecuteInternalVMTests
)
{
tty
->
print_cr
(
"Running internal VM tests"
);
tty
->
print_cr
(
"Running internal VM tests"
);
run_unit_test
(
TestOS_test
());
run_unit_test
(
TestReservedSpace_test
());
run_unit_test
(
TestReservedSpace_test
());
run_unit_test
(
TestReserveMemorySpecial_test
());
run_unit_test
(
TestReserveMemorySpecial_test
());
run_unit_test
(
TestVirtualSpace_test
());
run_unit_test
(
TestVirtualSpace_test
());
...
...
hotspot/src/share/vm/runtime/os.cpp
浏览文件 @
64586b6d
...
@@ -1303,15 +1303,24 @@ bool os::stack_shadow_pages_available(Thread *thread, methodHandle method) {
...
@@ -1303,15 +1303,24 @@ bool os::stack_shadow_pages_available(Thread *thread, methodHandle method) {
return
(
sp
>
(
stack_limit
+
reserved_area
));
return
(
sp
>
(
stack_limit
+
reserved_area
));
}
}
size_t
os
::
page_size_for_region
(
size_t
region_size
,
size_t
min_pages
)
{
size_t
os
::
page_size_for_region
(
size_t
region_min_size
,
size_t
region_max_size
,
uint
min_pages
)
{
assert
(
min_pages
>
0
,
"sanity"
);
assert
(
min_pages
>
0
,
"sanity"
);
if
(
UseLargePages
)
{
if
(
UseLargePages
)
{
const
size_t
max_page_size
=
region_size
/
min_pages
;
const
size_t
max_page_size
=
region_max_size
/
min_pages
;
for
(
unsigned
int
i
=
0
;
_page_sizes
[
i
]
!=
0
;
++
i
)
{
const
size_t
sz
=
_page_sizes
[
i
];
const
size_t
mask
=
sz
-
1
;
if
((
region_min_size
&
mask
)
==
0
&&
(
region_max_size
&
mask
)
==
0
)
{
// The largest page size with no fragmentation.
return
sz
;
}
for
(
size_t
i
=
0
;
_page_sizes
[
i
]
!=
0
;
++
i
)
{
if
(
sz
<=
max_page_size
)
{
const
size_t
page_size
=
_page_sizes
[
i
];
// The largest page size that satisfies the min_pages requirement.
if
(
page_size
<=
max_page_size
&&
is_size_aligned
(
region_size
,
page_size
))
{
return
sz
;
return
page_size
;
}
}
}
}
}
}
...
@@ -1539,63 +1548,3 @@ os::SuspendResume::State os::SuspendResume::switch_state(os::SuspendResume::Stat
...
@@ -1539,63 +1548,3 @@ os::SuspendResume::State os::SuspendResume::switch_state(os::SuspendResume::Stat
return
result
;
return
result
;
}
}
#endif
#endif
/////////////// Unit tests ///////////////
#ifndef PRODUCT
#define assert_eq(a,b) assert(a == b, err_msg(SIZE_FORMAT " != " SIZE_FORMAT, a, b))
class
TestOS
:
AllStatic
{
static
size_t
small_page_size
()
{
return
os
::
vm_page_size
();
}
static
size_t
large_page_size
()
{
const
size_t
large_page_size_example
=
4
*
M
;
return
os
::
page_size_for_region
(
large_page_size_example
,
1
);
}
static
void
test_page_size_for_region
()
{
if
(
UseLargePages
)
{
const
size_t
small_page
=
small_page_size
();
const
size_t
large_page
=
large_page_size
();
if
(
large_page
>
small_page
)
{
size_t
num_small_pages_in_large
=
large_page
/
small_page
;
size_t
page
=
os
::
page_size_for_region
(
large_page
,
num_small_pages_in_large
);
assert_eq
(
page
,
small_page
);
}
}
}
static
void
test_page_size_for_region_alignment
()
{
if
(
UseLargePages
)
{
const
size_t
small_page
=
small_page_size
();
const
size_t
large_page
=
large_page_size
();
if
(
large_page
>
small_page
)
{
const
size_t
unaligned_region
=
large_page
+
17
;
size_t
page
=
os
::
page_size_for_region
(
unaligned_region
,
1
);
assert_eq
(
page
,
small_page
);
const
size_t
num_pages
=
5
;
const
size_t
aligned_region
=
large_page
*
num_pages
;
page
=
os
::
page_size_for_region
(
aligned_region
,
num_pages
);
assert_eq
(
page
,
large_page
);
}
}
}
public:
static
void
run_tests
()
{
test_page_size_for_region
();
test_page_size_for_region_alignment
();
}
};
void
TestOS_test
()
{
TestOS
::
run_tests
();
}
#endif // PRODUCT
hotspot/src/share/vm/runtime/os.hpp
浏览文件 @
64586b6d
...
@@ -253,11 +253,19 @@ class os: AllStatic {
...
@@ -253,11 +253,19 @@ class os: AllStatic {
// Return the default page size.
// Return the default page size.
static
int
vm_page_size
();
static
int
vm_page_size
();
// Returns the page size to use for a region of memory.
// Return the page size to use for a region of memory. The min_pages argument
// region_size / min_pages will always be greater than or equal to the
// is a hint intended to limit fragmentation; it says the returned page size
// returned value.
// should be <= region_max_size / min_pages. Because min_pages is a hint,
static
size_t
page_size_for_region
(
size_t
region_size
,
size_t
min_pages
);
// this routine may return a size larger than region_max_size / min_pages.
//
// The current implementation ignores min_pages if a larger page size is an
// exact multiple of both region_min_size and region_max_size. This allows
// larger pages to be used when doing so would not cause fragmentation; in
// particular, a single page can be used when region_min_size ==
// region_max_size == a supported page size.
static
size_t
page_size_for_region
(
size_t
region_min_size
,
size_t
region_max_size
,
uint
min_pages
);
// Return the largest page size that can be used
// Return the largest page size that can be used
static
size_t
max_page_size
()
{
static
size_t
max_page_size
()
{
// The _page_sizes array is sorted in descending order.
// The _page_sizes array is sorted in descending order.
...
...
hotspot/src/share/vm/runtime/virtualspace.cpp
浏览文件 @
64586b6d
...
@@ -53,7 +53,7 @@ ReservedSpace::ReservedSpace() : _base(NULL), _size(0), _noaccess_prefix(0),
...
@@ -53,7 +53,7 @@ ReservedSpace::ReservedSpace() : _base(NULL), _size(0), _noaccess_prefix(0),
}
}
ReservedSpace
::
ReservedSpace
(
size_t
size
)
{
ReservedSpace
::
ReservedSpace
(
size_t
size
)
{
size_t
page_size
=
os
::
page_size_for_region
(
size
,
1
);
size_t
page_size
=
os
::
page_size_for_region
(
size
,
size
,
1
);
bool
large_pages
=
page_size
!=
(
size_t
)
os
::
vm_page_size
();
bool
large_pages
=
page_size
!=
(
size_t
)
os
::
vm_page_size
();
// Don't force the alignment to be large page aligned,
// Don't force the alignment to be large page aligned,
// since that will waste memory.
// since that will waste memory.
...
@@ -372,7 +372,7 @@ VirtualSpace::VirtualSpace() {
...
@@ -372,7 +372,7 @@ VirtualSpace::VirtualSpace() {
bool
VirtualSpace
::
initialize
(
ReservedSpace
rs
,
size_t
committed_size
)
{
bool
VirtualSpace
::
initialize
(
ReservedSpace
rs
,
size_t
committed_size
)
{
const
size_t
max_commit_granularity
=
os
::
page_size_for_region
(
rs
.
size
(),
1
);
const
size_t
max_commit_granularity
=
os
::
page_size_for_region
(
rs
.
size
(),
rs
.
size
(),
1
);
return
initialize_with_granularity
(
rs
,
committed_size
,
max_commit_granularity
);
return
initialize_with_granularity
(
rs
,
committed_size
,
max_commit_granularity
);
}
}
...
@@ -1007,7 +1007,7 @@ class TestVirtualSpace : AllStatic {
...
@@ -1007,7 +1007,7 @@ class TestVirtualSpace : AllStatic {
case
Disable
:
case
Disable
:
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
vm_page_size
());
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
vm_page_size
());
case
Commit
:
case
Commit
:
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
page_size_for_region
(
rs
.
size
(),
1
));
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
page_size_for_region
(
rs
.
size
(),
rs
.
size
(),
1
));
}
}
}
}
...
...
hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java
浏览文件 @
64586b6d
...
@@ -22,6 +22,7 @@
...
@@ -22,6 +22,7 @@
*/
*/
/*
/*
* @ignore 8027915
* @test TestParallelHeapSizeFlags
* @test TestParallelHeapSizeFlags
* @key gc
* @key gc
* @bug 8006088
* @bug 8006088
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录