Java 与Windows相比,Rasberry pi占用的内存更多
我创建了一个只包含SQL Lite连接的java代码的类。 所以这里我在Linux(raspberry pi)中执行了这个程序&windows比我观察到的要占用更多的内存 Linux的内存如下所示Java 与Windows相比,Rasberry pi占用的内存更多,java,mysql,linux,sqlite,raspberry-pi,Java,Mysql,Linux,Sqlite,Raspberry Pi,我创建了一个只包含SQL Lite连接的java代码的类。 所以这里我在Linux(raspberry pi)中执行了这个程序&windows比我观察到的要占用更多的内存 Linux的内存如下所示 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3337 root 20 0 744m 179m 10m S 0.0 19.4 0:07.79 dbtest.java
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3337 root 20 0 744m 179m 10m S 0.0 19.4 0:07.79 dbtest.java
Windows需要18 mb的连接代码
&在这里,如果我对连接的代码进行注释,则占用的内存更少
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3337 root 20 0 596m 17m 10m S 0.0 19.4 0:07.79 dbtest.java
没有连接代码的Windows需要9 mb
我想知道为什么Linux需要安静的内存,如果有人知道,请看看我的问题
package test;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBTest {
public static void main(String[] args) {
dbtest();
while (true) {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static boolean dbtest() {
Connection conn = null;
try {
System.out.println("Before ...... Class.forname");
Class.forName("org.sqlite.JDBC");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String dbURL = "jdbc:sqlite:product.db";
conn = DriverManager.getConnection(dbURL);
if (conn != null) {
System.out.println("Connected to the database");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
DatabaseMetaData dm = (DatabaseMetaData) conn.getMetaData();
System.out.println("Driver name: " + dm.getDriverName());
System.out.println("Driver version: " + dm.getDriverVersion());
System.out.println("Product name: "
+ dm.getDatabaseProductName());
System.out.println("Product version: "
+ dm.getDatabaseProductVersion());
}
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
}
简而言之,你不能像那样比较内存使用情况
有很多关于内存使用的文章,我建议从堆栈溢出开始回答:哪个jvm?您使用相同的堆大小吗?JVM是java 7,对于linux,它需要1494208堆大小,对于windows,它需要123731968堆大小。这意味着windows需要更多堆大小。我怀疑的是,linux需要179 mb的系统物理RAM,windows 18 mb7是版本,但由于java是开源的,所以有不同的JVM,例如,对于linux,有openjdk,oracle jvm等。。。另外,当您注意到它们使用不同的堆大小时,也许有人会给您一个很好的答案,但我猜这取决于操作系统,如果您手动将堆大小和其他JVM参数设置为环境参数,我相信您会得到更接近的值,无论如何,CPU架构也不同,我相信精度也会影响内存。您是如何获得Windows内存使用率的?i、 你怎么知道你在比较苹果?