【问题标题】:Rasberry-pi is taking more memory compare to Windows与 Windows 相比,Raspberry-pi 占用更多内存
【发布时间】: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


【解决方案1】:

简短的回答是,您无法像这样比较内存使用情况。

那里有很多关于内存使用的文章,我建议从堆栈溢出答案开始:https://stackoverflow.com/a/131346/2796832

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 2011-06-24
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2019-08-30
    • 2015-05-24
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多