首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java可用内存使用量

java可用内存使用量
EN

Stack Overflow用户
提问于 2012-05-17 23:52:29
回答 1查看 860关注 0票数 0

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

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

代码语言:javascript
运行
复制
Runtime.getRuntime().freeMemory()

正如我在日志中看到的,我没有太多可用内存(大约14-15MB)。

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

我真的很想调优分配给我的JVM的内存,但我真的不知道怎么调优,而且我对freeBSD和linux总体来说也是相当陌生的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-17 23:56:38

在Java语言中,关于内存如何工作的假设(尤其是Garbage Collection )是有缺陷的。

Runtime.getRuntime().freeMemory()

That call only shows memory on the JVM heap,分配了,并将-Xms-Xmx命令行参数设置为java。或者,如果您使用的是应用程序服务器,则在某些启动脚本中。

为什么你要做的事情是浪费时间

请看这个questionanswer为什么!

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

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

垃圾收集器的目标是仅在需要释放内存时快速删除它们,而不是,它试图尽可能多地释放内存。

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

Java HotSpot包括三个不同的收集器。串行收集使用单个线程进行GC,最适合数据集小于100 is的单处理器机器。并行以并行方式执行次要集合。它非常适合在多线程或多处理器硬件上运行的中型到大型数据集。并发收集器已经过优化,当响应时间比吞吐量更重要时,垃圾收集暂停较短。此模式通常不会在单核计算机上提供任何好处。

避免OutOfMemoryExceptions

  1. -Xmx设置为您在服务器上可以承受的最大设置。将-Xms设置为您认为标称的内存块的最小大小。太小比太大更糟糕。
  2. 不要泄露引用。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10639114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档