600 Commits

Author SHA1 Message Date
Bengt Rutisson
a35c7dbfeb 7022943: G1: improve logging to avoid interleaved numbers
Introduced buffered loggging to make sure that log lines are logged one line at a time

Reviewed-by: stefank, johnc, dsamersoff
2011-03-03 22:58:46 +01:00
Antonios Printezis
3ff554aec1 7014923: G1: code cleanup
Some G1 code cleanup.

Reviewed-by: johnc, jcoomes, jwilhelm
2011-03-04 17:13:19 -05:00
Igor Veresov
90a153aa38 6627983: G1: Bad oop deference during marking
Bulk zeroing reduction didn't work with G1, because arraycopy would call pre-barriers on uninitialized oops. The solution is to have version of arraycopy stubs that don't have pre-barriers. Also refactored arraycopy stubs generation on SPARC to be more readable and reduced the number of stubs necessary in some cases.

Reviewed-by: jrose, kvn, never
2011-03-01 14:56:48 -08:00
John Cuthbertson
9babe64b0a 7022200: G1: optimized build broken
Make the G1 specific version of is_in_closed_subset() available in all builds.

Reviewed-by: tonyp, jcoomes
2011-02-28 09:10:52 -08:00
Vladimir Kozlov
0ea15ed320 Merge 2011-02-23 11:18:16 -08:00
John Cuthbertson
154f0709bd 7020042: G1: Partially remove fix for 6994628
Disable reference discovery and processing during concurrent marking by disabling fix for 6994628.

Reviewed-by: tonyp, ysr
2011-02-18 10:07:34 -08:00
Antonios Printezis
f418b77aa6 7027766: G1: introduce flag to dump the liveness information per region at the end of marking
Repurpose the existing flag G1PrintRegionLivenessInfo to print out the liveness distribution across the regions in the heap at the end of marking.

Reviewed-by: iveresov, jwilhelm
2011-04-04 14:23:17 -04:00
Antonios Printezis
cec5c20656 7033292: G1: nightly failure: Non-dirty cards in region that should be dirty
The epochs on the card cache array are initialized to 0 and our initial epoch also starts at 0. So, until the first GC, it might be possible to successfully "claim" a card which was in fact never initialized.

Reviewed-by: johnc, iveresov, ysr
2011-04-04 13:18:35 -04:00
Antonios Printezis
3e9fe24ddd 7023069: G1: Introduce symmetric locking in the slow allocation path
7023151: G1: refactor the code that operates on _cur_alloc_region to be re-used for allocs by the GC threads
7018286: G1: humongous allocation attempts should take the GC locker into account

First, this change replaces the asymmetric locking scheme in the G1 slow alloc path by a summetric one. Second, it factors out the code that operates on _cur_alloc_region so that it can be re-used for allocations by the GC threads in the future.

Reviewed-by: stefank, brutisso, johnc
2011-03-30 10:26:59 -04:00
Antonios Printezis
349d820dd1 7029458: G1: Add newly-reclaimed regions to the beginning of the region free list, not the end
What the synopsis says.

Reviewed-by: jwilhelm, iveresov, johnc
2011-03-29 22:36:16 -04:00
John Cuthbertson
c2275649b7 7026932: G1: No need to abort VM when card count cache expansion fails
Manage allocation/freeing of the card cache counts and epochs arrays directly so that an allocation failure while attempting to expand these arrays does not abort the JVM. Failure to expand these arrays is not fatal.

Reviewed-by: iveresov, tonyp
2011-03-28 10:58:54 -07:00
Bengt Rutisson
4fd9f5071f 6948149: G1: Imbalance in termination times
Changed default value of WorkStealingYieldsBeforeSleep from 1000 to 5000. Added more information to G1 pause logging.

Reviewed-by: jwilhelm, tonyp, jmasa
2011-03-23 14:12:51 +01:00
Vladimir Kozlov
ddd4d3ad73 Merge 2011-02-14 14:36:29 -08:00
Vladimir Kozlov
287139e5a5 7014874: Incorrect COOPs modes on solaris-{sparcv9,amd64} with ParallelGC
Align old gen size down to keep specified heap size.

Reviewed-by: ysr
2011-02-08 16:12:16 -08:00
Stefan Karlsson
0c395c7799 7014851: Remove unused parallel compaction code
Removed.

