src/share/vm/runtime/virtualspace.cpp

changeset 4037
da91efe96a93
parent 3900
d2a62e0f25eb
child 4369
730cc4ddd550
     1.1 --- a/src/share/vm/runtime/virtualspace.cpp	Fri Aug 31 16:39:35 2012 -0700
     1.2 +++ b/src/share/vm/runtime/virtualspace.cpp	Sat Sep 01 13:25:18 2012 -0400
     1.3 @@ -155,38 +155,27 @@
     1.4    return true;
     1.5  }
     1.6  
     1.7 -ReservedSpace::ReservedSpace(const size_t prefix_size,
     1.8 -                             const size_t prefix_align,
     1.9 -                             const size_t suffix_size,
    1.10 +ReservedSpace::ReservedSpace(const size_t suffix_size,
    1.11                               const size_t suffix_align,
    1.12                               char* requested_address,
    1.13                               const size_t noaccess_prefix)
    1.14  {
    1.15 -  assert(prefix_size != 0, "sanity");
    1.16 -  assert(prefix_align != 0, "sanity");
    1.17    assert(suffix_size != 0, "sanity");
    1.18    assert(suffix_align != 0, "sanity");
    1.19 -  assert((prefix_size & (prefix_align - 1)) == 0,
    1.20 -    "prefix_size not divisible by prefix_align");
    1.21    assert((suffix_size & (suffix_align - 1)) == 0,
    1.22      "suffix_size not divisible by suffix_align");
    1.23 -  assert((suffix_align & (prefix_align - 1)) == 0,
    1.24 -    "suffix_align not divisible by prefix_align");
    1.25  
    1.26    // Assert that if noaccess_prefix is used, it is the same as prefix_align.
    1.27 -  assert(noaccess_prefix == 0 ||
    1.28 -         noaccess_prefix == prefix_align, "noaccess prefix wrong");
    1.29 -
    1.30 -  // Add in noaccess_prefix to prefix_size;
    1.31 -  const size_t adjusted_prefix_size = prefix_size + noaccess_prefix;
    1.32 +  // Add in noaccess_prefix to prefix
    1.33 +  const size_t adjusted_prefix_size = noaccess_prefix;
    1.34    const size_t size = adjusted_prefix_size + suffix_size;
    1.35  
    1.36    // On systems where the entire region has to be reserved and committed up
    1.37    // front, the compound alignment normally done by this method is unnecessary.
    1.38    const bool try_reserve_special = UseLargePages &&
    1.39 -    prefix_align == os::large_page_size();
    1.40 +    suffix_align == os::large_page_size();
    1.41    if (!os::can_commit_large_page_memory() && try_reserve_special) {
    1.42 -    initialize(size, prefix_align, true, requested_address, noaccess_prefix,
    1.43 +    initialize(size, suffix_align, true, requested_address, noaccess_prefix,
    1.44                 false);
    1.45      return;
    1.46    }
    1.47 @@ -209,12 +198,11 @@
    1.48        addr = NULL;
    1.49      }
    1.50    } else {
    1.51 -    addr = os::reserve_memory(size, NULL, prefix_align);
    1.52 +    addr = os::reserve_memory(size, NULL, suffix_align);
    1.53    }
    1.54    if (addr == NULL) return;
    1.55  
    1.56 -  // Check whether the result has the needed alignment (unlikely unless
    1.57 -  // prefix_align < suffix_align).
    1.58 +  // Check whether the result has the needed alignment
    1.59    const size_t ofs = (size_t(addr) + adjusted_prefix_size) & (suffix_align - 1);
    1.60    if (ofs != 0) {
    1.61      // Wrong alignment.  Release, allocate more space and do manual alignment.
    1.62 @@ -229,12 +217,12 @@
    1.63      }
    1.64  
    1.65      const size_t extra = MAX2(ofs, suffix_align - ofs);
    1.66 -    addr = reserve_and_align(size + extra, adjusted_prefix_size, prefix_align,
    1.67 +    addr = reserve_and_align(size + extra, adjusted_prefix_size, suffix_align,
    1.68                               suffix_size, suffix_align);
    1.69      if (addr == NULL) {
    1.70        // Try an even larger region.  If this fails, address space is exhausted.
    1.71        addr = reserve_and_align(size + suffix_align, adjusted_prefix_size,
    1.72 -                               prefix_align, suffix_size, suffix_align);
    1.73 +                               suffix_align, suffix_size, suffix_align);
    1.74      }
    1.75  
    1.76      if (requested_address != 0 &&
    1.77 @@ -249,7 +237,7 @@
    1.78  
    1.79    _base = addr;
    1.80    _size = size;
    1.81 -  _alignment = prefix_align;
    1.82 +  _alignment = suffix_align;
    1.83    _noaccess_prefix = noaccess_prefix;
    1.84  }
    1.85  
    1.86 @@ -499,21 +487,18 @@
    1.87    protect_noaccess_prefix(size);
    1.88  }
    1.89  
    1.90 -ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size,
    1.91 -                                     const size_t prefix_align,
    1.92 -                                     const size_t suffix_size,
    1.93 -                                     const size_t suffix_align,
    1.94 +ReservedHeapSpace::ReservedHeapSpace(const size_t heap_space_size,
    1.95 +                                     const size_t alignment,
    1.96                                       char* requested_address) :
    1.97 -  ReservedSpace(prefix_size, prefix_align, suffix_size, suffix_align,
    1.98 +  ReservedSpace(heap_space_size, alignment,
    1.99                  requested_address,
   1.100                  (UseCompressedOops && (Universe::narrow_oop_base() != NULL) &&
   1.101                   Universe::narrow_oop_use_implicit_null_checks()) ?
   1.102 -                  lcm(os::vm_page_size(), prefix_align) : 0) {
   1.103 +                  lcm(os::vm_page_size(), alignment) : 0) {
   1.104    if (base() > 0) {
   1.105      MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap);
   1.106    }
   1.107 -
   1.108 -  protect_noaccess_prefix(prefix_size+suffix_size);
   1.109 +  protect_noaccess_prefix(heap_space_size);
   1.110  }
   1.111  
   1.112  // Reserve space for code segment.  Same as Java heap only we mark this as

mercurial