< prev index next >
src/share/vm/runtime/virtualspace.hpp
Print this page
rev 7602 : 8064457: Introduce compressed oops mode disjoint base and improve compressed heap handling.
@@ -29,37 +29,33 @@
// ReservedSpace is a data structure for reserving a contiguous address range.
class ReservedSpace VALUE_OBJ_CLASS_SPEC {
friend class VMStructs;
- private:
+ protected:
char* _base;
size_t _size;
size_t _noaccess_prefix;
size_t _alignment;
bool _special;
+ private:
bool _executable;
// ReservedSpace
ReservedSpace(char* base, size_t size, size_t alignment, bool special,
bool executable);
+ protected:
void initialize(size_t size, size_t alignment, bool large,
char* requested_address,
- const size_t noaccess_prefix,
bool executable);
- protected:
- // Create protection page at the beginning of the space.
- void protect_noaccess_prefix(const size_t size);
-
public:
// Constructor
ReservedSpace();
ReservedSpace(size_t size);
ReservedSpace(size_t size, size_t alignment, bool large,
- char* requested_address = NULL,
- const size_t noaccess_prefix = 0);
+ char* requested_address = NULL);
ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
// Accessors
char* base() const { return _base; }
size_t size() const { return _size; }
@@ -96,16 +92,27 @@
ReservedSpace ReservedSpace::last_part(size_t partition_size)
{
return last_part(partition_size, alignment());
}
-// Class encapsulating behavior specific of memory space reserved for Java heap
+// Class encapsulating behavior specific of memory space reserved for Java heap.
class ReservedHeapSpace : public ReservedSpace {
-public:
- // Constructor
- ReservedHeapSpace(size_t size, size_t forced_base_alignment,
- bool large, char* requested_address);
+ private:
+ void try_reserve_heap(size_t size, size_t alignment, bool large,
+ char *requested_address);
+ void try_reserve_range(char *highest_start, char *lowest_start,
+ size_t attach_point_alignment, char *aligned_HBMA,
+ char *upper_bound, size_t size, size_t alignment, bool large);
+ void initialize_compressed_heap(const size_t size, size_t alignment, bool large);
+ // Create protection page at the beginning of the space.
+ void establish_noaccess_prefix();
+ public:
+ // Constructor. Tries to find a heap that is good for compressed oops.
+ ReservedHeapSpace(size_t size, size_t forced_base_alignment, bool large);
+ // Returns the base to be used for compression, i.e. so that null can be
+ // encoded safely and implicit null checks can work.
+ char *compressed_oop_base() { return _base - _noaccess_prefix; }
};
// Class encapsulating behavior specific memory space for Code
class ReservedCodeSpace : public ReservedSpace {
public:
< prev index next >