托管环境中使用的最大堆? (.NET / JAVA)
您在托管环境(如Java或.NET)中个人使用的最大堆是多少? 你遇到的一些性能问题是什么,你最终得到的回报越少,堆越大?
我使用的是64位.Net系统,通常使用9-12 GB,有时甚至高达20 GB。 即使在收集垃圾的时候我也没有看到任何性能问题,而且我一直在努力寻找,因为我没想到它能够如此好地工作。
早期的版本挂在某些对象上的时间太长,导致偶尔的GC释放出3GB +。 即便如此,对绩效没有明显影响。 该系统运行在具有32GB RAM的16核服务器上,这可能有助于……
在.Net中,在Windows 32位上,在开始变得非常棘手(内存exception)之前,你只能真正获得大约1.4 GB的内存使用量。 这是由于32位窗口的限制导致单个进程限制使用超过2 GB的RAM。 您可以在boot.ini中添加/ 3GB开关,但这只会让您更进一步。 如果你想使用大量内存,你应该认真考虑在64位版本的Windows上运行。
我目前有一个6 GB内存的生产应用程序。 您还需要一个64位的盒子,以便JVM能够解决这么多问题。 垃圾收集器实际上是唯一(我发现到目前为止)性能随着大小而降级的东西,然后只有当你手动启动System.GC时,它会强制JVM在遍历时将所有内容都戛然而止价值6 GB的物品。 也需要20秒。 默认的GC行为不会这样做,顺便说一下,你必须足够愚蠢才能做到这一点。 还值得研究这种大小的JVM调优。
你也可以找到像分布式和集群JVM这样的东西,对不起,没有任何好的参考,因为我没有仔细研究这个选项,尽管我确实找到了对更大的安装的引用。
我不确定你的意思是堆,但如果你的意思是使用内存,我已经使用了很多,2GB +。 我有一个Web应用程序进行图像处理,它需要将2个大型扫描文件加载到内存中进行分析。
存在性能问题。 Windows会换掉大量的ram,然后会产生很多页面错误。 由于所有请求都获得了这些图像(我一次只允许每个图像设置1个会话),因此一次不需要超过2个图像
例如,设置初始查看文件大约需要5秒钟。 在内存中进行简单的分析和缩放将相当快,大约为.1到.5秒。
我仍然需要优化,所以我最终预先准备好文件并切成较小的peices并且只使用当时用户所需的peices。
我在java中使用了2GB到5GB的内存,但是当我达到2GB以上时,我真的开始考虑内存优化。 收益递减可能有所不同,因为您需要大量内存,而不是没有可用于OS /磁盘缓存的内存(这可以帮助您整个应用程序)。
对于Java,我建议观察每代的内存使用情况。 您是否创建了大量临时对象或具有耗费大量内存的持久对象? 在了解这些事情后,可以进行大量的内存优化。
上述就是C#学习教程:托管环境中使用的最大堆? (.NET / JAVA)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/950650.html