标签: heap

建议避免位图内存不足错误

我正在开发一个Android应用程序.该应用程序有一个包含大量图像的视图.我有一个错误,我会尝试提供尽可能多的信息,希望有人可以给我一些建议.

该应用程序在所有本地测试中都运行良好.但是,我收到了很多来自用户的崩溃:java.lang.OutOfMemoryError: bitmap size exceeds VM budget

这是堆栈跟踪

0       java.lang.OutOfMemoryError: bitmap size exceeds VM budget
1   at  android.graphics.Bitmap.nativeCreate(Native Method)
2   at  android.graphics.Bitmap.createBitmap(Bitmap.java:507)
3   at  android.graphics.Bitmap.createBitmap(Bitmap.java:474)
4   at  android.graphics.Bitmap.createScaledBitmap(Bitmap.java:379)
5   at  android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:498)
6   at  android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:473)
7   at  android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
8   at  android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:359)
9   at  android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:385)
Run Code Online (Sandbox Code Playgroud)

我最大的问题是,即使在旧设备上,我也无法在本地重现问题.

我已经实现了很多东西来尝试解决这个问题:

  1. 没有内存泄漏:我确保根本没有内存泄漏.当我不需要它时,我删除了视图.我还回收了所有的位图,并确保垃圾收集器正常工作.我实现了该onDestroy()方法中的所有必要步骤
  2. 图像大小正确缩放:在获取图像之前,我得到它的尺寸并计算出inSampleSize.
  3. 堆大小:我还在获取图像之前检测最大堆大小,并确保有足够的空间.如果没有足够的,我会相应地重新缩放图像.

用于计算正确inSampleSize的代码

public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight)
   {
      // Raw height and width of image
      final int height = options.outHeight;
      final …
Run Code Online (Sandbox Code Playgroud)

heap android bitmap out-of-memory

36
推荐指数
1
解决办法
5万
查看次数

如何在Python的heapq中实现reduce-key功能?

我知道有可能在O(log n)中实现减少键功能,但我不知道怎么做?

python heap

35
推荐指数
4
解决办法
1万
查看次数

如何关闭容错堆?

我最近在启动应用程序时在Visual Studio 2005输出窗口中看到了这一行:
FTH:(7156):***应用于当前进程的容错堆填充程序.这通常是由于以前的崩溃造成的.***

我尝试使用以下说明关闭容错堆:http:
//msdn.microsoft.com/en-us/library/dd744764(VS.85).aspx

我正在运行Windows 7 64位版本,因此我对32位和64位注册表进行了更改,并使用32位和32位运行"Rundll32.exe fthsvc.dll,FthSysprepSpecialize"命令. 64位版本的Rundll32.exe.

但是,重新启动后,我仍然在尝试调试应用程序时获得容错堆!

这是一个真正的问题,因为它掩盖了我试图重现的错误,并且它也会杀死性能.

有没有人有任何其他建议如何禁用容错堆?

heap fault-tolerant-heap windows-7

35
推荐指数
4
解决办法
3万
查看次数

python中heapq和PriorityQueue有什么区别?

在蟒蛇有一个内置的heapq算法,让你push,pop,nlargest,nsmallest...等,你可以申请名单.但是,也有queue.PriorityQueue类似乎支持或多或少相同的功能.有什么区别,你何时会使用另一个?

python heap priority-queue data-structures

35
推荐指数
2
解决办法
8881
查看次数

为什么内存会分成堆栈和堆?

可能重复:
堆栈和堆的内容和位置

我在堆栈和堆上有几个问题.

要知道的基本事情是堆栈比堆快,但是有限.(如我错了请纠正我).

但是,我总是想知道堆栈和堆是如何工作的.RAM只是一块内存,它不分为'堆栈'和'堆'(或者是它?).如果是这样,为什么我们首先将堆栈和堆中的内存分开?

操作系统可以让我们能够分配堆栈中的所有内容 - >一切都变得更快 - >幸福的世界?

我很确定事实并非如此.但为什么!?谁能给我一个深入的答案?

很抱歉,如果这篇帖子是某人发过的一些帖子的副本,那么有很多与堆栈和堆相关的帖子,我找不到我所拥有的确切问题.如果您碰巧知道一个,请继续并将其链接.

memory heap stack memory-management

34
推荐指数
2
解决办法
1万
查看次数

了解最大JVM堆大小 - 32位与64位

我已经读过 32位Windows上的最大堆大小约为1.5GB,这是因为JVM需要连续的内存.有人可以解释"连续内存"的概念,以及为什么在Windows上只有1.5GB的最大值?

其次,64位Windows上的最大堆大小是什么,为什么这与32位可用的不同?

java heap jvm

33
推荐指数
2
解决办法
7万
查看次数

string.c_str()需要解除分配吗?

我的代码经常将C++字符串转换为CStrings,我想知道原始字符串是否在堆栈上分配,CString也会在堆栈上分配吗?例如:

string s = "Hello world";
char* s2 = s.c_str();
Run Code Online (Sandbox Code Playgroud)

s2在堆栈上还是在堆中分配?换句话说,我需要删除s2吗?

相反,如果我有这个代码:

string s = new string("Hello, mr. heap...");
char* s2 = s.c_str();
Run Code Online (Sandbox Code Playgroud)

请问s2现在在堆中,因为它的起源是在堆上?

为了澄清,当我询问是否s2在堆上时,我知道指针在堆栈上.我问的是它指向堆或堆栈的内容.

c++ string heap stack memory-management

33
推荐指数
2
解决办法
2万
查看次数

Swift堆栈/堆理解

我想在swift中不希望存储在堆栈/堆中的内容.我有一个很好的估计:你打印的所有东西和内存地址都不是值,它们存储在堆栈中,而是打印出的值是什么,它们在堆上,基本上根据值和引用类型.我完全错了吗?并且可选地,您是否可以提供堆栈/堆的可视化表示?

memory heap stack ios swift

33
推荐指数
4
解决办法
2万
查看次数

为什么修复了Java堆的最大大小?

不是 可以增加Java的堆的最大尺寸的虚拟机启动后.这有什么技术原因?垃圾收集算法是否依赖于具有固定数量的内存来处理?或者出于安全原因,是否通过消耗所有可用内存来阻止Java应用程序在DOS上运行系统上的其他应用程序?

java heap garbage-collection jvm

32
推荐指数
2
解决办法
6374
查看次数

是否有Fibonacci堆的标准Java实现?

我正在研究不同类型的堆数据结构.

Fibonacci堆似乎具有更好的最坏情况复杂度(1)插入,(2)删除和(2)找到最小元素.

我发现在Java中有一个类PriorityQueue是平衡的二进制堆.但为什么他们不使用Fibonacci堆?

另外,是否有斐波那契堆的实现java.util

谢谢!

java heap data-structures fibonacci-heap

32
推荐指数
2
解决办法
2万
查看次数