Reviewed-by: jcoomes, brutisso
2011-02-08 12:33:19 +01:00
Y. Srinivas Ramakrishna
7eccb460db 6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
Fix block_size_if_printezis_bits() so it does not expect the bits, only uses them when available. Fix block_size_no_stall() so it does not stall when the bits are missing such cases, letting the caller deal with zero size returns. Constant pool cache oops do not need to be unparsable or conc_unsafe after their klass pointer is installed. Some cosmetic clean-ups and some assertion checking for conc-usafety which, in the presence of class file redefinition, has no a-priori time boundedness, so all GCs must be able to safely deal with putatively conc-unsafe objects in a stop-world pause.

Reviewed-by: jmasa, johnc
2011-02-07 22:19:57 -08:00
Yasumasa Suenaga
60418bbde3 7015169: GC Cause not always set
Sometimes the gc cause was not always set. This caused JStat to print the wrong information.

Reviewed-by: tonyp, ysr
2011-02-03 20:49:09 -08:00
Paul Hohensee
5b37c4faec 7016998: gcutil class LinearLeastSquareFit doesn't initialize some of its fields
Initialize _sum_x_squared, _intercept and _slope in constructor.

Reviewed-by: bobv, coleenp
2011-02-03 16:06:01 -05:00
John Cuthbertson
3373070e7f 6923430: G1: assert(res != 0,"This should have worked.")
7007446: G1: expand the heap with a single step, not one region at a time

Changed G1CollectedHeap::expand() to expand the committed space by calling VirtualSpace::expand_by() once rather than for every region in the expansion amount. This allows the success or failure of the expansion to be determined before creating any heap regions. Introduced a develop flag G1ExitOnExpansionFailure (false by default) that, when true, will exit the VM if the expansion of the committed space fails. Finally G1CollectedHeap::expand() returns a status back to it's caller so that the caller knows whether to attempt the allocation.

Reviewed-by: brutisso, tonyp
2011-02-02 10:41:20 -08:00
Y. Srinivas Ramakrishna
1046ee088f 6999988: CMS: Increased fragmentation leading to promotion failure after CR#6631166 got implemented
Fix calculation of _desired, in free list statistics, which was missing an intended set of parentheses.

Reviewed-by: poonam, jmasa
2011-02-01 10:02:01 -08:00
Antonios Printezis
d18d952e56 7014679: G1: deadlock during concurrent cleanup
There's a potential deadlock between the concurrent cleanup thread and the GC workers that are trying to allocate and waiting for more free regions to be made available.

Reviewed-by: iveresov, jcoomes
2011-01-31 16:28:40 -05:00
Coleen Phillimore
7b4f8073f0 6990754: Use native memory and reference counting to implement SymbolTable
Move symbols from permgen into C heap and reference count them

Reviewed-by: never, acorn, jmasa, stefank
2011-01-27 16:11:27 -08:00
John Cuthbertson
58ac605fea Merge 2011-01-26 09:57:42 -08:00
Antonios Printezis
ded092cb70 7014261: G1: RSet-related failures
A race between the concurrent cleanup thread and the VM thread while it is processing the "expanded sparse table list" causes both threads to try to free the same sparse table entry and either causes one of the threads to fail or leaves the entry in an inconsistent state. The solution is purge all entries on the expanded list that correspond go regions that are being cleaned up.

Reviewed-by: brutisso, johnc
2011-01-25 17:58:19 -05:00
John Cuthbertson
ecdb5848eb 6608385: G1: need to support parallel reference processing
Implement support for ParallelRefProcEnabled in the reference processing that takes place at the end of G1 concurrent marking.

Reviewed-by: tonyp, ysr
2011-01-25 10:56:22 -08:00
Antonios Printezis
14f4450d25 7013718: G1: small fixes for two assert/guarantee failures
Two small fixes to deal with a guarantee failure (the marking thread should join the SuspendibleThreadSet before calling a method that does pause prediction work so that said method is never called during a pause) and an assert failure (an assert is too strong).

