gpt4 book ai didi

java - 关于java堆内存和系统RAM

转载 作者:行者123 更新时间:2023-12-02 00:32:04 24 4
gpt4 key购买 nike

我正在使用进程生成器从 java 执行 python 程序。创建了一个 shell 脚本文件,它设置了一些环境变量,然后执行 python 脚本。

Process p = Runtime.getRuntime().exec(executeAutoML.sh);

包含上述代码块的类将从 Java 调度程序 (ScheduledExecutorService) 中调用。

我的 Linux 机器有大约 30GB 内存。

我的问题是:

  1. Python 脚本用于分析目的。它将创建一些巨大的数据框来处理数据。假设最大数据帧大小为 (100 万 x 100 )。 它可以使用系统 RAM 或 JVM 堆吗?

  2. 如果它使用系统 RAM,那么我如何查看 RAM 消耗?

  3. 由于处理大量数据,我会在 JVM 中遇到 OUTomemory 错误吗?信息:该程序在带有负载均衡器的WLS服务器(2个节点)中启动。

请建议处理此类用例的最佳方法。

谢谢,维杰

最佳答案

  1. 使用 ProcessBuilder 运行的程序有自己的虚拟地址空间。它不使用 Java 堆。即使您使用 ProcessBuilder 调用另一个 Java 程序,它也将是一个具有自己的内存/堆的单独进程。
  2. 诸如 top/atop/Windows 任务管理器之类的东西可以显示您的所有进程。您的 python 进程应该单独出现。
  3. 1. 的答案应该清楚地表明,python 进程的内存与 JVM 是分开的,因此,如果您实际耗尽了物理(或更确切地说是虚拟)内存,那么您只会获得 Java 进程的 OutOfMemory。如果你的 python 进程用完它,当然会发生这种情况。

一般来说,对于如此庞大的数据任务,您需要仔细检查是否可以分批处理数据,而不是一次处理全部数据。例如,如果您对不需要信息/影响其他行的数据行进行操作,那么您可以逐行加载,处理每一行,并将其写入结果文件,然后再处理下一行。这样您就可以避免一次加载所有数据。

关于java - 关于java堆内存和系统RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com