1. 25 8月, 2010 1 次提交
    • T
      6974966: G1: unnecessary direct-to-old allocations · 41dac17c
      tonyp 提交于
      Summary: This change revamps the slow allocation path of G1. Improvements include the following: a) Allocations directly to old regions are now totally banned. G1 now only allows allocations out of young regions (with the only exception being humongous regions). b) The thread that allocates a new region (which is now guaranteed to be young) does not dirty all its cards. Each thread that successfully allocates out of a young region is now responsible for dirtying the cards that corresponding to the "block" that just got allocated. c) allocate_new_tlab() and mem_allocate() are now implemented differently and TLAB allocations are only done by allocate_new_tlab(). d) If a thread schedules an evacuation pause in order to satisfy an allocation request, it will perform the allocation at the end of the safepoint so that the thread that initiated the GC also gets "first pick" of any space made available by the GC. e) If a thread is unable to allocate a humongous object it will schedule an evacuation pause in case it reclaims enough regions so that the humongous allocation can be satisfied aftewards. f) The G1 policy is more careful to set the young list target length to be the survivor number +1. g) Lots of code tidy up, removal, refactoring to make future changes easier.
      Reviewed-by: johnc, ysr
      41dac17c
  2. 24 11月, 2010 1 次提交
  3. 17 11月, 2010 1 次提交
    • J
      6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again · 8d02802f
      johnc 提交于
      Summary: An evacuation failure while copying the roots caused an object, A, to be forwarded to itself. During the subsequent RSet updating a reference to A was processed causing the reference to be added to the RSet of A's heap region. As a result of adding to the remembered set we ran into the issue described in 6930581 - the sparse table expanded and the RSet scanning code walked the cards in one instance of RHashTable (_cur) while the occupied() counts the cards in the expanded table (_next).
      Reviewed-by: tonyp, iveresov
      8d02802f
  4. 17 10月, 2010 1 次提交
    • T
      6991377: G1: race between concurrent refinement and humongous object allocation · a9a0cccb
      tonyp 提交于
      Summary: There is a race between the concurrent refinement threads and the humongous object allocation that can cause the concurrent refinement threads to corrupt the part of the BOT that it is being initialized by the humongous object allocation operation. The solution is to do the humongous object allocation in careful steps to ensure that the concurrent refinement threads always have a consistent view over the BOT, region contents, and top. The fix includes some very minor tidying up in sparsePRT.
      Reviewed-by: jcoomes, johnc, ysr
      a9a0cccb
  5. 19 10月, 2010 1 次提交
    • J
      6988458: G1: assert(mr.end() <= _cm->finger()) failed: otherwise the region... · f0680241
      johnc 提交于
      6988458: G1: assert(mr.end() <= _cm->finger()) failed: otherwise the region shouldn't be on the stack
      Summary: The changes from 6941395 did not clear the CMTask::_aborted_region fields when concurrent marking aborted because of overflow. As a result, the next time around we could see a memory region whose start address was above the global finger and the assertion tripped. Moved the clearing of the aborted regions to ConcurrentMark::clear_marking_state, which is executed on all of the exit paths.
      Reviewed-by: tonyp, ysr, jmasa
      f0680241
  6. 16 10月, 2010 1 次提交
  7. 14 10月, 2010 1 次提交
  8. 13 10月, 2010 2 次提交
  9. 02 10月, 2010 2 次提交
    • T
      6980838: G1: guarantee(false) failed: thread has an unexpected active value in its SATB queue · acd6a8e3
      tonyp 提交于
      Summary: Under certain circumstances a safepoint could happen between a JavaThread object being created and that object being added to the Java threads list. This could cause the active field of that thread's SATB queue to get out-of-sync with respect to the other Java threads. The solution is to activate the SATB queue, when necessary, before adding the thread to the Java threads list, not when the JavaThread object is created. The changeset also includes a small fix to rename the surrogate locker thread from "Surrogate Locker Thread (CMS)" to "Surrogate Locker Thread (Concurrent GC)" since it's also used in G1.
      Reviewed-by: iveresov, ysr, johnc, jcoomes
      acd6a8e3
    • J
      6983311: G1: LoopTest hangs when run with -XX:+ExplicitInvokesConcurrent · 52b8d7bd
      johnc 提交于
      Summary: Clear the concurrent marking "in progress" flag while the FullGCCount_lock is held. This avoids a race that can cause back to back System.gc() calls, when ExplicitGCInvokesConcurrent is enabled, to fail to initiate a marking cycle causing the requesting thread to hang.
      Reviewed-by: tonyp, ysr
      52b8d7bd
  10. 29 9月, 2010 2 次提交
  11. 14 9月, 2010 1 次提交
    • J
      6981746: G1: SEGV with -XX:+TraceGen0Time · a5cebdbe
      johnc 提交于
      Summary: Pass correct value for length to NumberSeq constructor. Guard dereferences of "body_summary" pointer with a NULL check.
      Reviewed-by: tonyp, ysr
      a5cebdbe
  12. 21 9月, 2010 1 次提交
  13. 26 8月, 2010 1 次提交
  14. 18 8月, 2010 3 次提交
  15. 10 8月, 2010 1 次提交
  16. 09 8月, 2010 1 次提交
  17. 07 8月, 2010 1 次提交
    • J
      6930581: G1: assert(ParallelGCThreads > 1 || n_yielded() ==... · d0aa394b
      johnc 提交于
      6930581: G1: assert(ParallelGCThreads > 1 || n_yielded() == _hrrs->occupied(),"Should have yielded all the ..
      Summary: During RSet updating, when ParallelGCThreads is zero, references that point into the collection set are added directly the referenced region's RSet. This can cause the sparse table in the RSet to expand. RSet scanning and the "occupied" routine will then operate on different instances of the sparse table causing the assert to trip. This may also cause some cards added post expansion to be missed during RSet scanning. When ParallelGCThreads is non-zero such references are recorded on the "references to be scanned" queue and the card containing the reference is recorded in a dirty card queue for use in the event of an evacuation failure. Employ the parallel code in the serial case to avoid expanding the RSets of regions in the collection set.
      Reviewed-by: iveresov, ysr, tonyp
      d0aa394b
  18. 05 8月, 2010 1 次提交
    • T
      6963209: G1: remove the concept of abandoned pauses · e49283a2
      tonyp 提交于
      Summary: As part of 6944166 we disabled the concept of abandoned pauses (i.e., if the collection set is empty, we would still try to do a pause even if it is to update the RSets and scan the roots). This changeset removes the code and structures associated with abandoned pauses.
      Reviewed-by: iveresov, johnc
      e49283a2
  19. 03 8月, 2010 1 次提交
    • J
      6814437: G1: remove the _new_refs array · 64711cc9
      johnc 提交于
      Summary: The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure.
      Reviewed-by: iveresov, jmasa, tonyp
      64711cc9
  20. 20 7月, 2010 1 次提交
  21. 29 6月, 2010 1 次提交
  22. 28 5月, 2010 2 次提交
  23. 25 5月, 2010 1 次提交
  24. 19 5月, 2010 1 次提交
  25. 15 5月, 2010 1 次提交
  26. 12 5月, 2010 1 次提交
  27. 23 4月, 2010 1 次提交
  28. 08 5月, 2010 1 次提交
    • T
      6949307: G1: raise a vm error, do not core dump, if target pause time and... · 7a0c8373
      tonyp 提交于
      6949307: G1: raise a vm error, do not core dump, if target pause time and target interval are inconsistent
      Summary: First, change the guarantee to raising a vm error. Second, set the interval dynamically, and based on the pause time target, if it is not set explicitly.
      Reviewed-by: ysr, johnc
      7a0c8373
  29. 23 4月, 2010 1 次提交
  30. 16 4月, 2010 3 次提交
  31. 08 4月, 2010 1 次提交
    • J
      6940894: G1: assert(new_obj != 0 || ... "should be forwarded") for compaction tests · bc7497dc
      johnc 提交于
      Summary: Humongous regions may contain multiple objects as a result of being retained as to-space from a previous GC and then re-used as to-space after being tagged as humongous. These changes include a check that causes retained to-space regions that are now tagged as humongous to be disregarded and a new to-space region allocated.
      Reviewed-by: tonyp, iveresov
      bc7497dc
  32. 06 4月, 2010 1 次提交
    • T
      6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.") · 524b2dd2
      tonyp 提交于
      Summary: Make sure that two marking cycles do not overlap, i.e., a new one can only start after the concurrent marking thread finishes all its work. In the fix I piggy-back a couple of minor extra fixes: some general code reformatting for consistency (only around the code I modified), the removal of a field (G1CollectorPolicy::_should_initiate_conc_mark) which doesn't seem to be used at all (it's only set but never read), as well as moving the "is GC locker active" test earlier into the G1 pause / Full GC and using a more appropriate method for it.
      Reviewed-by: johnc, jmasa, jcoomes, ysr
      524b2dd2