93 Commits

Author SHA1 Message Date
Jon Masamitsu
5c58d27aac 6964458: Reimplement class meta-data storage to use native memory
Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes

Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
2012-09-01 13:25:18 -04:00
Antonios Printezis
a6580a7e63 7114678: G1: various small fixes, code cleanup, and refactoring
Various cleanups as a prelude to introducing iterators for HeapRegions.

Reviewed-by: johnc, brutisso
2012-07-19 15:15:54 -07:00
Jon Masamitsu
00502cdd51 Merge 2012-07-16 13:00:26 -07:00
Bengt Rutisson
3571ee23dc 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
Also reviewed by: vitalyd@gmail.com. Move the timing out of G1CollectorPolicy into the G1GCPhaseTimes class

Reviewed-by: johnc
2012-07-11 22:47:38 +02:00
Zhengyu Gu
a39b17624a 6995781: Native Memory Tracking (Phase 1)
7151532: DCmd for hotspot native memory tracking

Implementation of native memory tracking phase 1, which tracks VM native memory usage, and related DCmd

Reviewed-by: acorn, coleenp, fparain
2012-06-28 17:03:16 -04:00
John Cuthbertson
377a04fe57 7143490: G1: Remove HeapRegion::_top_at_conc_mark_count
Removed the HeapRegion::_top_at_conc_mark_count field. It is no longer needed as a result of the changes for 6888336 and 7127706. Refactored the closures that finalize and verify the liveness counting data so that common functionality was placed into a base class.

Reviewed-by: brutisso, tonyp
2012-04-25 10:23:12 -07:00
Antonios Printezis
0afaaf8d36 7145441: G1: collection set chooser-related cleanup
Cleanup of the CSet chooser class: standardize on uints for region num and indexes (instead of int, jint, etc.), make the method / field naming style more consistent, remove a lot of dead code.

Reviewed-by: johnc, brutisso
2012-04-18 13:39:55 -04:00
Antonios Printezis
01ea4199c7 7157073: G1: type change size_t -> uint for region counts / indexes
Change the type of fields / variables / etc. that represent region counts and indeces from size_t to uint.

Reviewed-by: iveresov, brutisso, jmasa, jwilhelm
2012-04-18 07:21:15 -04:00
Bengt Rutisson
f695b75d78 4988100: oop_verify_old_oop appears to be dead
Removed oop_verify_old_oop and allow_dirty. Also reviewed by: alexlamsl@gmail.com

Reviewed-by: jmasa, jwilhelm
2012-04-16 08:57:18 +02:00
Bengt Rutisson
bb59715dae 7160728: Introduce an extra logging level for G1 logging
Added log levels "fine", "finer" and "finest". Let PrintGC map to "fine" and PrintGCDetails map to "finer". Separated out the per worker information in the G1 logging to the "finest" level.

Reviewed-by: stefank, jwilhelm, tonyp, johnc
2012-04-13 01:59:38 +02:00
Antonios Printezis
29afa9bf4b 7127697: G1: remove dead code after recent concurrent mark changes
Removed lots of dead code after some recent conc mark changes.

Reviewed-by: brutisso, johnc
2012-04-05 13:57:23 -04:00
Antonios Printezis
802519ea53 7127706: G1: re-enable survivors during the initial-mark pause
Re-enable survivors during the initial-mark pause. Afterwards, the concurrent marking threads have to scan them and mark everything reachable from them. The next GC will have to wait for the survivors to be scanned.

Reviewed-by: brutisso, johnc
2012-01-25 12:58:23 -05:00
John Cuthbertson
0fa6fc2279 6484965: G1: piggy-back liveness accounting phase on marking
Remove the separate counting phase of concurrent marking by tracking the amount of marked bytes and the cards spanned by marked objects in marking task/worker thread local data structures, which are updated as individual objects are marked.

Reviewed-by: brutisso, tonyp
2012-01-12 00:06:47 -08:00
Antonios Printezis
c9eb103b7f 7097586: G1: improve the per-space output when using jmap -heap
Extend the jmap -heap output for G1 to include some more G1-specific information.

Reviewed-by: brutisso, johnc, poonam
2012-01-18 10:30:12 -05:00
Bengt Rutisson
af0211c200 7130334: G1: Change comments and error messages that refer to CMS in g1/concurrentMark.cpp/hpp
Removed references to CMS in the concurrentMark.cpp/hpp files.

