45 |
45 |
46 // reset sequence number |
46 // reset sequence number |
47 static void reset() { |
47 static void reset() { |
48 assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); |
48 assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); |
49 _seq_number = 1; |
49 _seq_number = 1; |
50 DEBUG_ONLY(_generation ++;) |
50 _generation ++; |
51 }; |
51 }; |
52 |
52 |
53 DEBUG_ONLY(static unsigned long current_generation() { return (unsigned long)_generation; }) |
53 static unsigned long current_generation() { return _generation; } |
54 NOT_PRODUCT(static jint max_seq_num() { return _max_seq_number; }) |
54 NOT_PRODUCT(static jint max_seq_num() { return _max_seq_number; }) |
55 |
55 |
56 private: |
56 private: |
57 static volatile jint _seq_number; |
57 static volatile jint _seq_number; |
58 NOT_PRODUCT(static jint _max_seq_number; ) |
58 static volatile unsigned long _generation; |
59 DEBUG_ONLY(static volatile unsigned long _generation; ) |
59 NOT_PRODUCT(static jint _max_seq_number; ) |
60 }; |
60 }; |
61 |
61 |
62 /* |
62 /* |
63 * followings are the classes that are used to hold memory activity records in different stages. |
63 * followings are the classes that are used to hold memory activity records in different stages. |
64 * MemPointer |
64 * MemPointer |