Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Узнаем оперативную память и объем диска


Автор: BIV 13.9.2010, 22:45
Всем доброе время суток! Я этот вопрос задавал в разделе приложения, но не уверен что в правильную тему впихнул, поэтому не помешало бы спросить на общем.
Можно ли с помощью языуа java получить числовое значения занимаемой оперативной памят и на данный момент? Объем занимаемое на жестком диске?
Если да, то как это реализовать?

Автор: jk1 14.9.2010, 07:47
Цитата

Можно ли с помощью языуа java получить числовое значения занимаемой оперативной памят и на данный момент? Объем занимаемое на жестком диске?

Занимаемое чем?
Что касается памяти, то вы можете (если говорить о чистой Java) оперировать только той памятью, что вам выделяет JVM. Узнать о ней можно вот так:
Код

Runtime.getRuntime().maxMemory();
Runtime.getRuntime().freeMemory();

Насчет занимаемого места на жестком диске смотрите сюда:
Код

File f = new File("C:/");
System.out.println(f.length());

Автор: LSD 14.9.2010, 11:24
Цитата(jk1 @  14.9.2010,  08:47 Найти цитируемый пост)
Насчет занимаемого места на жестком диске смотрите сюда:

На самом деле так:
Код

File file = new File("C:\\");
System.out.println(file.getFreeSpace());

Автор: jk1 14.9.2010, 13:43
Цитата

На самом деле так:

Виноват, накосячил немного.

Для ясности добавлю, что вариант, описанный LSD возвращает объем свободного места на разделе.

Автор: BIV 14.9.2010, 14:47
Про занимаемое место на жестком диске все очень доступно и понятно, спасибо!

Вот что касается оперативной памяти, мне нужно узнать сколько вообще оперативной памяти занято. То есть вот работает ОС, запущены какие-то приложения, играет музыка, вот мне нужно программно узнать сколько все это занимает оперативки(включая и программу теста). Возможно ли это?

Автор: Skipy 14.9.2010, 16:21
Цитата(BIV @ 14.9.2010,  14:47)
работает ОС, запущены какие-то приложения, играет музыка, вот мне нужно программно узнать сколько все это занимает оперативки(включая и программу теста). Возможно ли это?

Насколько мне известно - нет. Вы можете получить только объем памяти, доступный 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ную.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)