问题标签 [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.

0 投票
5 回答
13319 浏览

c++ - 如何使用 glibc 的字符串实现在堆栈上分配 std::string?

我的理解是上面的代码使用了默认的分配器来调用new。因此,即使 std::string foo 是在堆栈上分配的,foo 内部的内部缓冲区也会在堆上分配。

如何创建一个完全在堆栈上分配的字符串?

0 投票
12 回答
14179 浏览

java - 如何使 Java 应用程序的内存高效?

您如何优化具有大量(数百万)长寿命对象的应用程序的堆大小使用?(大缓存,从数据库加载大量记录)

  • 使用正确的数据类型
    • 避免使用 java.lang.String 来表示其他数据类型
  • 避免重复的对象
    • 如果预先知道值,则使用枚举
    • 使用对象池
    • String.intern() (好主意?)
  • 仅加载/保留您需要的对象

我正在寻找一般编程或 Java 特定的答案。没有时髦的编译器开关。

编辑:

优化可以在堆中出现数百万次的 POJO 的内存表示。

用例

  • 在内存中加载一个巨大的 csv 文件(转换为 POJO)
  • 使用休眠从数据库中检索数百万条记录

答案简历:

  • 使用享元模式
  • 写入时复制
  • 与加载具有 3 个属性的 10M 对象相比,拥有 3 个大小为 10M 的数组(或其他数据结构)是否更有效?(操作数据可能会很痛苦,但如果你真的内存不足......)
0 投票
3 回答
1794 浏览

coldfusion - ColdFusion 中的 CFINVOKE 与 java.lang.OutOfMemoryError

我遇到了 ColdFusion 堆的问题。这是我正在试验的一个小示例应用程序。我认为在cfinvoke调用该init方法后它会破坏组件本地的所有变量。但显然情况并非如此。该应用程序如下所示工作,但如果我在其中的循环中添加一个零,index.cfm它就会中断。什么存储在堆中导致这种情况?有没有解决的办法?

索引.cfm:

测试.cfc:

这是错误消息:

任何帮助,将不胜感激。

0 投票
7 回答
95668 浏览

c++ - C ++中的“new”和“malloc”和“calloc”有什么区别?

new“ ” 和 “ malloc” 和 “ ” 和家庭中的其他人有什么区别calloc

(什么时候)我需要“ new”以外的东西吗?

其中一个是使用其他实现的吗?

0 投票
4 回答
10532 浏览

java - 为 Java jar 分配更多堆空间

当您通过命令行运行程序时,您可以使用java -Xms -Xmx来指定堆大小。如果程序要通过双击 .jar 文件来运行,有没有办法使用比标准更多的堆?

0 投票
3 回答
211 浏览

memory - 何时从堆中释放可变状态值?

封装可变状态部分的 F# WikiBook 上,有以下代码片段。

起初,似乎很容易接受这样一个事实,即每次调用可变counter值都会递增。incr

但是想了一会儿,我无法理解的是什么时候counter从堆中释放出来,以及counter在递增之前如何仍然引用先前的值。它是如何通过多个函数调用counter在函数范围内生存的?incr

所以主要问题是:

  • 什么时候counter从堆中释放出来?
  • 不是counter内存泄漏吗?
0 投票
3 回答
15447 浏览

java - 如何在 Eclipse 中保存堆(转储到文件)?

从 MyEclipse 运行或调试 GA/AI 时出现此错误:

线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间

eclipse.ini 看起来像这样:

MyEclipse 是这样调用的:

从这里提高 vm 设置:

没有效果。所以我试图让它将堆转储到一个文件中,但是放置这些:

在程序参数中没有任何效果。如何通过更多的内存使用分析得到一些东西?例如,jstack 目前在 Windows 平台上不可用。并且使用 SendSignal 没有我能看到的效果。

屏幕截图

0 投票
2 回答
8440 浏览

c - malloc() 和 free() 在哪里存储分配的大小和地址?

在哪里存储分配的地址及其大小(Linux GCC)malloc()free()我读过一些实现将它们存储在实际分配的内存之前的某个地方,但我无法在我的测试中确认这一点。

背景,也许有人对此有另一个提示:

我正在尝试分析一个进程的堆内存,以确定另一个进程中字符串的当前值。访问进程堆内存并浏览它是没有问题的。但是,由于字符串的值发生变化,并且进程每次都分配新的内存部分,因此字符串的地址发生了变化。因为字符串具有固定格式,仍然很容易找到,但经过一些更改后,字符串的旧版本仍然在堆内存中(可能已释放,但仍未重用/覆盖),因此我无法判断哪个字符串是当前字符串。

因此,为了仍然找到当前的字符串,我想通过将其地址与地址进行比较malloc()free()了解是否仍在使用我在内存中找到的字符串。

ciao,埃尔玛

0 投票
4 回答
4078 浏览

java - 如何确保 JVM 以 Xms 的值启动

当我运行一个起始堆大小为 3G(由 -Xms3072m VM 参数设置)的 java 程序时,JVM 不会以该大小开始。它从 400m 左右开始,然后根据需要不断获取更多内存。

这对我来说是一个严重的问题。我知道 JVM 会在一段时间后需要上述数量。当JVM根据需要增加它的内存时,它就会变慢。在 JVM 获取更多内存期间,大量时间用于垃圾收集。而且我认为内存获取是一项昂贵的任务。

如何确保 JVM 实际上尊重起始堆大小参数?

更新:这个应用程序创建了很多对象,其中大部分很快就死掉了。一些生成的对象需要保留在内存中(从年轻堆中转移出来)。在此操作期间,所有这些对象都需要在内存中。运行后,可以看到young heap中的所有对象都被认领成功了。所以没有内存泄漏。

当堆大小达到 3G 时,同样的操作可以顺利运行。这清楚地表明需要额外的时间用于获取内存。

这个 Sun JDK 5。

0 投票
6 回答
53235 浏览

winapi - VirtualAlloc 和 HeapAlloc 有什么区别?

在 Windows 环境中分配内存的方法有很多,例如VirtualAlloc, HeapAlloc, malloc, new

那么,它们之间有什么区别呢?