Reviewed-by: iveresov, johnc
2011-01-21 11:30:22 -05:00
John Cuthbertson
d31ff8a886 Merge 2011-01-20 13:57:12 -08:00
Antonios Printezis
8bce4a6620 6977804: G1: remove the zero-filling thread
This changeset removes the zero-filling thread from G1 and collapses the two free region lists we had before (the "free" and "unclean" lists) into one. The new free list uses the new heap region sets / lists abstractions that we'll ultimately use it to keep track of all regions in the heap. A heap region set was also introduced for the humongous regions. Finally, this change increases the concurrency between the thread that completes freeing regions (after a cleanup pause) and the rest of the system (before we'd have to wait for said thread to complete before allocating a new region). The changest also includes a lot of refactoring and code simplification.

Reviewed-by: jcoomes, johnc
2011-01-19 19:30:42 -05:00
Keith McGuigan
272d7eaffc 7012505: BreakpointWithFullGC.sh fails with Internal Error (src/share/vm/oops/methodOop.cpp:220)
Rebuild breakpoint cache at gc_epilogue instead of during oops_do

Reviewed-by: dcubed, ysr, coleenp
2011-01-19 13:51:53 -08:00
Antonios Printezis
05b7df20dd 7011379: G1: overly long concurrent marking cycles
This changeset introduces filtering of SATB buffers at the point when they are about to be enqueued. If this filtering clears enough entries on each buffer, the buffer can then be re-used and not enqueued. This cuts down the number of SATB buffers that need to be processed by the concurrent marking threads.

Reviewed-by: johnc, ysr
2011-01-19 09:35:17 -05:00
John Cuthbertson
a484211e0b Merge 2011-01-13 17:19:21 -08:00
Y. Srinivas Ramakrishna
597a0cd214 7011940: iCMS: SIGSEGV in SweepClosure::do_already_free_chunk(FreeChunk*)+0x360
Revert a (relaxed version of the) bounds-check that was incorrectly removed in the fix for 7008136.

Reviewed-by: jmasa, johnc
2011-01-13 11:33:56 -08:00
Bengt Rutisson
2464e6b369 6941122: G1: UseLargePages does not work with G1 garbage collector
Pass the value of UseLargePages instead of false as the "large" parameter when reserving the G1 heap.

Reviewed-by: tonyp, johnc, phh
2011-01-13 04:43:30 -08:00
Antonios Printezis
bc1df68513 6994297: G1: do first-level slow-path allocations with a CAS
First attempt to allocate out the current alloc region using a CAS instead of taking the Heap_lock (first level of G1's slow allocation path). Only if that fails and it's necessary to replace the current alloc region take the Heap_lock (that's the second level of G1's slow allocation path).

Reviewed-by: johnc, brutisso, ysr
2011-01-12 16:34:25 -05:00
Antonios Printezis
5f21cb1b9b 7007068: G1: refine the BOT during evac failure handling
During evacuation failure handling we refine the BOT to reflect the location of all the objects in the regions we scan. The changeset includes some minor cleanup: a) non-product print_on() method on the G1 BOT class, b) added more complete BOT verification during heap / region verification, c) slight modification to the BOT set up for humongous regions to be more consistent with the BOT set up during evac failure handling, and d) removed a couple of unused methods.

Reviewed-by: johnc, ysr
2011-01-12 13:06:00 -05:00
Keith McGuigan
ae65c6240f 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
Make JvmtiGCMark safe to run non-safepoint and instrument CMS

Reviewed-by: ysr, dcubed
2011-01-10 17:14:53 -05:00
Y. Srinivas Ramakrishna
d921d72f20 7008136: CMS: assert((HeapWord*)nextChunk <= _limit) failed: sweep invariant
The recorded _sweep_limit may not necessarily remain a block boundary as the old generation expands during a concurrent cycle. Terminal actions inside the sweep closure need to be aware of this as they cross over the limit.

Reviewed-by: johnc, minqi
2011-01-06 23:50:02 -08:00
Antonios Printezis
2aa9ac1177 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
Fire the gc-begin and gc-end probes for G1.

Reviewed-by: kamg, ysr, jcoomes
2010-12-19 20:57:16 -05:00
Y. Srinivas Ramakrishna
41bf31bff4 6807801: CMS: could save/restore fewer header words during scavenge
Age bits need not enter the mark-word preservation calculus; also affected, in addition to CMS, per CR synopsis above, were ParNew (but not DefNew), ParallelScavenge and G1, albeit to a lesser degree than CMS.

