问题标签 [heap-memory]
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.
java - java堆转储中那些奇怪的类名是什么意思?
我正在尝试使用jmap和jhat来追踪 Java 进程中的内存泄漏。每次我这样做时,我都会看到特定对象类型的那些奇怪的符号,例如[S
字符串数组和[C
字符数组。我不记得是什么意思,而且很难用谷歌搜索这些东西。
(编辑:为了证明我的观点,事实证明这[S
是一个短[C
数组并且是一个字符数组。)
有人愿意制作一张表格,列出所有不同的类名及其含义吗?或者把我指向这样的桌子?
具体我想知道是什么[Ljava.lang.Object;
意思。
java - 是否可以动态更改最大 Java 堆大小?
我知道您可以在启动时使用 -Xmx 设置最大堆大小,但是否可以在运行时动态更改它?
是否有任何工具或(未记录的)api 可以让我这样做?
heap-memory - 堆和堆栈空间的未初始化值
为什么堆空间总是设置为零?为什么堆栈空间同样不设置为零?
winapi - HeapCreate 与 GetProcessHeap
我是在 C++ 中使用堆分配的新手。
我试图了解将迫使某人创建私有堆而不是使用进程堆的场景。对于大多数情况,进程堆通常不够吗?
谢谢——阿什
c# - 数组、堆和栈以及值类型
在上面的代码中,new int[100] 是在堆上生成数组吗?根据我通过 c# 在 CLR 上阅读的内容,答案是肯定的。但我不明白的是,数组内部的实际 int 会发生什么。由于它们是值类型,我猜它们必须被装箱,例如,我可以将 myIntegers 传递给程序的其他部分,如果它们一直留在堆栈上,它会弄乱堆栈. 还是我错了?我猜他们只是被装箱了,只要数组存在,它们就会一直存在于堆上。
c++ - boost::shared_ptr 和多线程访问
我正在尝试实现一个多线程框架,其中输出对象在我的网络线程运行的每一帧的末尾创建,以便另一个线程可以在其帧的开头获得最新的“完成输出”指针并且知道它对存储在输出对象中的任何数据具有安全且完整的只读访问权限。
我的(非常早期的)方法主要涉及以下代码块:
网络处理器 -
ClientNetworkHandler -
PyCruHandler -
基本上,ClientNetworkHandler 和 PyCruHandler 在不同的线程上独立运行。PyCruHandler 从来没有真正用它的 m_latestNetworkOutput 副本做任何事情;我已经注释掉了以任何方式访问它的所有其他实例,但我仍然遇到以下问题:
如果我允许两个线程调用 swap(或 operator= 等效项),那么最终(通常在运行后 2 秒内,但有时需要几分钟)我将在 operator new 或分配器删除一些时收到以下错误种类:
“堆:释放堆块 2bab3b0 在释放后在 2bab3dc 处修改 Windows 已触发断点。
这可能是由于堆损坏,这表明存在错误……等等。”
我只是一个新手,但对我来说,这似乎表明 shared_ptr 对象之间的线程安全和时间敏感访问问题存在某种问题。但是,我一直对 shared_ptr 线程安全细微差别的解释(这里和其他地方)感到尴尬 - 一篇阅读表明引用计数是线程安全的,因此复制 shared_ptr 周围是安全的(但它们的内部对象不会是线程安全的),其他阅读表明在 shared_ptr 中实际上没有任何有用的线程安全性。我已经阅读了有关 shared_ptrs 线程安全的 boost 文档,但是我仍然没有弄清楚这是否应该是我的代码中的一个问题。
我的问题是,这里的任何人都可以发现我正在做的任何明显缺陷吗?我的目标是我可以访问仍由拥有线程存储的最新输出对象,然后该对象不会被删除(即使在拥有线程移至以后的输出之后),直到输出的每个用户都完成了它也是。在我看来,共享指针似乎是完美的……但是在我用头撞了 3 个小时之后,我开始怀疑……
非常感谢您,如果我以某种方式错误地发布了此内容,我深表歉意;这是我第一次来这里,就协议而言,FAQ 似乎很悠闲!
c++ - 处理破坏堆的对象
在我的应用程序中,我正在创建一个非常像这样的对象:
一旦我即将关闭应用程序,我称之为:
此调用始终触发带有以下消息的断点:
Windows 已在 DesignerDynD.exe 中触发断点。
这可能是由于堆损坏,这表明 DesignerDynD.exe 或其已加载的任何 DLL 中存在错误。
这也可能是由于在 DesignerDynD.exe 具有焦点时用户按 F12。
输出窗口可能有更多诊断信息。
我无法修改 vhtGlove 类来修复堆栈的损坏,因为它是一个仅以头文件、lib 文件和 dll 的形式提供的外部库。
有没有办法以干净的方式使用这个类?
**** 编辑 ::: 我试图将事情精简到最低限度,但是我得到了相同的结果......在这里你有整个代码。
删除手套时仍然崩溃。
编辑#2 :: 如果我只是分配和删除 vhtCyberGlove 的一个实例,它也会崩溃。
有任何想法吗?
谢谢!
JC
c++ - 在堆上分配内存的函数原型 (C/C++)
我对 C++ 相当陌生,所以这可能是一个初学者的问题。它认为做某事的“正确”风格是相当普遍的。
我正在编写一个函数,该函数在执行其职责时在堆上分配内存以供调用者使用。我很好奇这个函数的一个好的原型应该是什么样子。现在我有:
要使用它,我会写:
但是,我将指针传递给指针的事实提示我我可能以错误的方式执行此操作。
有人愿意开导我吗?
jvm - 什么是最佳空闲堆与总堆的比率?
什么是最佳空闲堆与总堆的比率?在这个比率的什么值下,我应该考虑增加堆大小/减小堆大小?
.net - 能否以编程方式查看 .NET 应用程序中的托管堆内容?
是否可以访问 .NET 应用程序中的托管堆并例如枚举当前分配的对象?
我知道有各种工具可以让你做到这一点,但我宁愿自己从代码中做到这一点,这样我就可以在自动化测试中使用它,比如在关闭表单后检查所有东西是否都已处理和清理。