标签: heap

堆栈和堆的内容和位置是什么?

编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,

  • 它们在哪里和它们(物理上在真实计算机的记忆中)?
  • 它们在多大程度上受操作系统或语言运行时控制?
  • 它们的范围是什么?
  • 是什么决定了它们的大小?
  • 是什么让一个更快?

language-agnostic heap stack memory-management dynamic-memory-allocation

7847
推荐指数
27
解决办法
145万
查看次数

为什么C++程序员应该尽量减少"新"的使用?

在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:

停止使用new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.

我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?

c++ heap memory-management c++-faq new-operator

833
推荐指数
13
解决办法
12万
查看次数

哪个更快:堆栈分配或堆分配

这个问题可能听起来相当简单,但这是我与另一位与我合作的开发人员的辩论.

我正在小心处理堆栈分配的东西,而不是堆分配它们.他正在跟我说话,看着我的肩膀并评论说这没有必要,因为他们的表现是明智的.

我一直认为堆栈的增长是恒定的时间,并且堆分配的性能取决于堆的当前复杂性(用于找到合适大小的孔)和解除分配(折叠孔以减少碎片,如如果我没有弄错的话,许多标准库实现在删除期间需要时间来完成此操作.

这让我觉得可能非常依赖于编译器.特别是对于这个项目,我使用Metrowerks编译器来实现PPC架构.对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC++,情况如何?堆分配不如堆栈分配高吗?没有区别吗?或者差异是如此微小,它变得毫无意义的微优化.

c++ memory heap performance stack

489
推荐指数
13
解决办法
12万
查看次数

如何构建堆是O(n)时间复杂度?

有人可以帮助解释如何构建堆是O(n)复杂性?

将项插入堆中O(log n),并且插入重复n/2次(其余为叶,并且不能违反堆属性).所以,这意味着复杂性应该是O(n log n),我想.

换句话说,对于我们"堆积"的每个项目,它有可能必须针对堆的每个级别过滤一次(这是log n级别).

我错过了什么?

algorithm heap complexity-theory construction

429
推荐指数
9
解决办法
24万
查看次数

如何确定默认的Java堆大小?

如果我从Java命令行中省略-Xmxn选项,则使用默认值.根据Java文档 "默认值是在运行时根据系统配置选择的".

哪些系统配置设置会影响默认值?

java heap heap-memory

397
推荐指数
10
解决办法
31万
查看次数

java.lang.OutOfMemoryError:超出了GC开销限制

我在一个程序中得到这个错误,该程序创建了几个(几十万个)HashMap对象,每个对象有几个(15-20)个文本条目.在提交到数据库之前,必须收集这些字符串(不会分解成较小的数量).

根据Sun的说法,如果在垃圾收集中花费了太多时间,则会发生错误:如果超过98%的总时间花在垃圾收集上,并且不到2%的堆被恢复,则会抛出OutOfMemoryError. ".

显然,可以使用命令行将参数传递给JVM

  • 通过"-Xmx1024m"(或更多)增加堆大小,或
  • 通过"-XX:-UseGCOverheadLimit"完全禁用错误检查.

第一种方法工作正常,第二种方法在另一个java.lang.OutOfMemoryError中结束,这次是关于堆的.

所以,问题:对于特定的用例(即几个小的HashMap对象),是否有任何编程替代方案?例如,如果我使用HashMap clear()方法,问题就会消失,但HashMap中存储的数据也会消失!:-)

StackOverflow中的相关主题也讨论了该问题.

java heap heap-memory hashmap g1gc

317
推荐指数
10
解决办法
59万
查看次数

无法为对象堆保留足够的空间

当我运行时,每次尝试运行程序时,我都会反复出现以下异常.

VM初始化期间发生错误

无法为对象堆保留足够的空间

无法创建Java虚拟机.

我试图增加我的虚拟内存(页面大小)和RAM大小,但无济于事.任何人都可以告诉我如何消除此错误?

java heap jvm

260
推荐指数
13
解决办法
90万
查看次数

从整数流中查找运行中位数

可能重复:
C中的滚动中值算法

鉴于从数据流中读取整数.到目前为止,以有效的方式查找元素的中位数.

解决方案我已经读过:我们可以使用左侧的最大堆来表示小于有效中位数的元素,在右侧使用最小堆来表示大于有效中位数的元素.

在处理传入元素之后,堆中元素的数量最多相差1个元素.当两个堆包含相同数量的元素时,我们发现堆的根数据的平均值为有效中值.当堆不平衡时,我们从包含更多元素的堆的根中选择有效中值.

但是我们如何构建最大堆和最小堆,即我们如何知道这里的有效中位数呢?我认为我们会在max-heap中插入1个元素,然后在min-heap中插入下一个元素,依此类推所有元素.纠正我如果我错在这里.

algorithm heap median

219
推荐指数
7
解决办法
15万
查看次数

如何分析.hprof文件?

我有一个使用以下标志运行的生产服务器: - XX:+ HeapDumpOnOutOfMemoryError

昨晚它在我们的服务器遇到堆错误时生成了一个java-38942.hprof文件.事实证明,系统的开发人员知道标志,但无法从中获取任何有用的信息.

有任何想法吗?

java heap profiling

213
推荐指数
7
解决办法
29万
查看次数

.Net中的优先级队列

我正在寻找优先级队列或堆数据结构的.NET实现

优先级队列是比简单排序提供更多灵活性的数据结构,因为它们允许新元素以任意间隔进入系统.将新作业插入优先级队列比在每次到达时重新排序所有内容更具成本效益.

基本优先级队列支持三种主要操作:

  • 插入(Q,X).给定具有密钥k的项x,将其插入优先级队列Q.
  • 查找-最小(Q).返回指向其键值小于优先级队列Q中任何其他键的项的指针.
  • 删除 - 最小(Q).从密钥最小的优先级队列Q中删除该项

除非我在错误的地方寻找,否则框架中没有一个.有人知道一个好的,或者我应该自己动手?

.net c# heap priority-queue data-structures

211
推荐指数
9
解决办法
17万
查看次数