Reviewed-by: tonyp, jmasa, johnc
2012-01-16 11:21:21 +01:00
John Cuthbertson
dac656c955 7121547: G1: High number mispredicted branches while iterating over the marking bitmap
There is a high number of mispredicted branches associated with calling BitMap::iteratate() from within CMBitMapRO::iterate(). Implement a version of CMBitMapRO::iterate() directly using inline-able routines.

Reviewed-by: tonyp, iveresov
2012-01-13 13:27:48 -08:00
Antonios Printezis
1d3b26e52b 6888336: G1: avoid explicitly marking and pushing objects in survivor spaces
This change simplifies the interaction between GC and concurrent marking. By disabling survivor spaces during the initial-mark pause we don't need to propagate marks of objects we copy during each GC (since we never need to copy an explicitly marked object).

Reviewed-by: johnc, brutisso
2012-01-10 18:58:13 -05:00
John Cuthbertson
39d61f89a2 7121496: G1: do the per-region evacuation failure handling work in parallel
Parallelize the removal of self forwarding pointers etc. by wrapping in a HeapRegion closure, which is then wrapped inside an AbstractGangTask.

Reviewed-by: tonyp, iveresov
2011-12-23 11:14:18 -08:00
Stefan Karlsson
24e4bf6a80 7125516: G1: ~ConcurrentMark() frees incorrectly
Replaced the code with a ShouldNotReachHere

Reviewed-by: tonyp, jmasa
2011-12-29 07:37:23 +01:00
Jon Masamitsu
0ebc10bb13 7121618: Change type of number of GC workers to unsigned int
Change variables representing the number of GC workers to uint from int and size_t.  Change the parameter in work(int i) to work(uint worker_id).

Reviewed-by: brutisso, tonyp
2011-12-14 13:34:57 -08:00
John Cuthbertson
2768349b41 7120038: G1: ParallelGCThreads==0 is broken
Running G1 with ParallelGCThreads==0 results in various crashes and asserts. Most of these are caused by unguarded references to the worker threads array or an incorrect number of active workers.

Reviewed-by: jmasa, tonyp
2011-12-16 11:40:00 -08:00
John Cuthbertson
a3311881b5 7112743: G1: Reduce overhead of marking closure during evacuation pauses
Parallelize the serial code that was used to mark objects reachable from survivor objects in the collection set. Some minor improvments in the timers used to track the freeing of the collection set along with some tweaks to PrintGCDetails.

Reviewed-by: tonyp, brutisso
2011-11-17 12:40:15 -08:00
Jon Masamitsu
15070123fa 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
Select number of GC threads dynamically based on heap usage and number of Java threads

Reviewed-by: johnc, ysr, jcoomes
2011-08-09 10:16:01 -07:00
John Cuthbertson
a03f061ca2 7111795: G1: Various cleanups identified during walk through of changes for 6484965
Various cleanups and formatting changes identified during a code walk through of the changes for 6484965 ("G1: piggy-back liveness accounting phase on marking").

Reviewed-by: brutisso, tonyp
2011-11-18 12:27:10 -08:00
Antonios Printezis
83958f54fb 7092309: G1: introduce old region set
Keep track of all the old regions in the heap with a heap region set.

Reviewed-by: brutisso, johnc
2011-11-07 22:11:12 -05:00
Antonios Printezis
81bdd2ccc6 7088680: G1: Cleanup in the G1CollectorPolicy class
Removed unused fields and methods, removed the G1CollectoryPolicy_BestRegionsFirst class and folded its functionality into the G1CollectorPolicy class.

Reviewed-by: ysr, brutisso, jcoomes
2011-10-14 11:12:24 -04:00
John Cuthbertson
6513930e7a 7095194: G1: HeapRegion::GrainBytes, GrainWords, and CardsPerRegion should be size_t
Declare GrainBytes, GrainWords, and CardsPerRegion as size_t.

Reviewed-by: jcoomes, tonyp, jmasa
2011-10-05 08:44:10 -07:00
John Cuthbertson
1b62d10b4b 6484982: G1: process references during evacuation pauses
G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.

Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp
2011-09-22 10:57:37 -07:00
John Cuthbertson
08bdb35a29 7092245: G1: Wrong format specifier in G1PrintRegionLivenessInfo header output
Cast HeapRegion::GrainBytes to size_t in output statement.

