hotspot/src/share/vm/memory/tenuredGeneration.cpp
changeset 15482 470d0b0c09f1
parent 15091 826cff1f58f5
child 16681 d64161ca3e3c
equal deleted inserted replaced
15224:0f9e3436040d 15482:470d0b0c09f1
    31 #include "memory/generationSpec.hpp"
    31 #include "memory/generationSpec.hpp"
    32 #include "memory/space.hpp"
    32 #include "memory/space.hpp"
    33 #include "memory/tenuredGeneration.hpp"
    33 #include "memory/tenuredGeneration.hpp"
    34 #include "oops/oop.inline.hpp"
    34 #include "oops/oop.inline.hpp"
    35 #include "runtime/java.hpp"
    35 #include "runtime/java.hpp"
       
    36 #include "utilities/macros.hpp"
    36 
    37 
    37 TenuredGeneration::TenuredGeneration(ReservedSpace rs,
    38 TenuredGeneration::TenuredGeneration(ReservedSpace rs,
    38                                      size_t initial_byte_size, int level,
    39                                      size_t initial_byte_size, int level,
    39                                      GenRemSet* remset) :
    40                                      GenRemSet* remset) :
    40   OneContigSpaceCardGeneration(rs, initial_byte_size,
    41   OneContigSpaceCardGeneration(rs, initial_byte_size,
    59   _gc_counters = new CollectorCounters("MSC", 1);
    60   _gc_counters = new CollectorCounters("MSC", 1);
    60 
    61 
    61   _space_counters = new CSpaceCounters(gen_name, 0,
    62   _space_counters = new CSpaceCounters(gen_name, 0,
    62                                        _virtual_space.reserved_size(),
    63                                        _virtual_space.reserved_size(),
    63                                        _the_space, _gen_counters);
    64                                        _the_space, _gen_counters);
    64 #ifndef SERIALGC
    65 #if INCLUDE_ALL_GCS
    65   if (UseParNewGC) {
    66   if (UseParNewGC) {
    66     typedef ParGCAllocBufferWithBOT* ParGCAllocBufferWithBOTPtr;
    67     typedef ParGCAllocBufferWithBOT* ParGCAllocBufferWithBOTPtr;
    67     _alloc_buffers = NEW_C_HEAP_ARRAY(ParGCAllocBufferWithBOTPtr,
    68     _alloc_buffers = NEW_C_HEAP_ARRAY(ParGCAllocBufferWithBOTPtr,
    68                                       ParallelGCThreads, mtGC);
    69                                       ParallelGCThreads, mtGC);
    69     if (_alloc_buffers == NULL)
    70     if (_alloc_buffers == NULL)
    75         vm_exit_during_initialization("Could not allocate alloc_buffers");
    76         vm_exit_during_initialization("Could not allocate alloc_buffers");
    76     }
    77     }
    77   } else {
    78   } else {
    78     _alloc_buffers = NULL;
    79     _alloc_buffers = NULL;
    79   }
    80   }
    80 #endif // SERIALGC
    81 #endif // INCLUDE_ALL_GCS
    81 }
    82 }
    82 
    83 
    83 
    84 
    84 const char* TenuredGeneration::name() const {
    85 const char* TenuredGeneration::name() const {
    85   return "tenured generation";
    86   return "tenured generation";
   337     _gen_counters->update_all();
   338     _gen_counters->update_all();
   338   }
   339   }
   339 }
   340 }
   340 
   341 
   341 
   342 
   342 #ifndef SERIALGC
   343 #if INCLUDE_ALL_GCS
   343 oop TenuredGeneration::par_promote(int thread_num,
   344 oop TenuredGeneration::par_promote(int thread_num,
   344                                    oop old, markOop m, size_t word_sz) {
   345                                    oop old, markOop m, size_t word_sz) {
   345 
   346 
   346   ParGCAllocBufferWithBOT* buf = _alloc_buffers[thread_num];
   347   ParGCAllocBufferWithBOT* buf = _alloc_buffers[thread_num];
   347   HeapWord* obj_ptr = buf->allocate(word_sz);
   348   HeapWord* obj_ptr = buf->allocate(word_sz);
   421       _rs->verify_aligned_region_empty(_alloc_buffers[i]->range());
   422       _rs->verify_aligned_region_empty(_alloc_buffers[i]->range());
   422     }
   423     }
   423   }
   424   }
   424 }
   425 }
   425 
   426 
   426 #else  // SERIALGC
   427 #else  // INCLUDE_ALL_GCS
   427 void TenuredGeneration::retire_alloc_buffers_before_full_gc() {}
   428 void TenuredGeneration::retire_alloc_buffers_before_full_gc() {}
   428 void TenuredGeneration::verify_alloc_buffers_clean() {}
   429 void TenuredGeneration::verify_alloc_buffers_clean() {}
   429 #endif // SERIALGC
   430 #endif // INCLUDE_ALL_GCS
   430 
   431 
   431 bool TenuredGeneration::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const {
   432 bool TenuredGeneration::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const {
   432   size_t available = max_contiguous_available();
   433   size_t available = max_contiguous_available();
   433   size_t av_promo  = (size_t)gc_stats()->avg_promoted()->padded_average();
   434   size_t av_promo  = (size_t)gc_stats()->avg_promoted()->padded_average();
   434   bool   res = (available >= av_promo) || (available >= max_promotion_in_bytes);
   435   bool   res = (available >= av_promo) || (available >= max_promotion_in_bytes);