4592N/A * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1472N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A// The set of potentially parallel tasks in strong root scanning. 0N/A // Leave this one last. 0N/A _sh =
this;
// ch is static, should be set only once. 342N/A /* are_GC_task_threads */true,
342N/A /* are_ConcurrentGC_threads */false);
2474N/A "Referent should not be scavengable."); }
0N/A // Also set the new collection parity. 4592N/A // Zero the claimed high water mark in the StringTable 0N/A // General strong roots. 2941N/A // _n_termination for _process_strong_tasks should be set up stream 2941N/A // in a method not running in a GC worker. Otherwise the GC worker 2941N/A // could be trying to change the termination condition while the task 2941N/A // is executing in another GC worker. 0N/A // Consider perm-gen discovered lists to be strong. 0N/A // Global (strong) JNI handles 0N/A // All threads execute this; the individual threads are task groups. 4592N/A // All threads execute the following. A specific chunk of buckets 4592N/A // from the StringTable are the individual tasks. 4592N/A // Verify the string table contents are in the perm gen 989N/A // (Currently, CMSCollector uses this to do intermediate-strength collections.) 989N/A // If we are collecting from class statics, but we are not going to 989N/A // visit all of the CodeCache, collect from the non-perm roots if any. 989N/A // This makes the code cache function temporarily as a source of strong 989N/A // roots for oops, until the next major collection. 989N/A // If collecting_perm_gen is true, we require that this phase will call 989N/A // CodeCache::do_unloading. This will kill off nmethods with expired 989N/A // weak references, such as stale invokedynamic targets. 2474N/A // Verify that the code cache contents are not subject to 2474N/A // movement by a scavenging collection. 0N/A // All threads perform this; coordination is handled internally. 0N/A// Unmarked shared Strings in the StringTable (which got there due to 0N/A// being in the constant pools of as-yet unloaded shared classes) were 0N/A// not marked and therefore did not have their mark words preserved. 0N/A// These entries are also deliberately not purged from the string 0N/A// table during unloading of unmarked strings. If an identity hash 0N/A// code was computed for any of these objects, it will not have been 0N/A// cleared to zero during the forwarding process or by the 0N/A// RecursiveAdjustSharedObjectClosure, and will be confused by the 0N/A// adjusting process as a forwarding pointer. We need to skip 0N/A// forwarding StringTable entries which contain unmarked shared 0N/A// Strings. Actually, since shared strings won't be moving, we can 0N/A// just skip adjusting any shared entries in the string table. 0N/A // Global (weak) JNI handles 0N/A // Cached barrier set for fast access in oops