Reviewed-by: ysr, brutisso, pbk, tonyp
2011-09-21 15:24:07 -07:00
John Cuthbertson
2f83b52706 7068215: G1: Print reference processing time during remark
Displays the elapsed time taken to perform reference processing during remark as part of the PrintGCDetails output.

Reviewed-by: ysr
2011-09-21 10:04:45 -07:00
Antonios Printezis
24eb07061e 7050392: G1: Introduce flag to generate a log of the G1 ergonomic decisions
It introduces ergonomic decision logging in G1 for the following heuristics: heap sizing, collection set construction, concurrent cycle initiation, and partially-young GC start/end. The code has a bit of refactoring in a few places to make the decision logging possible. It also replaces alternative ad-hoc logging that we have under different parameters and switches (G1_DEBUG, G1PolicyVerbose).

Reviewed-by: johnc, ysr
2011-09-07 12:21:23 -04:00
Bengt Rutisson
6fdb1414fa 6814390: G1: remove the concept of non-generational G1
Removed the possibility to turn off generational mode for G1.

Reviewed-by: johnc, ysr, tonyp
2011-08-19 09:30:59 +02:00
Antonios Printezis
4597e4c7a8 7049999: G1: Make the G1PrintHeapRegions output consistent and complete
Extend and make more consistent the output from the G1PrintHeapRegions flag.

Reviewed-by: johnc, jmasa
2011-06-24 12:38:49 -04:00
Antonios Printezis
7ceee7642b 7055073: G1: code cleanup in the concurrentMark.* files
Only cosmetic changes to make the concurrentMark.* more consistent, code-style-wise, with the rest of the codebase.

Reviewed-by: johnc, ysr
2011-06-20 22:03:13 -04:00
John Cuthbertson
b94d0b830c 7004681: G1: Extend marking verification to Full GCs
Perform a heap verification after the first phase of G1's full GC using objects' mark words to determine liveness. The third parameter of the heap verification routines, which was used in G1 to determine which marking bitmap to use in liveness calculations, has been changed from a boolean to an enum with values defined for using the mark word, and the 'prev' and 'next' bitmaps.

Reviewed-by: tonyp, ysr
2011-06-14 11:01:10 -07:00
Antonios Printezis
015e872efe 7046558: G1: concurrent marking optimizations
Some optimizations to improve the concurrent marking phase: specialize the main oop closure, make sure a few methods in the fast path are properly inlined, a few more bits and pieces, and some cosmetic fixes.

Reviewed-by: stefank, johnc
2011-06-14 10:33:43 -04:00
John Cuthbertson
95548aa291 7041440: G1: assert(obj->is_oop_or_null(true )) failed: Error #
During an evacuation pause clear the region fields of any concurrent marking task whose local finger points into the collection set as the values in the region fields will become stale. Clearing these fields causes the concurrent mark task to claim a new region when marking restarts after the pause.

Reviewed-by: tonyp, iveresov
2011-05-17 00:56:01 -07:00
Antonios Printezis
10f6cc7fc3 7035144: G1: nightly failure: Non-dirty cards in region that should be dirty (failures still exist...)
We should only undirty cards after we decide that they are not on a young region, not before. The fix also includes improvements to the verify_dirty_region() method which print out which cards were not found dirty.

Reviewed-by: johnc, brutisso
2011-04-29 14:59:04 -04:00
Antonios Printezis
8c04c76193 7034139: G1: assert(Thread::current()->is_ConcurrentGC_thread()) failed: only a conc GC thread can call this
We were calling STS join and leave during a STW pause and we are not suppoesed to. I now only call those during  concurrent phase. I also added stress code in the non-product builds to force an overflows (the condition that ws uncovering the bug) to make sure it does not happen again.

Reviewed-by: johnc, brutisso
2011-04-29 12:40:49 -04: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
Y. Srinivas Ramakrishna
b4b287e7ac 6668573: CMS: reference processing crash if ParallelCMSThreads > ParallelGCThreads
Use _max_num_q = max(discovery_degree, processing_degree), and let balance_queues() redistribute from discovery_degree to processing_degree of queues. This should also allow a more dynamic and flexible parallelism policy in the future.

Reviewed-by: jmasa, johnc
2011-03-17 10:32:46 -07: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
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
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
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
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