--- old/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java 2014-10-17 15:43:20.000000000 +0200 +++ new/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java 2014-10-17 15:43:20.000000000 +0200 @@ -34,7 +34,6 @@ import sun.jvm.hotspot.utilities.*; public class GenCollectedHeap extends SharedHeap { - private static CIntegerField nGensField; private static AddressField youngGenField; private static AddressField oldGenField; @@ -54,7 +53,6 @@ private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("GenCollectedHeap"); - nGensField = type.getCIntegerField("_n_gens"); youngGenField = type.getAddressField("_young_gen"); oldGenField = type.getAddressField("_old_gen"); @@ -70,7 +68,7 @@ } public int nGens() { - return (int) nGensField.getValue(addr); + return 2; } public Generation getGen(int i) { --- old/src/share/vm/memory/cardTableRS.cpp 2014-10-17 15:43:21.000000000 +0200 +++ new/src/share/vm/memory/cardTableRS.cpp 2014-10-17 15:43:21.000000000 +0200 @@ -56,12 +56,15 @@ #endif _ct_bs->initialize(); set_bs(_ct_bs); - _last_cur_val_in_gen = NEW_C_HEAP_ARRAY3(jbyte, GenCollectedHeap::max_gens + 1, + // max_gens is really GenCollectedHeap::heap()->gen_policy()->number_of_generations() + // (which always is 2), but GenCollectedHeap has not been initialized yet. + int max_gens = 2; + _last_cur_val_in_gen = NEW_C_HEAP_ARRAY3(jbyte, max_gens + 1, mtGC, CURRENT_PC, AllocFailStrategy::RETURN_NULL); if (_last_cur_val_in_gen == NULL) { vm_exit_during_initialization("Could not create last_cur_val_in_gen array."); } - for (int i = 0; i < GenCollectedHeap::max_gens + 1; i++) { + for (int i = 0; i < max_gens + 1; i++) { _last_cur_val_in_gen[i] = clean_card_val(); } _ct_bs->set_CTRS(this); --- old/src/share/vm/memory/genCollectedHeap.cpp 2014-10-17 15:43:22.000000000 +0200 +++ new/src/share/vm/memory/genCollectedHeap.cpp 2014-10-17 15:43:22.000000000 +0200 @@ -85,9 +85,6 @@ jint GenCollectedHeap::initialize() { CollectedHeap::pre_initialize(); - int i; - _n_gens = gen_policy()->number_of_generations(); - // While there are no constraints in the GC code that HeapWordSize // be any particular value, there are multiple other areas in the // system which believe this to be true (e.g. oop->object_size in some @@ -163,8 +160,7 @@ err_msg("Gen size; total_reserved=" SIZE_FORMAT ", alignment=" SIZE_FORMAT, total_reserved, alignment)); - int n_covered_regions = gen_policy()->young_gen_spec()->n_covered_regions() + - gen_policy()->old_gen_spec()->n_covered_regions(); + int n_covered_regions = 2; // Young + Old // Needed until the cardtable is fixed to have the right number // of covered regions. @@ -212,7 +208,7 @@ // Save the "used_region" for generations level and lower. void GenCollectedHeap::save_used_regions(int level) { - assert(level < _n_gens, "Illegal level parameter"); + assert(level < _gen_policy->number_of_generations(), "Illegal level parameter"); if (level == 1) { _old_gen->save_used_region(); } @@ -762,7 +758,7 @@ #endif // INCLUDE_ALL_GCS void GenCollectedHeap::do_full_collection(bool clear_all_soft_refs) { - do_full_collection(clear_all_soft_refs, _n_gens - 1); + do_full_collection(clear_all_soft_refs, _gen_policy->number_of_generations() - 1); } void GenCollectedHeap::do_full_collection(bool clear_all_soft_refs, @@ -1026,9 +1022,7 @@ return _gch; } - void GenCollectedHeap::prepare_for_compaction() { - guarantee(_n_gens = 2, "Wrong number of generations"); // Start by compacting into same gen. CompactPoint cp(_old_gen); _old_gen->prepare_for_compaction(&cp); --- old/src/share/vm/memory/genCollectedHeap.hpp 2014-10-17 15:43:23.000000000 +0200 +++ new/src/share/vm/memory/genCollectedHeap.hpp 2014-10-17 15:43:22.000000000 +0200 @@ -51,10 +51,6 @@ friend class GCCauseSetter; friend class VMStructs; public: - enum SomeConstants { - max_gens = 10 - }; - friend class VM_PopulateDumpSharedSpace; protected: @@ -62,8 +58,6 @@ static GenCollectedHeap* _gch; private: - int _n_gens; - Generation* _young_gen; Generation* _old_gen; @@ -367,11 +361,6 @@ // collection. virtual bool is_maximal_no_gc() const; - int n_gens() const { - assert(_n_gens == gen_policy()->number_of_generations(), "Sanity"); - return _n_gens; - } - // Convenience function to be used in situations where the heap type can be // asserted to be this type. static GenCollectedHeap* heap(); --- old/src/share/vm/memory/generation.cpp 2014-10-17 15:43:23.000000000 +0200 +++ new/src/share/vm/memory/generation.cpp 2014-10-17 15:43:23.000000000 +0200 @@ -63,9 +63,9 @@ } GenerationSpec* Generation::spec() { - GenCollectedHeap* gch = GenCollectedHeap::heap(); - assert(0 <= level() && level() < gch->_n_gens, "Bad gen level"); - return level() == 0 ? gch->gen_policy()->young_gen_spec() : gch->gen_policy()->old_gen_spec(); + GenCollectorPolicy* gcp = GenCollectedHeap::heap()->gen_policy(); + assert(0 <= level() && level() < gcp->number_of_generations(), "Bad gen level"); + return level() == 0 ? gcp->young_gen_spec() : gcp->old_gen_spec(); } size_t Generation::max_capacity() const { --- old/src/share/vm/memory/generationSpec.hpp 2014-10-17 15:43:24.000000000 +0200 +++ new/src/share/vm/memory/generationSpec.hpp 2014-10-17 15:43:24.000000000 +0200 @@ -53,10 +53,6 @@ void set_init_size(size_t size) { _init_size = size; } size_t max_size() const { return _max_size; } void set_max_size(size_t size) { _max_size = size; } - - // Return the number of regions contained in the generation which - // might need to be independently covered by a remembered set. - virtual int n_covered_regions() const { return 1; } }; typedef GenerationSpec* GenerationSpecPtr; --- old/src/share/vm/runtime/vmStructs.cpp 2014-10-17 15:43:25.000000000 +0200 +++ new/src/share/vm/runtime/vmStructs.cpp 2014-10-17 15:43:25.000000000 +0200 @@ -545,7 +545,6 @@ nonstatic_field(GenerationSpec, _max_size, size_t) \ \ static_field(GenCollectedHeap, _gch, GenCollectedHeap*) \ - nonstatic_field(GenCollectedHeap, _n_gens, int) \ \ nonstatic_field(GenCollectorPolicy, _young_gen_spec, GenerationSpec*) \ nonstatic_field(GenCollectorPolicy, _old_gen_spec, GenerationSpec*) \ @@ -2238,8 +2237,6 @@ declare_constant(CollectedHeap::SharedHeap) \ declare_constant(CollectedHeap::GenCollectedHeap) \ \ - declare_constant(GenCollectedHeap::max_gens) \ - \ /* constants from Generation::Name enum */ \ \ declare_constant(Generation::DefNew) \ --- old/src/share/vm/services/memoryService.cpp 2014-10-17 15:43:26.000000000 +0200 +++ new/src/share/vm/services/memoryService.cpp 2014-10-17 15:43:25.000000000 +0200 @@ -126,9 +126,8 @@ CollectorPolicy* policy = heap->collector_policy(); assert(policy->is_generation_policy(), "Only support two generations"); - guarantee(heap->n_gens() == 2, "Only support two-generation heap"); - GenCollectorPolicy* gen_policy = policy->as_generation_policy(); + guarantee(gen_policy->number_of_generations() == 2, "Only support two-generation heap"); if (gen_policy != NULL) { Generation::Name kind = gen_policy->young_gen_spec()->name(); switch (kind) {