Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
56036960
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看板
提交
56036960
编写于
9月 18, 2012
作者:
O
ohair
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
1f7490be
c151d2ae
变更
15
显示空白变更内容
内联
并排
Showing
15 changed file
with
173 addition
and
24 deletion
+173
-24
src/os/solaris/vm/os_solaris.cpp
src/os/solaris/vm/os_solaris.cpp
+2
-2
src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
+1
-1
src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
+1
-1
src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp
src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp
+1
-1
src/os_cpu/linux_x86/vm/os_linux_x86.cpp
src/os_cpu/linux_x86/vm/os_linux_x86.cpp
+1
-1
src/os_cpu/linux_zero/vm/os_linux_zero.cpp
src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+1
-1
src/os_cpu/windows_x86/vm/os_windows_x86.cpp
src/os_cpu/windows_x86/vm/os_windows_x86.cpp
+1
-1
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
...ntation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
+1
-0
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+0
-1
src/share/vm/runtime/os.cpp
src/share/vm/runtime/os.cpp
+9
-2
src/share/vm/runtime/os.hpp
src/share/vm/runtime/os.hpp
+1
-1
src/share/vm/runtime/thread.cpp
src/share/vm/runtime/thread.cpp
+27
-11
src/share/vm/services/memTracker.cpp
src/share/vm/services/memTracker.cpp
+1
-0
src/share/vm/services/memTracker.hpp
src/share/vm/services/memTracker.hpp
+7
-1
test/runtime/7194254/Test7194254.java
test/runtime/7194254/Test7194254.java
+119
-0
未找到文件。
src/os/solaris/vm/os_solaris.cpp
浏览文件 @
56036960
...
...
@@ -1488,11 +1488,11 @@ void _handle_uncaught_cxx_exception() {
// First crack at OS-specific initialization, from inside the new thread.
void
os
::
initialize_thread
()
{
void
os
::
initialize_thread
(
Thread
*
thr
)
{
int
r
=
thr_main
()
;
guarantee
(
r
==
0
||
r
==
1
,
"CR6501650 or CR6493689"
)
;
if
(
r
)
{
JavaThread
*
jt
=
(
JavaThread
*
)
Thread
::
current
()
;
JavaThread
*
jt
=
(
JavaThread
*
)
thr
;
assert
(
jt
!=
NULL
,
"Sanity check"
);
size_t
stack_size
;
address
base
=
jt
->
stack_base
();
...
...
src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
浏览文件 @
56036960
...
...
@@ -297,7 +297,7 @@ char* os::non_memory_address_word() {
return
(
char
*
)
-
1
;
}
void
os
::
initialize_thread
()
{
void
os
::
initialize_thread
(
Thread
*
thr
)
{
// Nothing to do.
}
...
...
src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
浏览文件 @
56036960
...
...
@@ -103,7 +103,7 @@ char* os::non_memory_address_word() {
#endif // SPARC
}
void
os
::
initialize_thread
()
{
void
os
::
initialize_thread
(
Thread
*
thr
)
{
// Nothing to do.
}
...
...
src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp
浏览文件 @
56036960
...
...
@@ -225,7 +225,7 @@ char* os::non_memory_address_word() {
return
(
char
*
)
0
;
}
void
os
::
initialize_thread
()
{}
void
os
::
initialize_thread
(
Thread
*
thr
)
{}
void
os
::
print_context
(
outputStream
*
st
,
void
*
context
)
{
if
(
context
==
NULL
)
return
;
...
...
src/os_cpu/linux_x86/vm/os_linux_x86.cpp
浏览文件 @
56036960
...
...
@@ -114,7 +114,7 @@ char* os::non_memory_address_word() {
return
(
char
*
)
-
1
;
}
void
os
::
initialize_thread
()
{
void
os
::
initialize_thread
(
Thread
*
thr
)
{
// Nothing to do.
}
...
...
src/os_cpu/linux_zero/vm/os_linux_zero.cpp
浏览文件 @
56036960
...
...
@@ -98,7 +98,7 @@ char* os::non_memory_address_word() {
#endif // SPARC
}
void
os
::
initialize_thread
(
)
{
void
os
::
initialize_thread
(
Thread
*
thr
)
{
// Nothing to do.
}
...
...
src/os_cpu/windows_x86/vm/os_windows_x86.cpp
浏览文件 @
56036960
...
...
@@ -219,7 +219,7 @@ bool os::register_code_area(char *low, char *high) {
return
true
;
}
void
os
::
initialize_thread
()
{
void
os
::
initialize_thread
(
Thread
*
thr
)
{
// Nothing to do.
}
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
浏览文件 @
56036960
...
...
@@ -230,6 +230,7 @@ void ConcurrentMarkSweepThread::print_on(outputStream* st) const {
void
ConcurrentMarkSweepThread
::
print_all_on
(
outputStream
*
st
)
{
if
(
_cmst
!=
NULL
)
{
_cmst
->
print_on
(
st
);
st
->
cr
();
}
if
(
_collector
!=
NULL
)
{
AbstractWorkGang
*
gang
=
_collector
->
conc_workers
();
...
...
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
浏览文件 @
56036960
...
...
@@ -3420,7 +3420,6 @@ void G1CollectedHeap::print_gc_threads_on(outputStream* st) const {
st
->
cr
();
_cm
->
print_worker_threads_on
(
st
);
_cg1r
->
print_worker_threads_on
(
st
);
st
->
cr
();
}
void
G1CollectedHeap
::
gc_threads_do
(
ThreadClosure
*
tc
)
const
{
...
...
src/share/vm/runtime/os.cpp
浏览文件 @
56036960
...
...
@@ -201,14 +201,21 @@ OSReturn os::set_priority(Thread* thread, ThreadPriority p) {
}
}
// The mapping from OS priority back to Java priority may be inexact because
// Java priorities can map M:1 with native priorities. If you want the definite
// Java priority then use JavaThread::java_priority()
OSReturn
os
::
get_priority
(
const
Thread
*
const
thread
,
ThreadPriority
&
priority
)
{
int
p
;
int
os_prio
;
OSReturn
ret
=
get_native_priority
(
thread
,
&
os_prio
);
if
(
ret
!=
OS_OK
)
return
ret
;
if
(
java_to_os_priority
[
MaxPriority
]
>
java_to_os_priority
[
MinPriority
])
{
for
(
p
=
MaxPriority
;
p
>
MinPriority
&&
java_to_os_priority
[
p
]
>
os_prio
;
p
--
)
;
}
else
{
// niceness values are in reverse order
for
(
p
=
MaxPriority
;
p
>
MinPriority
&&
java_to_os_priority
[
p
]
<
os_prio
;
p
--
)
;
}
priority
=
(
ThreadPriority
)
p
;
return
OS_OK
;
}
...
...
src/share/vm/runtime/os.hpp
浏览文件 @
56036960
...
...
@@ -387,7 +387,7 @@ class os: AllStatic {
static
void
pd_start_thread
(
Thread
*
thread
);
static
void
start_thread
(
Thread
*
thread
);
static
void
initialize_thread
();
static
void
initialize_thread
(
Thread
*
thr
);
static
void
free_thread
(
OSThread
*
osthread
);
// thread id on Linux/64bit is 64bit, on Windows and Solaris, it's 32bit
...
...
src/share/vm/runtime/thread.cpp
浏览文件 @
56036960
...
...
@@ -308,19 +308,25 @@ void Thread::initialize_thread_local_storage() {
// initialize structure dependent on thread local storage
ThreadLocalStorage
::
set_thread
(
this
);
// set up any platform-specific state.
os
::
initialize_thread
();
}
void
Thread
::
record_stack_base_and_size
()
{
set_stack_base
(
os
::
current_stack_base
());
set_stack_size
(
os
::
current_stack_size
());
// CR 7190089: on Solaris, primordial thread's stack is adjusted
// in initialize_thread(). Without the adjustment, stack size is
// incorrect if stack is set to unlimited (ulimit -s unlimited).
// So far, only Solaris has real implementation of initialize_thread().
//
// set up any platform-specific state.
os
::
initialize_thread
(
this
);
// record thread's native stack, stack grows downward
address
low_stack_addr
=
stack_base
()
-
stack_size
();
MemTracker
::
record_thread_stack
(
low_stack_addr
,
stack_size
(),
this
,
if
(
MemTracker
::
is_on
())
{
address
stack_low_addr
=
stack_base
()
-
stack_size
();
MemTracker
::
record_thread_stack
(
stack_low_addr
,
stack_size
(),
this
,
CURRENT_PC
);
}
}
...
...
@@ -836,7 +842,11 @@ void Thread::metadata_do(void f(Metadata*)) {
void
Thread
::
print_on
(
outputStream
*
st
)
const
{
// get_priority assumes osthread initialized
if
(
osthread
()
!=
NULL
)
{
st
->
print
(
"prio=%d tid="
INTPTR_FORMAT
" "
,
get_priority
(
this
),
this
);
int
os_prio
;
if
(
os
::
get_native_priority
(
this
,
&
os_prio
)
==
OS_OK
)
{
st
->
print
(
"os_prio=%d "
,
os_prio
);
}
st
->
print
(
"tid="
INTPTR_FORMAT
" "
,
this
);
osthread
()
->
print_on
(
st
);
}
debug_only
(
if
(
WizardMode
)
print_owned_locks_on
(
st
);)
...
...
@@ -2743,7 +2753,11 @@ void JavaThread::print_thread_state() const {
void
JavaThread
::
print_on
(
outputStream
*
st
)
const
{
st
->
print
(
"
\"
%s
\"
"
,
get_thread_name
());
oop
thread_oop
=
threadObj
();
if
(
thread_oop
!=
NULL
&&
java_lang_Thread
::
is_daemon
(
thread_oop
))
st
->
print
(
"daemon "
);
if
(
thread_oop
!=
NULL
)
{
st
->
print
(
"#"
INT64_FORMAT
" "
,
java_lang_Thread
::
thread_id
(
thread_oop
));
if
(
java_lang_Thread
::
is_daemon
(
thread_oop
))
st
->
print
(
"daemon "
);
st
->
print
(
"prio=%d "
,
java_lang_Thread
::
priority
(
thread_oop
));
}
Thread
::
print_on
(
st
);
// print guess for valid stack memory region (assume 4K pages); helps lock debugging
st
->
print_cr
(
"["
INTPTR_FORMAT
"]"
,
(
intptr_t
)
last_Java_sp
()
&
~
right_n_bits
(
12
));
...
...
@@ -4270,8 +4284,10 @@ void Threads::print_on(outputStream* st, bool print_stacks, bool internal_format
st
->
cr
();
Universe
::
heap
()
->
print_gc_threads_on
(
st
);
WatcherThread
*
wt
=
WatcherThread
::
watcher_thread
();
if
(
wt
!=
NULL
)
wt
->
print_on
(
st
);
if
(
wt
!=
NULL
)
{
wt
->
print_on
(
st
);
st
->
cr
();
}
CompileBroker
::
print_compiler_threads_on
(
st
);
st
->
flush
();
}
...
...
src/share/vm/services/memTracker.cpp
浏览文件 @
56036960
...
...
@@ -341,6 +341,7 @@ void MemTracker::release_thread_recorder(MemRecorder* rec) {
*/
void
MemTracker
::
create_memory_record
(
address
addr
,
MEMFLAGS
flags
,
size_t
size
,
address
pc
,
Thread
*
thread
)
{
assert
(
addr
!=
NULL
,
"Sanity check"
);
if
(
!
shutdown_in_progress
())
{
// single thread, we just write records direct to global recorder,'
// with any lock
...
...
src/share/vm/services/memTracker.hpp
浏览文件 @
56036960
...
...
@@ -185,6 +185,7 @@ class MemTracker : AllStatic {
static
inline
void
record_malloc
(
address
addr
,
size_t
size
,
MEMFLAGS
flags
,
address
pc
=
0
,
Thread
*
thread
=
NULL
)
{
if
(
NMT_CAN_TRACK
(
flags
))
{
assert
(
size
>
0
,
"Sanity check"
);
create_memory_record
(
addr
,
(
flags
|
MemPointerRecord
::
malloc_tag
()),
size
,
pc
,
thread
);
}
}
...
...
@@ -198,6 +199,7 @@ class MemTracker : AllStatic {
static
inline
void
record_realloc
(
address
old_addr
,
address
new_addr
,
size_t
size
,
MEMFLAGS
flags
,
address
pc
=
0
,
Thread
*
thread
=
NULL
)
{
if
(
is_on
())
{
assert
(
size
>
0
,
"Sanity check"
);
record_free
(
old_addr
,
flags
,
thread
);
record_malloc
(
new_addr
,
size
,
flags
,
pc
,
thread
);
}
...
...
@@ -208,6 +210,7 @@ class MemTracker : AllStatic {
// we add a positive offset to arena address, so we can have arena size record
// sorted after arena record
if
(
is_on
()
&&
!
UseMallocOnly
)
{
assert
(
addr
!=
NULL
,
"Sanity check"
);
create_memory_record
((
addr
+
sizeof
(
void
*
)),
MemPointerRecord
::
arena_size_tag
(),
size
,
0
,
NULL
);
}
...
...
@@ -217,7 +220,7 @@ class MemTracker : AllStatic {
static
inline
void
record_virtual_memory_reserve
(
address
addr
,
size_t
size
,
address
pc
=
0
,
Thread
*
thread
=
NULL
)
{
if
(
is_on
())
{
assert
(
size
>
0
,
"
reserve szero size
"
);
assert
(
size
>
0
,
"
Sanity check
"
);
create_memory_record
(
addr
,
MemPointerRecord
::
virtual_memory_reserve_tag
(),
size
,
pc
,
thread
);
}
...
...
@@ -248,6 +251,7 @@ class MemTracker : AllStatic {
static
inline
void
record_virtual_memory_commit
(
address
addr
,
size_t
size
,
address
pc
=
0
,
Thread
*
thread
=
NULL
)
{
if
(
is_on
())
{
assert
(
size
>
0
,
"Sanity check"
);
create_memory_record
(
addr
,
MemPointerRecord
::
virtual_memory_commit_tag
(),
size
,
DEBUG_CALLER_PC
,
thread
);
}
...
...
@@ -257,6 +261,7 @@ class MemTracker : AllStatic {
static
inline
void
record_virtual_memory_uncommit
(
address
addr
,
size_t
size
,
Thread
*
thread
=
NULL
)
{
if
(
is_on
())
{
assert
(
size
>
0
,
"Sanity check"
);
create_memory_record
(
addr
,
MemPointerRecord
::
virtual_memory_uncommit_tag
(),
size
,
DEBUG_CALLER_PC
,
thread
);
}
...
...
@@ -266,6 +271,7 @@ class MemTracker : AllStatic {
static
inline
void
record_virtual_memory_release
(
address
addr
,
size_t
size
,
Thread
*
thread
=
NULL
)
{
if
(
is_on
())
{
assert
(
size
>
0
,
"Sanity check"
);
create_memory_record
(
addr
,
MemPointerRecord
::
virtual_memory_release_tag
(),
size
,
DEBUG_CALLER_PC
,
thread
);
}
...
...
test/runtime/7194254/Test7194254.java
0 → 100644
浏览文件 @
56036960
/*
* Copyright (c) 2012, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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.
*/
/*
* @test
* @bug 7194254
* @summary Creates several threads with different java priorities and checks
* whether jstack reports correct priorities for them.
*
* @run main T7194254
*/
import
java.io.BufferedReader
;
import
java.io.InputStreamReader
;
import
java.lang.management.ManagementFactory
;
import
java.lang.management.RuntimeMXBean
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.CyclicBarrier
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
Test7194254
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
final
int
NUMBER_OF_JAVA_PRIORITIES
=
Thread
.
MAX_PRIORITY
-
Thread
.
MIN_PRIORITY
+
1
;
final
CyclicBarrier
barrier
=
new
CyclicBarrier
(
NUMBER_OF_JAVA_PRIORITIES
+
1
);
for
(
int
p
=
Thread
.
MIN_PRIORITY
;
p
<=
Thread
.
MAX_PRIORITY
;
++
p
)
{
final
int
priority
=
p
;
new
Thread
(
"Priority="
+
p
)
{
{
setPriority
(
priority
);
}
public
void
run
()
{
try
{
barrier
.
await
();
// 1st
barrier
.
await
();
// 2nd
}
catch
(
Exception
exc
)
{
// ignore
}
}
}.
start
();
}
barrier
.
await
();
// 1st
int
matches
=
0
;
List
<
String
>
failed
=
new
ArrayList
<>();
try
{
String
pid
=
getPid
();
String
jstack
=
System
.
getProperty
(
"java.home"
)
+
"/../bin/jstack"
;
Process
process
=
new
ProcessBuilder
(
jstack
,
pid
)
.
redirectErrorStream
(
true
).
start
();
Pattern
pattern
=
Pattern
.
compile
(
"\\\"Priority=(\\d+)\\\".* prio=(\\d+).*"
);
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
process
.
getInputStream
())))
{
String
line
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
Matcher
matcher
=
pattern
.
matcher
(
line
);
if
(
matcher
.
matches
())
{
matches
+=
1
;
String
expected
=
matcher
.
group
(
1
);
String
actual
=
matcher
.
group
(
2
);
if
(!
expected
.
equals
(
actual
))
{
failed
.
add
(
line
);
}
}
}
}
barrier
.
await
();
// 2nd
}
finally
{
barrier
.
reset
();
}
if
(
matches
!=
NUMBER_OF_JAVA_PRIORITIES
)
{
throw
new
AssertionError
(
"matches: expected "
+
NUMBER_OF_JAVA_PRIORITIES
+
", but was "
+
matches
);
}
if
(!
failed
.
isEmpty
())
{
throw
new
AssertionError
(
failed
.
size
()
+
":"
+
failed
);
}
System
.
out
.
println
(
"Test passes."
);
}
static
String
getPid
()
{
RuntimeMXBean
runtimebean
=
ManagementFactory
.
getRuntimeMXBean
();
String
vmname
=
runtimebean
.
getName
();
int
i
=
vmname
.
indexOf
(
'@'
);
if
(
i
!=
-
1
)
{
vmname
=
vmname
.
substring
(
0
,
i
);
}
return
vmname
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录