large-object-heap相关内容
我有一个当前使用 14GB 堆运行的 Java 服务.我很想尝试 -XX:+使用LargePages 选项来查看这可能如何影响系统的性能.我已经按照 Oracle 的描述配置了操作系统使用适当的共享内存和页面值(也可以使用在线工具计算).p> 配置操作系统后,我可以看到它将预期的内存量分配为大页面.但是,使用 -XX:+UseLargePages 选项集启动 VM 总是会导致以下错误之一:
..
如果您的应用程序必须对大尺寸对象(>85000 字节)进行大量分配/取消分配,最终会导致内存碎片,您的应用程序将抛出内存不足异常. 这个问题有什么解决办法还是CLR内存管理的限制? 解决方案 不幸的是,我所看到的所有信息都只建议自己管理风险因素:重用大对象,在开始时分配它们,确保它们是如果大小是彼此的倍数,则使用替代数据结构(列表、树)而不是数组.这只是给了我另一个想法,即创建一个非
..
我已阅读有关世代和大型对象堆的信息.但是我仍然不明白拥有大型对象堆的意义(或好处)是什么? 如果 CLR 仅仅依赖第 2 代(考虑到 Gen0 和 Gen1 的阈值对于处理大对象来说很小)来存储大对象,会出现什么问题(在性能或内存方面)? 解决方案 垃圾回收不只是摆脱未引用的对象,它还压缩堆.这是一个非常重要的优化.它不仅使内存使用效率更高(没有未使用的漏洞),而且使 CPU 缓存更
..
我得到了一个应用程序,其中输入已从 5 万条位置记录扩大到 110 万条位置记录.这导致了严重的问题,因为整个文件之前被反序列化为单个对象.对于具有 110 万条记录的生产类文件,对象的大小约为 1GB.由于大对象 GC 问题,我希望将反序列化的对象保持在 85K 标记以下. 我试图一次解析出一个位置对象并将其反序列化,以便我可以控制对象的数量反序列化并反过来控制对象的大小.我正在使用 Js
..
我想知道为什么我不能在我的 32 位 .NET 进程中分配超过 1,000 MB 的内存.以下迷你应用程序在分配了 1,000 MB 后抛出 OutOfMemoryException.为什么是 1,000 MB,而不是 1.8 GB?是否有我可以更改的流程范围设置? static void Main(string[] args){ArrayList list = new ArrayList();
..
我必须使用 WCF 通过不可靠的连接在计算机之间传输大文件. 因为我希望能够恢复文件并且我不想被 WCF 限制我的文件大小,所以我将文件分成 1MB 块.这些“块"作为流传输.到目前为止,效果很好. 我的步骤是: 打开文件流 从文件中读取块到字节[]并创建内存流 传输块 返回 2. 直到整个文件发送完毕 我的问题是在第 2 步.我假设当我从一个字节数组创建一个内存流时
..
我已阅读有关代和大对象堆的信息.但我还是不明白拥有大对象堆的意义(或好处)是什么? 如果 CLR 仅依靠第 2 代(考虑到 Gen0 和 Gen1 的阈值很小,无法处理大对象)来存储大对象,会出现什么问题(在性能或内存方面)? 解决方案 垃圾回收不仅清除未引用的对象,还压缩堆.这是一个非常重要的优化.它不仅使内存使用更高效(没有未使用的漏洞),它还使 CPU 缓存更高效.缓存在现代处
..
我知道 .net 中的所有数组都限制为 2 GB,在此前提下,我尽量不要在数组中分配超过 n = ((2^31) - 1)/8 双倍的空间.尽管如此,该数量的元素似乎仍然无效.任何人都知道如何在运行时确定给定 sizeof(T) 的最大元素数? 我知道任何接近该数字的数量都只是很多元素,但出于所有意图和目的,假设我需要它. 注意:我在 64 位环境中,目标平台用于我的 AnyCPU 应
..
我知道.net中的所有数组都限制为2 GB,在此前提下,我尽量不分配大于n =((2 ^ 31)-1)/8的双精度数组.但是,该数量的元素似乎仍然无效.有谁知道如何在运行时确定给定sizeof(T)的最大元素数量? 我知道,接近该数字的任何数量都只是很多要素,但是出于所有意图和目的,可以说我需要它. 注意:我处于64位环境中,具有用于我的AnyCPU应用程序的目标平台,并且RAM中至少
..
可能重复: StringBuilder的容量如何变化? 假设分配了一个StringBuilder,然后它增长到85k以上,它会被移到大对象堆中吗? 解决方案 StringBuilder不会“增长". 在4.0 SB之前的版本中,它只是分配了一个更大的新缓冲区,并将内容从旧的复制到了新的缓冲区.所以最后,是的,内部缓冲区被移至LOH. SB对象不是,因为它很小(为简单起见,它可
..
我有一个C#4.0应用程序(单个生产者/单个使用者),该应用程序以块的形式传输大量数据.尽管没有新的内存分配,但过一会儿我就用光了内存. 我使用Redgate内存探查器对内存进行了探查,那里有很多可用内存.它说由于碎片导致无法使用空闲内存. 我使用阻塞集合作为缓冲区,使用字节数组作为成员: BlockingCollection segments = new Blo
..
我无法解释C#进程使用的大部分内存.总内存为10 GB,但可访问和不可访问的对象总数总计为2.5 GB.我想知道这7.5 GB可能是多少? 我正在寻找最可能的解释或一种方法来找出此内存可以是什么. 这是确切的情况.该过程是.NET 4.5.1.它从互联网下载页面并通过机器学习对其进行处理.如VMMap所示,内存几乎完全位于托管堆中.这似乎可以排除非托管内存泄漏. 该进程已经运行了几天,
..
我们的应用程序不断为大量数据(例如数十到数百兆字节)分配数组,这些数据在被丢弃之前生存时间很短. 天真地完成此操作可能会导致大型对象堆碎片化,最终导致应用程序因OutOfMemoryException崩溃,尽管当前活动对象的大小并不过分. 过去,我们成功管理此问题的一种方法是对数组进行分块以确保它们不会出现在LOH上,其思想是通过允许内存由垃圾收集器压缩来避免碎片化. 我们最新的
..
我有一个应用程序,其输入已从50K位置记录扩展到110万个位置记录. 由于整个文件先前都已反序列化为单个对象,因此这引起了严重的问题. 对于具有110万条记录的生产类文件,对象的大小约为1GB. 由于大对象GC问题,我希望将反序列化的对象保持在85K标记以下. 我正在尝试一次解析单个位置对象并反序列化它,以便我可以控制对象的数量 反序列化,然后控制对象的大小.我正在使用Json.Net库来做
..
这个问题是对 的跟进将许多二进制文件传输到SQL Server数据库的有效方法 我最初问为什么使用 File.ReadAllBytes 导致快速内存使用,并且使用该方法得出结论将数据放在大对象堆上,这在运行时期间无法轻易回收。 我现在的问题是如何避免这种情况? 使用(var fs = new FileStream(path,FileMode.Open)) { using(v
..
我有一个Java服务,目前运行一个14GB的堆。我热衷于尝试 -XX:+ UseLargePages 选项来查看这可能会如何影响系统的性能。我按照 Oracle 配置了操作系统使用适当的共享内存和页面值(这些也可以通过在线工具计算)。 p> 一旦配置了操作系统,我可以看到它将预期的内存量分配为巨大页面。但是,使用 -XX:+ UseLargePages 选项集启动VM始终会导致以下错误之一:
..
什么是大型对象堆和GC第三代对象之间的差异? 解决方案 蕙(大对象堆)是其中,大型对象的直接分配,呆在那里它们被收集到一个单一的堆。对象基于它们的大小例如直接分配到LOH等于或大于85000个字节。 代对象是被分配到SOH(小对象堆),这是一个单一的堆“小”的对象。在SOH对象具有相关联的代它表示他们有多少集合例如存活直至最大代2.由于生成编号从0开始的,因为它已经经历几代即0,1,
..
我已经通过使用WCF连接不可靠的传输上的计算机之间的大文件。 由于我希望能够恢复文件,我不希望在我的文件大小由WCF是有限的,我分块的文件到1MB块。这些“块”被运为流。它的工作原理相当不错,到目前为止 我的步骤是: 开启FILESTREAM 从文件中读取数据块到字节[]和创建的MemoryStream 传输块 回2 。直到整个文件被发送 我的问题是在步骤2中我认为,
..
在我们的应用程序,我们有(其中包括)都含有字节分块列出了一些数据结构(目前公开为列表<字节[]> )。我们字节块,因为如果我们允许把大对象堆,然后随着时间的推移,我们从内存碎片遭受字节数组。 我们也已经开始使用的Protobuf -net序列化这些结构,用我们自己生成的序列化DLL。 不过,我们注意到,protobuf网正在创造非常大的内存缓冲区时序列化。通过源代码,一眼看
..
近年来,随着4.5 .NET支持,用户可以为对象分配内存超过2 GB。 为了做到这一点用户可以设置gcAllowVeryLargeObjects为true app.config文件,而且事情会正常工作。 不过我有找到此设置为ASP.NET困难。我有一个网站,为此我需要测试,如果这确实是在我们网站上的支持。我知道VS内置的服务器是一个32位的过程。因此,用户不能简单地启动网站,并测试其大型阵列。
..