问题标签 [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.
c++ - 如何使用 glibc 的字符串实现在堆栈上分配 std::string?
我的理解是上面的代码使用了默认的分配器来调用new。因此,即使 std::string foo 是在堆栈上分配的,foo 内部的内部缓冲区也会在堆上分配。
如何创建一个完全在堆栈上分配的字符串?
java - 如何使 Java 应用程序的内存高效?
您如何优化具有大量(数百万)长寿命对象的应用程序的堆大小使用?(大缓存,从数据库加载大量记录)
- 使用正确的数据类型
- 避免使用 java.lang.String 来表示其他数据类型
- 避免重复的对象
- 如果预先知道值,则使用枚举
- 使用对象池
- String.intern() (好主意?)
- 仅加载/保留您需要的对象
我正在寻找一般编程或 Java 特定的答案。没有时髦的编译器开关。
编辑:
优化可以在堆中出现数百万次的 POJO 的内存表示。
用例
- 在内存中加载一个巨大的 csv 文件(转换为 POJO)
- 使用休眠从数据库中检索数百万条记录
答案简历:
- 使用享元模式
- 写入时复制
- 与加载具有 3 个属性的 10M 对象相比,拥有 3 个大小为 10M 的数组(或其他数据结构)是否更有效?(操作数据可能会很痛苦,但如果你真的内存不足......)
coldfusion - ColdFusion 中的 CFINVOKE 与 java.lang.OutOfMemoryError
我遇到了 ColdFusion 堆的问题。这是我正在试验的一个小示例应用程序。我认为在cfinvoke
调用该init
方法后它会破坏组件本地的所有变量。但显然情况并非如此。该应用程序如下所示工作,但如果我在其中的循环中添加一个零,index.cfm
它就会中断。什么存储在堆中导致这种情况?有没有解决的办法?
索引.cfm:
测试.cfc:
这是错误消息:
任何帮助,将不胜感激。
c++ - C ++中的“new”和“malloc”和“calloc”有什么区别?
new
“ ” 和 “ malloc
” 和 “ ” 和家庭中的其他人有什么区别calloc
?
(什么时候)我需要“ new
”以外的东西吗?
其中一个是使用其他实现的吗?
java - 为 Java jar 分配更多堆空间
当您通过命令行运行程序时,您可以使用java -Xms -Xmx
来指定堆大小。如果程序要通过双击 .jar 文件来运行,有没有办法使用比标准更多的堆?
memory - 何时从堆中释放可变状态值?
在封装可变状态部分的 F# WikiBook 上,有以下代码片段。
起初,似乎很容易接受这样一个事实,即每次调用可变counter
值都会递增。incr
但是想了一会儿,我无法理解的是什么时候counter
从堆中释放出来,以及counter
在递增之前如何仍然引用先前的值。它是如何通过多个函数调用counter
在函数范围内生存的?incr
所以主要问题是:
- 什么时候
counter
从堆中释放出来? - 不是
counter
内存泄漏吗?
java - 如何在 Eclipse 中保存堆(转储到文件)?
从 MyEclipse 运行或调试 GA/AI 时出现此错误:
线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
eclipse.ini 看起来像这样:
MyEclipse 是这样调用的:
从这里提高 vm 设置:
没有效果。所以我试图让它将堆转储到一个文件中,但是放置这些:
在程序参数中没有任何效果。如何通过更多的内存使用分析得到一些东西?例如,jstack 目前在 Windows 平台上不可用。并且使用 SendSignal 没有我能看到的效果。
c - malloc() 和 free() 在哪里存储分配的大小和地址?
在哪里存储分配的地址及其大小(Linux GCC)malloc()
?free()
我读过一些实现将它们存储在实际分配的内存之前的某个地方,但我无法在我的测试中确认这一点。
背景,也许有人对此有另一个提示:
我正在尝试分析一个进程的堆内存,以确定另一个进程中字符串的当前值。访问进程堆内存并浏览它是没有问题的。但是,由于字符串的值发生变化,并且进程每次都分配新的内存部分,因此字符串的地址发生了变化。因为字符串具有固定格式,仍然很容易找到,但经过一些更改后,字符串的旧版本仍然在堆内存中(可能已释放,但仍未重用/覆盖),因此我无法判断哪个字符串是当前字符串。
因此,为了仍然找到当前的字符串,我想通过将其地址与地址进行比较malloc()
并free()
了解是否仍在使用我在内存中找到的字符串。
ciao,埃尔玛
java - 如何确保 JVM 以 Xms 的值启动
当我运行一个起始堆大小为 3G(由 -Xms3072m VM 参数设置)的 java 程序时,JVM 不会以该大小开始。它从 400m 左右开始,然后根据需要不断获取更多内存。
这对我来说是一个严重的问题。我知道 JVM 会在一段时间后需要上述数量。当JVM根据需要增加它的内存时,它就会变慢。在 JVM 获取更多内存期间,大量时间用于垃圾收集。而且我认为内存获取是一项昂贵的任务。
如何确保 JVM 实际上尊重起始堆大小参数?
更新:这个应用程序创建了很多对象,其中大部分很快就死掉了。一些生成的对象需要保留在内存中(从年轻堆中转移出来)。在此操作期间,所有这些对象都需要在内存中。运行后,可以看到young heap中的所有对象都被认领成功了。所以没有内存泄漏。
当堆大小达到 3G 时,同样的操作可以顺利运行。这清楚地表明需要额外的时间用于获取内存。
这个 Sun JDK 5。
winapi - VirtualAlloc 和 HeapAlloc 有什么区别?
在 Windows 环境中分配内存的方法有很多,例如VirtualAlloc
, HeapAlloc
, malloc
, new
。
那么,它们之间有什么区别呢?