java自由内存使用

java自由内存使用,java,memory,jvm,Java,Memory,Jvm,我正在使用java构建一个套接字服务器 我正在记录服务器运行期间发生的许多操作, 在每个日志行旁边,我正在使用以下命令写入JVM中当前的可用内存: Runtime.getRuntime().freeMemory() 正如我在日志中看到的,我没有很多可用内存(大约14-15MB) 我在具有根访问权限的freeBSD服务器上运行此套接字服务器 我真的很想调整分配给JVM的内存,但我真的不知道如何调整,而且我对freeBSD和linux一般来说都是新手。你关于内存在Java中如何工作(特别是)的假设

我正在使用java构建一个套接字服务器

我正在记录服务器运行期间发生的许多操作, 在每个日志行旁边,我正在使用以下命令写入JVM中当前的可用内存:

Runtime.getRuntime().freeMemory()
正如我在日志中看到的,我没有很多可用内存(大约14-15MB)

我在具有根访问权限的freeBSD服务器上运行此套接字服务器


我真的很想调整分配给JVM的内存,但我真的不知道如何调整,而且我对freeBSD和linux一般来说都是新手。

你关于内存在Java中如何工作(特别是)的假设是有缺陷的

Runtime.getRuntime().freemory()

,将
-Xms
-Xmx
命令行参数分配给
java
。或者在某些启动脚本中,如果您正在使用应用程序服务器

为什么你想做的是浪费时间

看看这个为什么

Java中的垃圾收集器(控制空闲内存)并没有尽可能多地保持空闲内存,而是在性能和响应性之间进行了平衡。它只按需释放内存,拥有最大可用内存没有好处,尝试这样做有很多缺点

这会导致不再被引用的对象在“使用内存”时挂起,直到它们占用的内存实际需要为止。这实际上是最佳的,因为过早地删除它们会导致运行代码的性能下降

只有在需要释放内存时才快速删除它们,这是垃圾收集器的目标,而不是试图保持尽可能多的内存可用

您应该永远不必在正确实现的Java程序中调用
System.gc()

Java热点包括三种不同的收集器。连载 集合对GC使用单个线程,最适合于单个线程 数据集小于100 MB的处理器计算机。这个 并行执行并行的次要集合。它非常适合 适用于运行在多线程或 多处理器硬件。并发收集器已经过优化 响应时间较长时,垃圾回收暂停较短 比吞吐量更重要。此模式通常不提供任何 单核机器的优势

避免OutOfMemory异常

  • -Xmx
    设置为您在服务器上能够承受的最大设置。将
    -Xms
    设置为您认为标称内存块的最小大小。太小比太大更糟糕

  • 不要泄露参考资料


  • 关于Java中内存如何工作(特别是)的假设是有缺陷的

    Runtime.getRuntime().freemory()

    ,将
    -Xms
    -Xmx
    命令行参数分配给
    java
    。或者在某些启动脚本中,如果您正在使用应用程序服务器

    为什么你想做的是浪费时间

    看看这个为什么

    Java中的垃圾收集器(控制空闲内存)并没有尽可能多地保持空闲内存,而是在性能和响应性之间进行了平衡。它只按需释放内存,拥有最大可用内存没有好处,尝试这样做有很多缺点

    这会导致不再被引用的对象在“使用内存”时挂起,直到它们占用的内存实际需要为止。这实际上是最佳的,因为过早地删除它们会导致运行代码的性能下降

    只有在需要释放内存时才快速删除它们,这是垃圾收集器的目标,而不是试图保持尽可能多的内存可用

    您应该永远不必在正确实现的Java程序中调用
    System.gc()

    Java热点包括三种不同的收集器。连载 集合对GC使用单个线程,最适合于单个线程 数据集小于100 MB的处理器计算机。这个 并行执行并行的次要集合。它非常适合 适用于运行在多线程或 多处理器硬件。并发收集器已经过优化 响应时间较长时,垃圾回收暂停较短 比吞吐量更重要。此模式通常不提供任何 单核机器的优势

    避免OutOfMemory异常

  • -Xmx
    设置为您在服务器上能够承受的最大设置。将
    -Xms
    设置为您认为标称内存块的最小大小。太小比太大更糟糕

  • 不要泄露参考资料


  • 您希望通过“调整分配给JVM的内存”来实现什么?您可以使用
    -Xms
    -Xmx
    开关来指定要为程序分配多少堆内存。我试图避免内存不足。。将来..就像Jarrod说的,你可能会对垃圾收集有一些疑问。[这里]是sun的一份不错的白皮书,你应该读一下。[此处]:您希望通过“调整分配给JVM的内存”实现的目标的可能重复?您可以使用
    -Xms
    -Xmx
    开关来指定要为您的程序分配多少堆内存。我试图避免内存不足。。将来..就像Jarrod说的,你可能会对垃圾收集有一些疑问。[这里]是sun的一份不错的白皮书,你应该读一下。[这里]:可能重复的,所以你是说垃圾收集器会在需要时为我分配更多内存(如果可用)?我实际上根本没有试图分配任何内存。我试图理解的是,一般来说,我的系统给java提供了多少内存,或者换句话说,什么