| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Узнаем оперативную память и объем диска |
| Автор: BIV 13.9.2010, 22:45 |
| Всем доброе время суток! Я этот вопрос задавал в разделе приложения, но не уверен что в правильную тему впихнул, поэтому не помешало бы спросить на общем. Можно ли с помощью языуа java получить числовое значения занимаемой оперативной памят и на данный момент? Объем занимаемое на жестком диске? Если да, то как это реализовать? |
| Автор: jk1 14.9.2010, 07:47 | ||||||
Занимаемое чем? Что касается памяти, то вы можете (если говорить о чистой Java) оперировать только той памятью, что вам выделяет JVM. Узнать о ней можно вот так:
Насчет занимаемого места на жестком диске смотрите сюда:
|
| Автор: LSD 14.9.2010, 11:24 | ||
На самом деле так:
|
| Автор: jk1 14.9.2010, 13:43 | ||
Виноват, накосячил немного. Для ясности добавлю, что вариант, описанный LSD возвращает объем свободного места на разделе. |
| Автор: BIV 14.9.2010, 14:47 |
| Про занимаемое место на жестком диске все очень доступно и понятно, спасибо! Вот что касается оперативной памяти, мне нужно узнать сколько вообще оперативной памяти занято. То есть вот работает ОС, запущены какие-то приложения, играет музыка, вот мне нужно программно узнать сколько все это занимает оперативки(включая и программу теста). Возможно ли это? |
| Автор: Skipy 14.9.2010, 16:21 | ||
Насколько мне известно - нет. Вы можете получить только объем памяти, доступный JVM. |
| Автор: armixx 14.9.2010, 16:53 |
| Добрый день. Ваши вопросы уже обсуждались раньше. На базе этого обсуждения я написал метод. Посмотрите. Может быть пригодится. Отдельные методы (File.].getTotalSpace и File.getUsableSpace()) работают только под 6 версией. Долго выполняется опрос флоппи-диска. А так, в целом, работает. public void systemInfo() { ProcessView pv=new ProcessView("Сбор системной информации",this.getBounds()); pv.start(); cw.setText(""); if( pv.isLoop() ) pv.writeText("\n\n Просмотр свойств",null); OperatingSystemMXBean mxb=(com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); System.out.println(mxb.getArch()); System.out.println("MemorySize: "+Usefull.fSize(mxb.getFreePhysicalMemorySize())); System.out.println("Total memory: "+Usefull.fSize(mxb.getTotalPhysicalMemorySize())); FileSystemView fsv=FileSystemView.getFileSystemView(); File[] roots=fsv.getRoots(); for(int i=0;i<roots.length;i++) { System.out.println("Root: "+roots[i]); } System.out.println("Home directory: "+fsv.getHomeDirectory()); System.out.println("File system roots returned by File.listRoots():"); File[] f=File.listRoots(); pv.writeText("Просмотр дисков",null); for(int i=0;i<f.length;i++) { if( pv.isLoop() ) pv.writeText("\n\n Просмотр диска "+f[i],null); System.out.println("Drive: "+f[i]); System.out.println("Display name: "+fsv.getSystemDisplayName(f[i])); System.out.println("Is drive : "+fsv.isDrive(f[i])); System.out.println("Is floppy: "+fsv.isFloppyDrive(f[i])); System.out.println("Readable: "+f[i].canRead()); System.out.println("Writable: "+f[i].canWrite()); long ts=f[i].getTotalSpace(),us=f[i].getUsableSpace(),fs=ts-us; System.out.println("Total space : "+Usefull.fSize(ts)); System.out.println("Usable space: "+Usefull.fSize(us)); System.out.println("Free space : "+Usefull.fSize(fs)); } pv.writeText("Готово",null); pv.close(); } |
| Автор: BIV 14.9.2010, 23:08 |
| armixx, огромное спасибо за такую работу. Буду разбираться. Теперь мне остается докопаться до оперативки. Что-то мне подсказывает, что это можно реализовать только на Си... Нуторно там слишком с графическим интерфейсом возиться... |
| Автор: armixx 19.9.2010, 14:34 |
| По идее, распределение процессов - функция ядра ОС. Для Виндов - WinApi. Если не нужно кроссплатформенное решение, то можно написать обращение к системе на C и вызывать его через JNI. Графику оставить JAVную. |