使用java代码写一个查询占用内存前三的进行
时间: 2024-02-05 17:11:03 浏览: 29
以下是Java代码实现查询占用内存前三的进程:
```java
import java.util.*;
public class MemoryUsage {
public static void main(String[] args) {
Map<String, Long> processes = new HashMap<String, Long>();
// Get running processes
ProcessBuilder processBuilder = new ProcessBuilder("ps", "-e", "-o", "pid,rss");
try {
Process process = processBuilder.start();
Scanner scanner = new Scanner(process.getInputStream());
scanner.nextLine(); // Skip header line
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] fields = line.trim().split("\\s+");
if (fields.length == 2) {
String pid = fields[0];
long rss = Long.parseLong(fields[1]);
processes.put(pid, rss);
}
}
} catch (Exception e) {
e.printStackTrace();
}
// Sort processes by memory usage
List<Map.Entry<String, Long>> list = new ArrayList<>(processes.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Long>>() {
@Override
public int compare(Map.Entry<String, Long> o1, Map.Entry<String, Long> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
// Print top 3 processes
int count = 0;
for (Map.Entry<String, Long> entry : list) {
System.out.printf("%s %dKB\n", entry.getKey(), entry.getValue() / 1024);
if (++count == 3) {
break;
}
}
}
}
```
这段代码首先通过执行 `ps` 命令获取当前正在运行的进程的 PID 和占用的内存 RSS,然后将其存储在 `Map` 中。接下来,将 `Map` 中的进程按照占用内存从大到小排序,并输出前三个进程的 PID 和占用内存。