JNIEXPORT jint JNICALL CLibrary_NATIVE()

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;
}