追忆似水流年233 2019-09-27 10:41 采纳率: 0%
浏览 1148

java初始化堆内存为8g,操作系统真的会立即分配8g的内存吗

最近看了一个问题,说是 java在创建子进程的时候,由于会申请和父进程相似大小的
内存空间,导致内存使用量翻倍,所以想验证一下.

代码如下所示

public class ProcessDemo {

    public static void main(String[] args) throws Exception{
        Thread.sleep(20000);
        ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c","ifconfig");
        Process process = pb.start();
        Scanner scanner = new Scanner(process.getInputStream());
        while (scanner.hasNextLine()) {
            System.out.println(scanner.nextLine());
        }
        Thread.sleep(20000);
        scanner.close();
    }
}

第一个sleep20秒 是为了使用ps -ef | grep ProcessDemo 查看进程号
然后使用top -p pid 来观察内存使用情况

如下所示 我设置初始化堆内存为8g,但是这个java进程并没有占用8g的内存空间
图片说明

  • 写回答

1条回答 默认 最新

  • _鹿慕溪水 2019-09-27 10:49
    关注

    jvm初始化内存有最大内存和最小内存的配置,不会在初始化的时候就会分配给jvm最大的内存,而是根据你的系统内存空间和你配置的jvm内存空间大小范围进行分配,在运行期间,由于程序中的对象产生,回收等等,jvm都会扩大或者减小内存占用,但是最大的内存就是你设置的jvm最大内存,如果jvm中的堆栈产生的内存超过了设置的最大内存,就会堆栈溢出

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建