hotspot/src/share/vm/services/lowMemoryDetector.hpp
changeset 8110 c992c8d52344
parent 7397 5b173b4ca846
child 13195 be27e1b6a4b9
equal deleted inserted replaced
8109:26c288ddbec3 8110:c992c8d52344
     1 /*
     1 /*
     2  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    56 // For Code cache, detection will be performed in the allocation
    56 // For Code cache, detection will be performed in the allocation
    57 // and deallocation.
    57 // and deallocation.
    58 //
    58 //
    59 // May need to deal with hysteresis effect.
    59 // May need to deal with hysteresis effect.
    60 //
    60 //
    61 
    61 // Memory detection code runs in the Service thread (serviceThread.hpp).
    62 class LowMemoryDetectorThread;
    62 
    63 class OopClosure;
    63 class OopClosure;
    64 class MemoryPool;
    64 class MemoryPool;
    65 
    65 
    66 class ThresholdSupport : public CHeapObj {
    66 class ThresholdSupport : public CHeapObj {
    67  private:
    67  private:
   209   void print();
   209   void print();
   210 #endif // PRODUCT
   210 #endif // PRODUCT
   211 };
   211 };
   212 
   212 
   213 class LowMemoryDetector : public AllStatic {
   213 class LowMemoryDetector : public AllStatic {
   214 friend class LowMemoryDetectorDisabler;
   214   friend class LowMemoryDetectorDisabler;
       
   215   friend class ServiceThread;
   215 private:
   216 private:
   216   // true if any collected heap has low memory detection enabled
   217   // true if any collected heap has low memory detection enabled
   217   static volatile bool _enabled_for_collected_pools;
   218   static volatile bool _enabled_for_collected_pools;
   218   // > 0 if temporary disabed
   219   // > 0 if temporary disabed
   219   static volatile jint _disabled_count;
   220   static volatile jint _disabled_count;
   220 
   221 
   221   static LowMemoryDetectorThread* _detector_thread;
       
   222   static void low_memory_detector_thread_entry(JavaThread* thread, TRAPS);
       
   223   static void check_memory_usage();
   222   static void check_memory_usage();
   224   static bool has_pending_requests();
   223   static bool has_pending_requests();
   225   static bool temporary_disabled() { return _disabled_count > 0; }
   224   static bool temporary_disabled() { return _disabled_count > 0; }
   226   static void disable() { Atomic::inc(&_disabled_count); }
   225   static void disable() { Atomic::inc(&_disabled_count); }
   227   static void enable() { Atomic::dec(&_disabled_count); }
   226   static void enable() { Atomic::dec(&_disabled_count); }
       
   227   static void process_sensor_changes(TRAPS);
   228 
   228 
   229 public:
   229 public:
   230   static void initialize();
       
   231   static void detect_low_memory();
   230   static void detect_low_memory();
   232   static void detect_low_memory(MemoryPool* pool);
   231   static void detect_low_memory(MemoryPool* pool);
   233   static void detect_after_gc_memory(MemoryPool* pool);
   232   static void detect_after_gc_memory(MemoryPool* pool);
   234 
   233 
   235   static bool is_enabled(MemoryPool* pool) {
   234   static bool is_enabled(MemoryPool* pool) {
   273           detect_low_memory(pool);
   272           detect_low_memory(pool);
   274         }
   273         }
   275       }
   274       }
   276     }
   275     }
   277   }
   276   }
   278 
       
   279 };
   277 };
   280 
   278 
   281 class LowMemoryDetectorDisabler: public StackObj {
   279 class LowMemoryDetectorDisabler: public StackObj {
   282 public:
   280 public:
   283   LowMemoryDetectorDisabler()
   281   LowMemoryDetectorDisabler()