in native/src/main/native/mvndnative.c [98:136]
JNIEXPORT jint JNICALL CLibrary_NATIVE(getOsxMemoryInfo)(JNIEnv *env, jobject thiz, jlongArray totalAndAvailMem)
{
jint rc = 0;
// Get total physical memory
int mib[2];
mib[0] = CTL_HW;
mib[1] = HW_MEMSIZE;
int64_t total_memory = 0;
size_t len = sizeof(total_memory);
if ((rc = sysctl(mib, 2, &total_memory, &len, NULL, 0)) != 0) {
return rc;
}
// Get VM stats
vm_size_t page_size;
mach_port_t mach_port;
mach_msg_type_number_t count;
vm_statistics64_data_t vm_stats;
mach_port = mach_host_self();
count = HOST_VM_INFO64_COUNT;
if ((rc = host_page_size(mach_port, &page_size)) != 0) {
return rc;
}
if ((rc = host_statistics64(mach_port, HOST_VM_INFO, (host_info64_t) &vm_stats, &count)) != 0) {
return rc;
}
// Calculate available memory
long long available_memory =
((int64_t) vm_stats.free_count + (int64_t) vm_stats.inactive_count
- (int64_t) vm_stats.speculative_count) * (int64_t) page_size;
jlong elements[] = { (jlong) total_memory, (jlong) available_memory };
(*env)->SetLongArrayRegion(env, totalAndAvailMem, 0, 2, elements);
return rc;
}