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   NMTTrackOp op(NMTTrackOp::ReserveAndCommitOp);
3408   op.execute_op((address)retAddr, size, 0, CALLER_PC);

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

3419     return true;
3420   } else {
3421    op.abort_op();
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;


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