在this msdn page上,它说
堆上分配的对象越少,垃圾收集器的工作就越少。分配对象时,请不要使用超出需要的舍入值,例如在只需要15个字节时分配32个字节的数组。
有谁知道为什么这个推荐在这里(除了显而易见的 - 我怀疑他们为什么在这里有这个)?
将空间分配到字边界有什么危害?
它对性能有影响吗?
答案 0 :(得分:4)
在复杂的堆管理器可用之前,对非托管代码进行过时的分配是一种策略。它减少了堆碎片的不良影响,堆中有一堆小的空块,不能组合在一个更大的块中。因此,程序以具有大量未使用内存的OOM终止。今天没有任何意义,Windows低碎片堆解决了这个问题,尽管它也完成了分配。小分配最多为8的倍数。从XP开始可用,默认情况下为Vista及以上开启。
当你有一个可以压缩并去除孔的垃圾收集器时,没有意义。你只需要做更多的工作,移动未使用的内存,没有任何好处。
堆栈碎片在托管代码中不是一个完全解决的问题,大型对象堆最终可能会出现难以重复使用的空洞。 LOH没有得到压缩,要移动的数据太多。对于大于80千字节的对象进行四舍五入的分配实际上仍然有意义。只有在内存分析器显示您遇到LOH问题时才会这样做。此时,您应首先考虑转移到64位操作系统。
答案 1 :(得分:1)
将空间分配到字边界有什么危害?
危害在于您可以创建超出必要的对象,这会导致更多的GC压力。这正是指导所说的。关于它是一个单词边界没有任何具体内容 - 它更多的是分配比所需内存更多的内存。
它对性能有影响吗?
是的,它会对性能产生负面影响,因为它会导致GC需要更加努力。