问题标签 [large-object-heap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 即使似乎有足够的内存可用,也会出现内存不足异常
有时我们的客户会在我们的应用程序中观察到内存不足异常。由于我们记录了他们的操作,我们可以大致重现他们所做的事情,但是如果我这样做并使用 dotMemory 分析应用程序,我无法重现异常并且使用的内存(大约 100 MB 托管 + 500MB 非托管)远低于限制(2GB,因为它是一个 32 位应用程序)。此外,在捕获异常时,使用 Process.GetCurrentProcess().WorkingSet64 请求当前内存使用量,这表明内存使用量在 500 到 900 MB 之间。我知道这个数字不是很可靠,但这是另一个迹象,表明应该有足够的可用内存。
该应用程序的一个相关属性是它处理测量的时间序列(DateTime 对和存储在数组中的双精度数)。这些对象可能足够大,可以存储在大对象堆 (LOH) 中。因此,确实会发生堆碎片,但在分析时这似乎没什么大不了的。LOH 的大小小于 100MB ,包括孔。
是否有可能在引发内存不足异常后调用垃圾收集器 (GC)?我认为,在内存分配请求不满足的情况下,只有当 GC 未能收集足够的内存时才会引发异常。但是,与在第 0 代堆中分配的内存相比,LOH 中分配的内存可能有所不同?
有谁知道,我们如何解决这个问题?
我们正在使用 VS 2010 SP1 和 .NET 4.0。该问题可能与此处、 此处和此处提出的问题有关,但我没有在那里找到令人满意的答案。
更新:添加了示例性堆栈跟踪和堆碎片图表
没有触发内存不足异常的唯一地方,但由于它被请求,我添加了一个 strack 跟踪:
dotMemory 的下图描述了使用该工具大约一个小时后的 LOH 碎片:
c# - C# 巨大的对象初始化程序抛出堆栈溢出错误
我需要构建一个包含近20000 个嵌套对象(在多个级别)的对象。每个对象都是一个简单的数据库实体,具有 1-5 个字段或实体列表。我正在使用内联对象初始化程序来启动我的根对象。
我尝试在x86和x64模式下运行,在这两种情况下我都得到了stackoverflow 异常。相同的代码和逻辑在我的对象不是那么大的其他情况下工作正常(大约 6000 个嵌套对象)
有没有办法增加.Net applicationheap 的大小?有什么建议可以用来解决这个问题吗?
c# - 手动大对象堆压缩(服务器 GC)
不久前,我们获得了手动压缩大对象堆 (LOH) 的能力。我通读了GCSettings.LargeObjectHeapCompactionMode Property。我无法理解的是,是否应该定期将此属性设置为GCLargeObjectHeapCompactionMode.CompactOnce以确保长期存在的 IIS 应用程序池的健康,即手动请求 LOH 压缩。
我明白这主要是特定设计的问题,即常见的请求/响应配置文件、WCF 结构等。但是有一般规则吗?是否听起来像“在您确定需要手动压缩之前永远不要进行手动压缩”?
最近,我对 7 年前开发的 ASP.NET 应用程序进行了一轮重构。当它被开发出来时,我不会考虑它会处理 100k 长度的请求,或者它必须准备那个长度的响应。真是个菜鸟。它每隔一秒做一次。手动压缩在我对其进行大修并尽可能发明缓冲和流式传输的期间有所帮助。现在我正在考虑留下手动压缩以防万一。我完全错了吗?
c# - 可以在不刷新的情况下连续写入流,将其内容强制到大对象堆上吗?
在 .NET 中的多线程设置(例如网络服务器)中,我通常会尽量避免创建占用更多 85KB 的连续内存块,因为这可能最终会出现在大型对象堆上,这可能会导致内存问题。
我的一位开发人员正在使用循环写入Response
. ,除了在循环结束时OutputStream
没有ing。Flush
我认为不在Flush
循环中可能会导致内存问题是否正确?我怎么能证明这一点?
java - Java - 关于如何分解的大型数组建议
我希望你做得很好。我正在为将处理大量数组元素的程序编写代码。例如,数组 A[] 将包含所有以字母“a”开头的单词。现在,如果我将所有内容放在一个类中,则程序由于内存不足而无法运行。我打算让每个数组都有自己的类。但总的来说,有没有更好的方法来解决这个问题而不是数组?或者任何其他与许多元素搏斗的建议?我可能正在查看整个事物中的 500k-1.xmil 元素。先感谢您!
jvm - 虚拟机初始化失败
机器安装内存:8GB
在 Jboss 开发人员工作室中,在构建项目时或有时在启动服务器时,我遇到了异常,
初始化虚拟机时出错
无法为对象堆保留足够的空间
Java HotSpot(TM) 64 位服务器 VM 警告:忽略选项 MaxPermSize=256m;在 8.0 中删除了支持
在jbdevstudio.ini配置文件中,我设置了以下堆大小,
- -Xms512m
- -Xmx1024m
我应该使用什么尺寸才能使 jboss studio 正常工作?
java - 虚拟机初始化期间发生 Java 错误无法为对象堆保留足够的空间
这是我的代码:
当我在案例 1 中添加 if-else 语句时出现此问题,如果用户输入 1,我希望它返回到 main。我该如何解决这个问题?这个 if-else 语句是否有替代方法,这样它就不会导致错误?第一天使用java,新手在这里,我需要一些帮助。
VM 初始化期间发生错误无法为对象堆保留足够的空间
c# - 方法本地 .NET 对象何时符合 GC 条件?
假设我有一个像这样的 C# 方法:(显然不是真正的代码)
正如您可以通过命名猜到的那样,这些方法返回的对象是巨大的。每个对象需要数百兆的总 RAM,尽管前两个对象由数百万个较小的对象组成,而不是像后两个数组那样是一个巨大的块。
我们将很快将其优化为流式解决方案,但与此同时,我想确保至少在执行代码以生成较晚的对象时,我们不会阻止早期对象的 GC。
我的问题是:a
只要 MethodThatReturns200mbObject(a) 返回,对象是否有资格获得 GC?如果没有,让 GC 知道有 500MB 的存在等待它的最佳方法是什么?
我的问题的核心是.NET GC 对“这个对象没有引用”的判断是否足够聪明,知道返回a
后不能引用MethodThatReturns200mbObject(a)
。尽管var a
理论上仍然可用于以后的代码,a
但在方法的第二行下方的任何地方都不会引用。理论上,编译器可以让 GC 知道a
没有引用。但在实践中,我不确定它的行为方式。你知道吗?
c# - 大对象堆碎片会导致 64 位进程中的 OutOfMemory 吗?
我正在准备向我的团队介绍 .net GC 和内存。不同的来源讨论了碎片对大对象堆的潜在影响。由于这将是一个有趣的现象,我试图在代码中展示它。
Thomas Weller 提供了这段代码,当试图将更大的对象分配到 LOH 中的已释放间隙中时,它看起来应该会导致 OOM,但由于某种原因它不会发生。LOH 是否在 .net 4.6 中自动压缩?LOH 碎片在 64 位中根本不是问题吗?