< prev index next >

src/hotspot/share/memory/virtualspace.hpp

Print this page




  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   char*  _nvdimm_base;
  37   char*  _nvdimm_base_nv;
  38   size_t _size;
  39   size_t _dram_size;
  40   size_t _nvdimm_size;
  41   size_t _noaccess_prefix;
  42   size_t _alignment;
  43   bool   _special;
  44   int    _fd_for_heap;
  45   int    _fd_for_nvdimm;
  46  private:
  47   bool   _executable;
  48 
  49   // ReservedSpace
  50   ReservedSpace(char* base, size_t size, size_t alignment, bool special,
  51                 bool executable);
  52  protected:
  53   void initialize(size_t size, size_t alignment, bool large,
  54                   char* requested_address,
  55                   bool executable);
  56 
  57  public:
  58   // Constructor
  59   ReservedSpace();
  60   // Initialize the reserved space with the given size. If preferred_page_size
  61   // is set, use this as minimum page size/alignment. This may waste some space
  62   // if the given size is not aligned to that value, as the reservation will be
  63   // aligned up to the final alignment in this case.
  64   ReservedSpace(size_t size, size_t preferred_page_size = 0);
  65   ReservedSpace(size_t size, size_t alignment, bool large,
  66                 char* requested_address = NULL);
  67   ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
  68 
  69   // Accessors
  70   char*  base()            const { return _base;      }
  71   char*  nvdimm_base()     const { return _nvdimm_base; }
  72   int    nvdimm_fd()       const { return _fd_for_nvdimm; }
  73   void   setup_fd(int fd)  {_fd_for_nvdimm = fd; } 
  74   size_t size()            const { return _size;      }
  75   size_t nvdimm_size()     const { return _nvdimm_size;  }
  76   char*  end()             const { return _base + _size; }
  77   size_t alignment()       const { return _alignment; }
  78   bool   special()         const { return _special;   }
  79   bool   executable()      const { return _executable;   }
  80   size_t noaccess_prefix() const { return _noaccess_prefix;   }
  81   bool is_reserved()       const { return _base != NULL; }
  82   void release();
  83 
  84   // Splitting
  85   ReservedSpace first_part(size_t partition_size, size_t alignment,
  86                            bool split = false, bool realloc = true);
  87   ReservedSpace last_part (size_t partition_size, size_t alignment);
  88 
  89   // These simply call the above using the default alignment.
  90   inline ReservedSpace first_part(size_t partition_size,
  91                                   bool split = false, bool realloc = true);
  92   inline ReservedSpace last_part (size_t partition_size);
  93 




  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   char*  _nvdimm_base;
  37   char*  _nvdimm_base_nv;
  38   size_t _size;
  39   size_t _dram_size;
  40   size_t _nvdimm_size;
  41   size_t _noaccess_prefix;
  42   size_t _alignment;
  43   bool   _special;
  44   int    _fd_for_heap;

  45  private:
  46   bool   _executable;
  47 
  48   // ReservedSpace
  49   ReservedSpace(char* base, size_t size, size_t alignment, bool special,
  50                 bool executable);
  51  protected:
  52   void initialize(size_t size, size_t alignment, bool large,
  53                   char* requested_address,
  54                   bool executable);
  55 
  56  public:
  57   // Constructor
  58   ReservedSpace();
  59   // Initialize the reserved space with the given size. If preferred_page_size
  60   // is set, use this as minimum page size/alignment. This may waste some space
  61   // if the given size is not aligned to that value, as the reservation will be
  62   // aligned up to the final alignment in this case.
  63   ReservedSpace(size_t size, size_t preferred_page_size = 0);
  64   ReservedSpace(size_t size, size_t alignment, bool large,
  65                 char* requested_address = NULL);
  66   ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
  67 
  68   // Accessors
  69   char*  base()            const { return _base;      }
  70   char*  nvdimm_base()     const { return _nvdimm_base; }
  71   int    nvdimm_fd()       const { return _fd_for_heap; }
  72   void   setup_fd(int fd)  {_fd_for_heap = fd; } 
  73   size_t size()            const { return _size;      }
  74   size_t nvdimm_size()     const { return _nvdimm_size;  }
  75   char*  end()             const { return _base + _size; }
  76   size_t alignment()       const { return _alignment; }
  77   bool   special()         const { return _special;   }
  78   bool   executable()      const { return _executable;   }
  79   size_t noaccess_prefix() const { return _noaccess_prefix;   }
  80   bool is_reserved()       const { return _base != NULL; }
  81   void release();
  82 
  83   // Splitting
  84   ReservedSpace first_part(size_t partition_size, size_t alignment,
  85                            bool split = false, bool realloc = true);
  86   ReservedSpace last_part (size_t partition_size, size_t alignment);
  87 
  88   // These simply call the above using the default alignment.
  89   inline ReservedSpace first_part(size_t partition_size,
  90                                   bool split = false, bool realloc = true);
  91   inline ReservedSpace last_part (size_t partition_size);
  92 


< prev index next >