当前位置: 首页 > 知识库问答 >
问题:

如何限制java进程RAM的使用

阴福
2023-03-14

在堆中,我们可以使用-Xms-Xmx来限制ram的使用。

在jvm堆之外,当使用NIO时,我们可以使用-XX: MaxDirectMemorysize。

但在这样的节目中

public class MappedBufferTest {
    static long length = 1024*1024*512; //
    public static void main(String[] args) throws Exception {
        try (FileChannel fc = new RandomAccessFile("data.txt", "rw").getChannel()) {
            MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, length);
            int i = 0;
            for (; i < length/2; i++) {
                out.put((byte) 'x');
            }
            Thread.sleep(30*1000);
            System.out.println("writing");
            for (; i < length; i++) {
                out.put((byte) 'x');
            }
            System.out.println("Finished writing");
            Thread.sleep(60*1000);
            fc.close();
        }
    }

}

使用jvm选项

-Xms256m-Xmx256m-XX: MaxDirectMemorysize=128m

它运行良好。它不会发生错误。

-XX:MaxDirectMemorySize不工作?

Java1.8OS:centos

共有2个答案

秦权
2023-03-14

映射文件不使用私有内存。您正在使用操作系统的磁盘缓存。

虽然内存映射文件会增加虚拟内存,但数据会根据需要进行分页,因此即使映射的文件比主内存大,也不会超过设置的限制。

注意:文件可能在内存中,因为您最近访问过它。如果一个程序碰巧对它进行了内存映射,这并不意味着该程序正在使用的内存和无论该程序是否正在运行都会使用的内存一样多。

e、 在Linux上,您可以在不增加堆或直接内存使用的情况下映射到100 TB的文件。

夏俊杰
2023-03-14

MIT可以使用的虚拟内存量包括MIT映射到的进程的可用内存量。但是,您必须考虑JVM的所有需要,以避免它被杀死。

如果您只关心驻留内存,那么也可以使用cgroup。

 类似资料:
  • 问题内容: 我试图将Python程序的RAM使用量限制为一半,以便在使用所有RAM时都不会完全冻结,为此,我正在使用以下代码,该代码无法正常工作,并且笔记本电脑仍在冻结: 我正在使用从该函数调用的其他函数。 我究竟做错了什么? 提前致谢。 PD:我已经搜索了一下,找到了我输入的代码,但是仍然无法正常工作… 问题答案: 好的,所以我进行了一些研究,找到了一个从Linux系统获取内存的函数:在Pyth

  • 问题内容: 我在具有16GB Ram和64位OS的Linux机器上运行Python 2.7。我编写的python脚本可能会将过多的数据加载到内存中,这使计算机的运行速度降低到我什至无法杀死进程的地步。 虽然可以通过以下方式限制内存: 在运行脚本之前,请在外壳程序中添加一个限制选项。在我到处看的地方,该模块具有与相同的功能。但是调用: 在我的脚本开始时,绝对没有任何作用。即使将值设置为12000,也

  • 问题内容: 据我所知,每部Android手机都将所有应用程序的最大内存使用量限制为16、24或32Mb。我刚刚看到人们在讨论应用程序Dungeon Defenders,该应用程序似乎使用了256 Mb的RAM。 应用说明:“最低要求:512 MB RAM(运行时256个可用空间)” http://www.appbrain.com/app/dungeon- defenders%3A-first-wa

  • 我已经在网上搜索了,我发现所有的都是使用DecimalFormat并尝试了它,但当我在Android Studio上编码时,出现了一条消息,说必须使用API24来执行这种命令。API24有错误和所有的网站,我看,建议使用API23。 因此,我需要一种方法来显示双数字,只有两个十进制数字在我的AlertDialog。

  • 问题内容: 我在使用Java 1.6(1.6.0_02或1.6.0_04)运行Red Hat Linux(内核版本为2.4.21-37.ELsmp)的测试计算机上遇到问题。问题是,一旦在单个线程组中创建了一定数量的线程,操作系统将不愿意或无法创建更多线程。 这似乎是特定于Java创建线程的,因为C线程限制程序能够创建约1.5k线程。此外,Java 1.4 JVM不会发生这种情况……它可以创建超过1

  • 本文向大家介绍Zookeepr 如何进行权限控制?相关面试题,主要包含被问及Zookeepr 如何进行权限控制?时的应答技巧和注意事项,需要的朋友参考一下 ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似于 UNIX 文件系统的权限控制。 对于 znode 操作的权限,ZooKeeper 提供了以下 5 种: CREATE : 能创建子节点 READ