< prev index next >

src/hotspot/share/memory/virtualspace.hpp

Print this page
rev 52439 : [mq]: webrev.2_reserved_page_size


  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_RUNTIME_VIRTUALSPACE_HPP
  26 #define SHARE_VM_RUNTIME_VIRTUALSPACE_HPP
  27 
  28 #include "utilities/globalDefinitions.hpp"
  29 
  30 // ReservedSpace is a data structure for reserving a contiguous address range.
  31 
  32 class ReservedSpace {
  33   friend class VMStructs;
  34  protected:
  35   char*  _base;
  36   size_t _size;
  37   size_t _noaccess_prefix;
  38   size_t _alignment;
  39   bool   _special;
  40   int    _fd_for_heap;

  41  private:
  42   bool   _executable;
  43 
  44   // ReservedSpace
  45   ReservedSpace(char* base, size_t size, size_t alignment, bool special,
  46                 bool executable);
  47  protected:
  48   void initialize(size_t size, size_t alignment, bool large,
  49                   char* requested_address,
  50                   bool executable);

  51 
  52  public:
  53   // Constructor
  54   ReservedSpace();
  55   // Initialize the reserved space with the given size. If preferred_page_size
  56   // is set, use this as minimum page size/alignment. This may waste some space
  57   // if the given size is not aligned to that value, as the reservation will be
  58   // aligned up to the final alignment in this case.
  59   ReservedSpace(size_t size, size_t preferred_page_size = 0);
  60   ReservedSpace(size_t size, size_t alignment, bool large,
  61                 char* requested_address = NULL);
  62   ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
  63 
  64   // Accessors
  65   char*  base()            const { return _base;      }
  66   size_t size()            const { return _size;      }
  67   char*  end()             const { return _base + _size; }
  68   size_t alignment()       const { return _alignment; }
  69   bool   special()         const { return _special;   }
  70   bool   executable()      const { return _executable;   }
  71   size_t noaccess_prefix() const { return _noaccess_prefix;   }
  72   bool is_reserved()       const { return _base != NULL; }

  73   void release();
  74 
  75   // Splitting
  76   ReservedSpace first_part(size_t partition_size, size_t alignment,
  77                            bool split = false, bool realloc = true);
  78   ReservedSpace last_part (size_t partition_size, size_t alignment);
  79 
  80   // These simply call the above using the default alignment.
  81   inline ReservedSpace first_part(size_t partition_size,
  82                                   bool split = false, bool realloc = true);
  83   inline ReservedSpace last_part (size_t partition_size);
  84 
  85   // Alignment
  86   static size_t page_align_size_up(size_t size);
  87   static size_t page_align_size_down(size_t size);
  88   static size_t allocation_align_size_up(size_t size);
  89   static size_t allocation_align_size_down(size_t size);
  90   bool contains(const void* p) const {
  91     return (base() <= ((char*)p)) && (((char*)p) < (base() + size()));
  92   }




  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_RUNTIME_VIRTUALSPACE_HPP
  26 #define SHARE_VM_RUNTIME_VIRTUALSPACE_HPP
  27 
  28 #include "utilities/globalDefinitions.hpp"
  29 
  30 // ReservedSpace is a data structure for reserving a contiguous address range.
  31 
  32 class ReservedSpace {
  33   friend class VMStructs;
  34  protected:
  35   char*  _base;
  36   size_t _size;
  37   size_t _noaccess_prefix;
  38   size_t _alignment;
  39   bool   _special;
  40   int    _fd_for_heap;
  41   size_t _actual_page_size;
  42  private:
  43   bool   _executable;
  44 
  45   // ReservedSpace
  46   ReservedSpace(char* base, size_t size, size_t alignment, bool special,
  47                 bool executable);
  48  protected:
  49   void initialize(size_t size, size_t alignment, bool large,
  50                   char* requested_address,
  51                   bool executable);
  52   void update_actual_page_size(bool large_page);
  53 
  54  public:
  55   // Constructor
  56   ReservedSpace();
  57   // Initialize the reserved space with the given size. If preferred_page_size
  58   // is set, use this as minimum page size/alignment. This may waste some space
  59   // if the given size is not aligned to that value, as the reservation will be
  60   // aligned up to the final alignment in this case.
  61   ReservedSpace(size_t size, size_t preferred_page_size = 0);
  62   ReservedSpace(size_t size, size_t alignment, bool large,
  63                 char* requested_address = NULL);
  64   ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
  65 
  66   // Accessors
  67   char*  base()            const { return _base;      }
  68   size_t size()            const { return _size;      }
  69   char*  end()             const { return _base + _size; }
  70   size_t alignment()       const { return _alignment; }
  71   bool   special()         const { return _special;   }
  72   bool   executable()      const { return _executable;   }
  73   size_t noaccess_prefix() const { return _noaccess_prefix;   }
  74   bool is_reserved()       const { return _base != NULL; }
  75   size_t actual_page_size() const { return _actual_page_size; }
  76   void release();
  77 
  78   // Splitting
  79   ReservedSpace first_part(size_t partition_size, size_t alignment,
  80                            bool split = false, bool realloc = true);
  81   ReservedSpace last_part (size_t partition_size, size_t alignment);
  82 
  83   // These simply call the above using the default alignment.
  84   inline ReservedSpace first_part(size_t partition_size,
  85                                   bool split = false, bool realloc = true);
  86   inline ReservedSpace last_part (size_t partition_size);
  87 
  88   // Alignment
  89   static size_t page_align_size_up(size_t size);
  90   static size_t page_align_size_down(size_t size);
  91   static size_t allocation_align_size_up(size_t size);
  92   static size_t allocation_align_size_down(size_t size);
  93   bool contains(const void* p) const {
  94     return (base() <= ((char*)p)) && (((char*)p) < (base() + size()));
  95   }


< prev index next >