Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与Windows相比,Rasberry pi占用的内存更多_Java_Mysql_Linux_Sqlite_Raspberry Pi - Fatal编程技术网

Java 与Windows相比,Rasberry pi占用的内存更多

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

我创建了一个只包含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 
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、 你怎么知道你在比较苹果?