hotspot/src/share/vm/runtime/virtualspace.cpp
changeset 29580 a67a581cfe11
parent 28946 24261e03ba4c
child 30158 bd6094906ef8
equal deleted inserted replaced
29477:82f545c6572b 29580:a67a581cfe11
   517         ((_base == NULL) ||                        // No previous try succeeded.
   517         ((_base == NULL) ||                        // No previous try succeeded.
   518          (_base + size > zerobased_max))) {        // Unscaled delivered an arbitrary address.
   518          (_base + size > zerobased_max))) {        // Unscaled delivered an arbitrary address.
   519 
   519 
   520       // Calc address range within we try to attach (range of possible start addresses).
   520       // Calc address range within we try to attach (range of possible start addresses).
   521       char *const highest_start = (char *)align_ptr_down(zerobased_max - size, attach_point_alignment);
   521       char *const highest_start = (char *)align_ptr_down(zerobased_max - size, attach_point_alignment);
   522       // SS10 and SS12u1 cannot compile "(char *)UnscaledOopHeapMax - size" on solaris sparc 32-bit:
   522       // Need to be careful about size being guaranteed to be less
   523       // "Cannot use int to initialize char*." Introduce aux variable.
   523       // than UnscaledOopHeapMax due to type constraints.
   524       char *unscaled_end = (char *)UnscaledOopHeapMax;
   524       char *lowest_start = aligned_heap_base_min_address;
   525       unscaled_end -= size;
   525       uint64_t unscaled_end = UnscaledOopHeapMax - size;
   526       char *lowest_start = (size < UnscaledOopHeapMax) ?
   526       if (unscaled_end < UnscaledOopHeapMax) { // unscaled_end wrapped if size is large
   527         MAX2(unscaled_end, aligned_heap_base_min_address) : aligned_heap_base_min_address;
   527         lowest_start = MAX2(lowest_start, (char*)unscaled_end);
       
   528       }
   528       lowest_start  = (char *)align_ptr_up(lowest_start, attach_point_alignment);
   529       lowest_start  = (char *)align_ptr_up(lowest_start, attach_point_alignment);
   529       try_reserve_range(highest_start, lowest_start, attach_point_alignment,
   530       try_reserve_range(highest_start, lowest_start, attach_point_alignment,
   530                         aligned_heap_base_min_address, zerobased_max, size, alignment, large);
   531                         aligned_heap_base_min_address, zerobased_max, size, alignment, large);
   531     }
   532     }
   532 
   533