Mercurial > hg > truffle
annotate src/share/vm/runtime/task.cpp @ 10292:acac2b03a07f
8014765: VM exits if MaxTenuringThreshold is set below the default InitialTenuringThreshold, and InitialTenuringThreshold is not set
Summary: The VM exits when the condition in the subject line applies. The fix sets InitialTenuringThreshold to MaxTenuringThreshold if it is larger than MaxTenuringThreshold and InitialTenuringThreshold has not been set (is default).
Reviewed-by: jwilhelm, jmasa, brutisso, johnc
author | tschatzl |
---|---|
date | Thu, 16 May 2013 23:51:51 +0200 |
parents | f34d701e952e |
children | f2110083203d |
rev | line source |
---|---|
0 | 1 /* |
1972 | 2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
356
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
356
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
356
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #include "precompiled.hpp" |
26 #include "memory/allocation.hpp" | |
27 #include "runtime/init.hpp" | |
28 #include "runtime/task.hpp" | |
7180
f34d701e952e
8003935: Simplify the needed includes for using Thread::current()
stefank
parents:
6939
diff
changeset
|
29 #include "runtime/thread.inline.hpp" |
1972 | 30 #include "runtime/timer.hpp" |
31 #ifdef TARGET_OS_FAMILY_linux | |
32 # include "os_linux.inline.hpp" | |
33 #endif | |
34 #ifdef TARGET_OS_FAMILY_solaris | |
35 # include "os_solaris.inline.hpp" | |
36 #endif | |
37 #ifdef TARGET_OS_FAMILY_windows | |
38 # include "os_windows.inline.hpp" | |
39 #endif | |
3960 | 40 #ifdef TARGET_OS_FAMILY_bsd |
41 # include "os_bsd.inline.hpp" | |
42 #endif | |
0 | 43 |
44 int PeriodicTask::_num_tasks = 0; | |
45 PeriodicTask* PeriodicTask::_tasks[PeriodicTask::max_tasks]; | |
46 #ifndef PRODUCT | |
47 elapsedTimer PeriodicTask::_timer; | |
48 int PeriodicTask::_intervalHistogram[PeriodicTask::max_interval]; | |
49 int PeriodicTask::_ticks; | |
50 | |
51 void PeriodicTask::print_intervals() { | |
52 if (ProfilerCheckIntervals) { | |
53 for (int i = 0; i < PeriodicTask::max_interval; i++) { | |
54 int n = _intervalHistogram[i]; | |
55 if (n > 0) tty->print_cr("%3d: %5d (%4.1f%%)", i, n, 100.0 * n / _ticks); | |
56 } | |
57 } | |
58 } | |
59 #endif | |
60 | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
61 void PeriodicTask::real_time_tick(int delay_time) { |
0 | 62 #ifndef PRODUCT |
63 if (ProfilerCheckIntervals) { | |
64 _ticks++; | |
65 _timer.stop(); | |
66 int ms = (int)(_timer.seconds() * 1000.0); | |
67 _timer.reset(); | |
68 _timer.start(); | |
69 if (ms >= PeriodicTask::max_interval) ms = PeriodicTask::max_interval - 1; | |
70 _intervalHistogram[ms]++; | |
71 } | |
72 #endif | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
73 |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
74 { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
75 MutexLockerEx ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
76 int orig_num_tasks = _num_tasks; |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
77 |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
78 for(int index = 0; index < _num_tasks; index++) { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
79 _tasks[index]->execute_if_pending(delay_time); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
80 if (_num_tasks < orig_num_tasks) { // task dis-enrolled itself |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
81 index--; // re-do current slot as it has changed |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
82 orig_num_tasks = _num_tasks; |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
83 } |
0 | 84 } |
85 } | |
86 } | |
87 | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
88 int PeriodicTask::time_to_wait() { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
89 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
90 NULL : PeriodicTask_lock, Mutex::_no_safepoint_check_flag); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
91 |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
92 if (_num_tasks == 0) { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
93 return 0; // sleep until shutdown or a task is enrolled |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
94 } |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
95 |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
96 int delay = _tasks[0]->time_to_next_interval(); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
97 for (int index = 1; index < _num_tasks; index++) { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
98 delay = MIN2(delay, _tasks[index]->time_to_next_interval()); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
99 } |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
100 return delay; |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
101 } |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
102 |
0 | 103 |
104 PeriodicTask::PeriodicTask(size_t interval_time) : | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
105 _counter(0), _interval((int) interval_time) { |
0 | 106 // Sanity check the interval time |
107 assert(_interval >= PeriodicTask::min_interval && | |
108 _interval <= PeriodicTask::max_interval && | |
109 _interval % PeriodicTask::interval_gran == 0, | |
110 "improper PeriodicTask interval time"); | |
111 } | |
112 | |
113 PeriodicTask::~PeriodicTask() { | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
114 disenroll(); |
0 | 115 } |
116 | |
117 void PeriodicTask::enroll() { | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
118 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
119 NULL : PeriodicTask_lock, Mutex::_no_safepoint_check_flag); |
0 | 120 |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
121 if (_num_tasks == PeriodicTask::max_tasks) { |
0 | 122 fatal("Overflow in PeriodicTask table"); |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
123 } |
0 | 124 _tasks[_num_tasks++] = this; |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
125 |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
126 WatcherThread* thread = WatcherThread::watcher_thread(); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
127 if (thread) { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
128 thread->unpark(); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
129 } else { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
130 WatcherThread::start(); |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
131 } |
0 | 132 } |
133 | |
134 void PeriodicTask::disenroll() { | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
135 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
136 NULL : PeriodicTask_lock, Mutex::_no_safepoint_check_flag); |
0 | 137 |
138 int index; | |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
139 for(index = 0; index < _num_tasks && _tasks[index] != this; index++) |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
140 ; |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
141 |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
142 if (index == _num_tasks) { |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
143 return; |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
144 } |
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
145 |
0 | 146 _num_tasks--; |
6939
c284cf4781f0
7127792: Add the ability to change an existing PeriodicTask's execution interval
rbackman
parents:
3960
diff
changeset
|
147 |
0 | 148 for (; index < _num_tasks; index++) { |
149 _tasks[index] = _tasks[index+1]; | |
150 } | |
151 } |