Системный вызов (специфичный для Linux) sysinfo(struct sysinfo* info)
заполняет info
следующим:
struct sysinfo {
long uptime; /* Seconds since boot */
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
unsigned long totalram; /* Total usable main memory size */
unsigned long freeram; /* Available memory size */
unsigned long sharedram; /* Amount of shared memory */
unsigned long bufferram; /* Memory used by buffers */
unsigned long totalswap; /* Total swap space size */
unsigned long freeswap; /* swap space still available */
unsigned short procs; /* Number of current processes */
unsigned long totalhigh; /* Total high memory size */
unsigned long freehigh; /* Available high memory size */
unsigned int mem_unit; /* Memory unit size in bytes */
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */
};
Из которых totalswap
и freeswap
могут быть тем, что вы ищете.
Я не знаю, как вы выполняете собственный вызов платформы в Java, но это хорошая альтернатива самому анализу файла /proc/swaps
.
EDIT:
Я немного поиграл с JNA и придумал это:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.NativeLong;
public class Test {
public interface CStdLib extends Library {
static class SysInfo extends Structure {
public NativeLong uptime;
public NativeLong[] loads = new NativeLong[3];
public NativeLong totalram;
public NativeLong freeram;
public NativeLong sharedram;
public NativeLong bufferram;
public NativeLong totalswap;
public NativeLong freeswap;
public short procs;
public NativeLong totalhigh;
public NativeLong freehigh;
public int mem_unit;
/* some padding? */
}
int sysinfo(SysInfo info);
}
public static void main(String[] args) {
CStdLib c = (CStdLib)Native.loadLibrary("c", CStdLib.class);
CStdLib.SysInfo s = new CStdLib.SysInfo();
c.sysinfo(s);
System.out.println("totalram: " + s.totalram);
}
}
К сожалению, у вас возникнут проблемы, когда значение слишком велико для long
со знаком, и, следовательно, вы можете получить неправильное значение в Java, которое я вижу при попытке прочитать значения подкачки на моем компьютере.
Надеюсь, это поможет! (Предостережение: меня никогда не путали с программистом на Java :)
)