代码之家  ›  专栏  ›  技术社区  ›  Vincent

托管环境中使用的最大堆?(.net/java)

  •  2
  • Vincent  · 技术社区  · 17 年前

    在Java或等托管环境中,您个人使用过的最大堆是什么。网?你遇到了哪些性能问题,堆越大,你最终得到的回报是递减的吗?

    5 回复  |  直到 17 年前
        1
  •  2
  •   Lee    17 年前

    我使用64位。网络系统通常使用9-12GB,有时甚至高达20GB。即使在垃圾回收过程中,我也没有看到任何性能问题,我一直在努力寻找,因为我没想到它会这么好用。

    早期版本对某些对象的挂起时间过长,导致偶尔释放3GB+的GC。即便如此,对性能也没有明显的影响。该系统运行在具有32GB RAM的16核服务器上,这可能会有所帮助。..

        2
  •  1
  •   Kibbee    17 年前

    在。Net,在Windows 32位上,在事情开始变得非常糟糕(内存不足异常)之前,你只能真正使用大约1.4 GB的内存。这是由于32位窗口中的一个限制,即单个进程只能使用超过2 GB的RAM。您可以在boot.ini中添加/3GB开关,但这只会让您更进一步。如果你想使用大量内存,你应该认真考虑在64位版本的windows上运行。

        3
  •  1
  •   Steve B.    17 年前

    我目前有一个具有6GB内存的生产应用程序。你还需要一个64位的盒子,JVM才能处理这么多。 垃圾收集器实际上是唯一(到目前为止我发现的)性能会随着大小而降低的东西,而且只有当你手动启动一个系统时。GC,它迫使JVM在遍历6GB的对象时突然停止一切。也需要20秒。默认的GC行为不会这样做,顺便说一句,你必须足够愚蠢才能让它这样做。同样值得研究这种规模的JVM调优。

    您还可以找到分布式和集群JVM之类的东西,抱歉,没有任何好的参考,因为我没有仔细研究这个选项,尽管我确实找到了更大安装的参考。

        4
  •  0
  •   mattlant    17 年前

    我不确定你所说的堆是什么意思,但如果你指的是使用的内存,我已经使用了相当多的内存,2GB以上。我有一个网络应用程序可以进行图像处理,它需要将2个大型扫描文件加载到内存中进行分析。

    存在性能问题。Windows会换掉大量的ram,然后会产生很多页面错误。一次不需要超过2个图像,因为所有请求都是针对这些图像的(我一次只允许每个图像集有一个会话)

    例如,设置文件进行初始查看大约需要5秒。在内存中进行简单的分析和缩放会相当快,大约为.1到.5秒。

    我仍然需要优化,所以我最终准备了文件并切成更小的部分,只使用用户当时需要的部分。

        5
  •  0
  •   Cristian Vat    17 年前

    我在java中使用了2GB到5GB的内存,但通常当我使用到2GB以上时,我真的开始考虑内存优化。减少的回报可能会有所不同,从因为有很多内存而在必要时不进行优化,到没有可用于操作系统/磁盘缓存的内存(这可以帮助您的应用程序整体)。

    对于Java,我建议随着时间的推移,观察每一代的内存使用情况。你是创建了很多临时对象,还是拥有消耗大量内存的持久对象?当知道这些事情时,可以对内存进行大量优化。