src/os/solaris/vm/os_solaris.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/os/solaris/vm

src/os/solaris/vm/os_solaris.cpp

Print this page




3387   int err = errno;
3388 
3389   // Remove shmid. If shmat() is successful, the actual shared memory segment
3390   // will be deleted when it's detached by shmdt() or when the process
3391   // terminates. If shmat() is not successful this will remove the shared
3392   // segment immediately.
3393   shmctl(shmid, IPC_RMID, NULL);
3394 
3395   if (retAddr == (char *) -1) {
3396     if (warn_on_failure) {
3397       jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err);
3398       warning(msg);
3399     }
3400     return NULL;
3401   }
3402   if ((retAddr != NULL) && UseNUMAInterleaving) {
3403     numa_make_global(retAddr, size);
3404   }
3405 
3406   // The memory is committed
3407   address pc = CALLER_PC;
3408   MemTracker::record_virtual_memory_reserve((address)retAddr, size, pc);
3409   MemTracker::record_virtual_memory_commit((address)retAddr, size, pc);
3410 
3411   return retAddr;
3412 }
3413 
3414 bool os::release_memory_special(char* base, size_t bytes) {

3415   // detaching the SHM segment will also delete it, see reserve_memory_special()
3416   int rslt = shmdt(base);
3417   if (rslt == 0) {
3418     MemTracker::record_virtual_memory_uncommit((address)base, bytes);
3419     MemTracker::record_virtual_memory_release((address)base, bytes);
3420     return true;
3421   } else {

3422    return false;
3423   }
3424 }
3425 
3426 size_t os::large_page_size() {
3427   return _large_page_size;
3428 }
3429 
3430 // MPSS allows application to commit large page memory on demand; with ISM
3431 // the entire memory region must be allocated as shared memory.
3432 bool os::can_commit_large_page_memory() {
3433   return UseISM ? false : true;
3434 }
3435 
3436 bool os::can_execute_large_page_memory() {
3437   return UseISM ? false : true;
3438 }
3439 
3440 static int os_sleep(jlong millis, bool interruptible) {
3441   const jlong limit = INT_MAX;




3387   int err = errno;
3388 
3389   // Remove shmid. If shmat() is successful, the actual shared memory segment
3390   // will be deleted when it's detached by shmdt() or when the process
3391   // terminates. If shmat() is not successful this will remove the shared
3392   // segment immediately.
3393   shmctl(shmid, IPC_RMID, NULL);
3394 
3395   if (retAddr == (char *) -1) {
3396     if (warn_on_failure) {
3397       jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err);
3398       warning(msg);
3399     }
3400     return NULL;
3401   }
3402   if ((retAddr != NULL) && UseNUMAInterleaving) {
3403     numa_make_global(retAddr, size);
3404   }
3405 
3406   // The memory is committed
3407   MemTracker::record_virtual_memory_reserve_and_commit((address)retAddr, size, mtNone, CURRENT_PC);


3408 
3409   return retAddr;
3410 }
3411 
3412 bool os::release_memory_special(char* base, size_t bytes) {
3413   MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker();
3414   // detaching the SHM segment will also delete it, see reserve_memory_special()
3415   int rslt = shmdt(base);
3416   if (rslt == 0) {
3417     tkr.record((address)base, bytes);

3418     return true;
3419   } else {
3420     tkr.discard();
3421     return false;
3422   }
3423 }
3424 
3425 size_t os::large_page_size() {
3426   return _large_page_size;
3427 }
3428 
3429 // MPSS allows application to commit large page memory on demand; with ISM
3430 // the entire memory region must be allocated as shared memory.
3431 bool os::can_commit_large_page_memory() {
3432   return UseISM ? false : true;
3433 }
3434 
3435 bool os::can_execute_large_page_memory() {
3436   return UseISM ? false : true;
3437 }
3438 
3439 static int os_sleep(jlong millis, bool interruptible) {
3440   const jlong limit = INT_MAX;


src/os/solaris/vm/os_solaris.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File