osmemoryinfo.c

来自「《透视Java》的源码」· C语言 代码 · 共 80 行

C
80
字号
/* * Implementation of native methods that access OS thru Win32 API */#include <windows.h>#include "covertjava_nativecode_OSMemoryInfo.h"JNIEXPORT jlong JNICALL Java_covertjava_nativecode_OSMemoryInfo_getPhysicalTotal    (JNIEnv *env, jclass cls){    MEMORYSTATUSEX memStat;    memStat.dwLength = sizeof (memStat);    if (GlobalMemoryStatusEx(&memStat) == 0 && (*env) != 0) {        jclass exceptionCls = (*env)->FindClass(env, "java/lang/Exception");        char msg[100];        sprintf(msg, "Failed to get memory information from the OS, error code %li",             (long)GetLastError());        if (exceptionCls != 0)  /* Raise Java exception */            (*env)->ThrowNew(env, exceptionCls, msg);        return -1;    }    return (jlong) (int) memStat.ullTotalPhys;}JNIEXPORT jlong JNICALL Java_covertjava_nativecode_OSMemoryInfo_getPhysicalAvail    (JNIEnv *env, jclass cls){    MEMORYSTATUSEX memStat;    memStat.dwLength = sizeof (memStat);    if (GlobalMemoryStatusEx(&memStat) == 0 && (*env) != 0) {        jclass exceptionCls = (*env)->FindClass(env, "java/lang/Exception");        char msg[100];        sprintf(msg, "Failed to get memory information from the OS, error code %li",             (long)GetLastError());        if (exceptionCls != 0)  /* Raise Java exception */            (*env)->ThrowNew(env, exceptionCls, msg);        return -1;    }    return (jlong) (int) memStat.ullAvailPhys;}JNIEXPORT jlong JNICALL Java_covertjava_nativecode_OSMemoryInfo_getVirtualTotal    (JNIEnv *env, jclass cls){    MEMORYSTATUSEX memStat;    memStat.dwLength = sizeof (memStat);    if (GlobalMemoryStatusEx(&memStat) == 0 && (*env) != 0) {        jclass exceptionCls = (*env)->FindClass(env, "java/lang/Exception");        char msg[100];        sprintf(msg, "Failed to get memory information from the OS, error code %li",             (long)GetLastError());        if (exceptionCls != 0)  /* Raise Java exception */            (*env)->ThrowNew(env, exceptionCls, msg);        return -1;    }    return (jlong) (int) memStat.ullTotalVirtual;}JNIEXPORT jlong JNICALL Java_covertjava_nativecode_OSMemoryInfo_getVirtualAvail    (JNIEnv *env, jclass cls){    MEMORYSTATUSEX memStat;    memStat.dwLength = sizeof (memStat);    if (GlobalMemoryStatusEx(&memStat) == 0 && (*env) != 0) {        jclass exceptionCls = (*env)->FindClass(env, "java/lang/Exception");        char msg[100];        sprintf(msg, "Failed to get memory information from the OS, error code %li",             (long)GetLastError());        if (exceptionCls != 0)  /* Raise Java exception */            (*env)->ThrowNew(env, exceptionCls, msg);        return -1;    }    return (jlong) (int) memStat.ullAvailVirtual;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?