Reviewed-by: tonyp, johnc
2010-12-17 23:41:31 -08:00
John Cuthbertson
b2fa4708ad 7006113: G1: Initialize ReferenceProcessor::_is_alive_non_header field
Initialize the _is_alive_non_header field of G1's reference processor with an instance of the G1CMIsAliveClosure. This will stop adding reference objects with live referents to the discovered reference lists unnecessarily.

Reviewed-by: tonyp, ysr, jwilhelm, brutisso
2010-12-17 11:26:53 -08:00
Antonios Printezis
727333a1a3 7000559: G1: assertion failure !outer || (full_collections_started == _full_collections_completed + 1)
The concurrent marking thread can complete its operation and increment the full GC counter during a Full GC. This causes the nesting of increments to the start and end of Full GCs that we are expecting to be wrong. the fix is for the marking thread to join the suspendible thread set before incrementing the counter so that it's blocked until the Full GC (or any other safepoint) is finished. The change also includes some minor code cleanup (I renamed a parameter).

Reviewed-by: brutisso, ysr
2010-12-14 16:19:44 -05:00
Y. Srinivas Ramakrishna
874098b1c6 Merge 2010-12-09 21:47:58 -08:00
Y. Srinivas Ramakrishna
8baafdfd45 7005259: CMS: BubbleUpRef asserts referent(obj)->is_oop() failed: Enqueued a bad referent
Relaxed the assert by allowing NULL referents when discovery may be concurrent.

Reviewed-by: johnc, jcoomes
2010-12-09 09:22:57 -08:00
Y. Srinivas Ramakrishna
544b475fc5 7001033: assert(gch->gc_cause() == GCCause::_scavenge_alot || !gch->incremental_collection_failed())
7002546: regression on SpecJbb2005 on 7b118 comparing to 7b117 on small heaps

Relaxed assertion checking related to incremental_collection_failed flag to allow for ExplicitGCInvokesConcurrent behaviour where we do not want a failing scavenge to bail to a stop-world collection. Parameterized incremental_collection_will_fail() so we can selectively use, or not use, as appropriate, the statistical prediction at specific use sites. This essentially reverts the scavenge bail-out logic to what it was prior to some recent changes that had inadvertently started using the statistical prediction which can be noisy in the presence of bursty loads. Added some associated verbose non-product debugging messages.

Reviewed-by: johnc, tonyp
2010-12-07 21:55:53 -08:00
Antonios Printezis
edcfaf0f84 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
Allow the eden to the expanded up to a point when the GC locker is active.

Reviewed-by: jwilhelm, johnc, ysr, jcoomes
2010-12-07 16:47:42 -05:00
Coleen Phillimore
faf320aede Merge 2010-12-06 15:37:00 -05:00
Antonios Printezis
dcf8c40e3a 7003860: G1: assert(_cur_alloc_region == NULL || !expect_null_cur_alloc_region) fails
Wrong assumption about expecting the current alloc region expected to be NULL in expand_and_allocate().

Reviewed-by: brutisso, ysr
2010-12-02 13:20:39 -05:00
John Cuthbertson
1065281a98 6983204: G1: Nightly test nsk/regression/b4958615 failing with +ExplicitGCInvokesConcurrent
Enable reference discovery during concurrent marking by setting the reference processor field of the concurrent marking closure. Keep reference objects on the discovered reference lists alive during incremental evacuation pauses until they are processed at the end of concurrent marking.

Reviewed-by: ysr, tonyp
2010-12-01 17:34:02 -08:00
Stefan Karlsson
4a33afe6c4 7003125: precompiled.hpp is included when precompiled headers are not used
Added an ifndef DONT_USE_PRECOMPILED_HEADER to precompiled.hpp. Set up DONT_USE_PRECOMPILED_HEADER when compiling with Sun Studio or when the user specifies USE_PRECOMPILED_HEADER=0. Fixed broken include dependencies.

Reviewed-by: coleenp, kvn
2010-12-01 15:04:06 +01:00
Stefan Karlsson
8006fe8f75 6989984: Use standard include model for Hospot
Replaced MakeDeps and the includeDB files with more standardized solutions.

Reviewed-by: coleenp, kvn, kamg
2010-11-23 13:22:55 -08:00