【发布时间】:2023-03-23 22:09:01
【问题描述】:
我在 java 中创建了一个仅包含 SQL Lite 连接代码的类。 所以在这里我在Linux(raspberry-pi)和windows中执行了这个程序,而不是我观察到的Linux与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
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? docs.oracle.com/cd/E21764_01/web.1111/e13814/… 你使用相同的堆大小吗? viralpatel.net/blogs/…
-
JVM 是 java 7 并且在 linux 的情况下它需要 14942208 堆大小对于 windows 它需要 123731968 堆大小
-
这意味着 windows 占用了更多堆大小这里我的疑问是 Linux 系统的物理 RAM 占用 179 mb & windows 18 mb
-
7 是版本,但由于 java 是开源的,所以有不同的 jvm,即对于 linux,有 openjdk、oracle jvm 等......而且你注意到他们使用不同的堆大小,也许有人会给你一个不错的答案,但我猜它取决于操作系统,如果您手动将堆大小和其他 JVM 参数设置为环境参数,我相信您会获得更接近的值,无论如何也有不同的 CPU 架构,我相信精度也会影响内存。
-
您如何获取 Windows 内存使用情况?即你怎么知道你在比较苹果和苹果?
标签: java mysql linux sqlite raspberry-pi