hotspot/src/os/windows/vm/os_windows.cpp
changeset 18086 f44cf213a775
parent 18069 e6d4971c8650
child 18740 db44b1599483
child 18683 a6418e038255
equal deleted inserted replaced
18084:c2e807acd8c5 18086:f44cf213a775
  2873                                 size_of_reserve,  // size of Reserve
  2873                                 size_of_reserve,  // size of Reserve
  2874                                 MEM_RESERVE,
  2874                                 MEM_RESERVE,
  2875                                 PAGE_READWRITE);
  2875                                 PAGE_READWRITE);
  2876   // If reservation failed, return NULL
  2876   // If reservation failed, return NULL
  2877   if (p_buf == NULL) return NULL;
  2877   if (p_buf == NULL) return NULL;
  2878   MemTracker::record_virtual_memory_reserve((address)p_buf, size_of_reserve, CALLER_PC);
  2878   MemTracker::record_virtual_memory_reserve((address)p_buf, size_of_reserve, mtNone, CALLER_PC);
  2879   os::release_memory(p_buf, bytes + chunk_size);
  2879   os::release_memory(p_buf, bytes + chunk_size);
  2880 
  2880 
  2881   // we still need to round up to a page boundary (in case we are using large pages)
  2881   // we still need to round up to a page boundary (in case we are using large pages)
  2882   // but not to a chunk boundary (in case InterleavingGranularity doesn't align with page size)
  2882   // but not to a chunk boundary (in case InterleavingGranularity doesn't align with page size)
  2883   // instead we handle this in the bytes_to_rq computation below
  2883   // instead we handle this in the bytes_to_rq computation below
  2939         size_t bytes_to_release = bytes - bytes_remaining;
  2939         size_t bytes_to_release = bytes - bytes_remaining;
  2940         // NMT has yet to record any individual blocks, so it
  2940         // NMT has yet to record any individual blocks, so it
  2941         // need to create a dummy 'reserve' record to match
  2941         // need to create a dummy 'reserve' record to match
  2942         // the release.
  2942         // the release.
  2943         MemTracker::record_virtual_memory_reserve((address)p_buf,
  2943         MemTracker::record_virtual_memory_reserve((address)p_buf,
  2944           bytes_to_release, CALLER_PC);
  2944           bytes_to_release, mtNone, CALLER_PC);
  2945         os::release_memory(p_buf, bytes_to_release);
  2945         os::release_memory(p_buf, bytes_to_release);
  2946       }
  2946       }
  2947 #ifdef ASSERT
  2947 #ifdef ASSERT
  2948       if (should_inject_error) {
  2948       if (should_inject_error) {
  2949         if (TracePageSizes && Verbose) {
  2949         if (TracePageSizes && Verbose) {
  2959     count++;
  2959     count++;
  2960   }
  2960   }
  2961   // Although the memory is allocated individually, it is returned as one.
  2961   // Although the memory is allocated individually, it is returned as one.
  2962   // NMT records it as one block.
  2962   // NMT records it as one block.
  2963   address pc = CALLER_PC;
  2963   address pc = CALLER_PC;
  2964   MemTracker::record_virtual_memory_reserve((address)p_buf, bytes, pc);
       
  2965   if ((flags & MEM_COMMIT) != 0) {
  2964   if ((flags & MEM_COMMIT) != 0) {
  2966     MemTracker::record_virtual_memory_commit((address)p_buf, bytes, pc);
  2965     MemTracker::record_virtual_memory_reserve_and_commit((address)p_buf, bytes, mtNone, pc);
       
  2966   } else {
       
  2967     MemTracker::record_virtual_memory_reserve((address)p_buf, bytes, mtNone, pc);
  2967   }
  2968   }
  2968 
  2969 
  2969   // made it this far, success
  2970   // made it this far, success
  2970   return p_buf;
  2971   return p_buf;
  2971 }
  2972 }
  3152     // normal policy just allocate it all at once
  3153     // normal policy just allocate it all at once
  3153     DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
  3154     DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
  3154     char * res = (char *)VirtualAlloc(NULL, bytes, flag, prot);
  3155     char * res = (char *)VirtualAlloc(NULL, bytes, flag, prot);
  3155     if (res != NULL) {
  3156     if (res != NULL) {
  3156       address pc = CALLER_PC;
  3157       address pc = CALLER_PC;
  3157       MemTracker::record_virtual_memory_reserve((address)res, bytes, pc);
  3158       MemTracker::record_virtual_memory_reserve_and_commit((address)res, bytes, mtNone, pc);
  3158       MemTracker::record_virtual_memory_commit((address)res, bytes, pc);
       
  3159     }
  3159     }
  3160 
  3160 
  3161     return res;
  3161     return res;
  3162   }
  3162   }
  3163 }
  3163 }
  3164 
  3164 
  3165 bool os::release_memory_special(char* base, size_t bytes) {
  3165 bool os::release_memory_special(char* base, size_t bytes) {
  3166   assert(base != NULL, "Sanity check");
  3166   assert(base != NULL, "Sanity check");
  3167   // Memory allocated via reserve_memory_special() is committed
       
  3168   MemTracker::record_virtual_memory_uncommit((address)base, bytes);
       
  3169   return release_memory(base, bytes);
  3167   return release_memory(base, bytes);
  3170 }
  3168 }
  3171 
  3169 
  3172 void os::print_statistics() {
  3170 void os::print_statistics() {
  3173 }
  3171 }