标签: out-of-memory

java.lang.OutOfMemoryError:Java堆空间

我在执行多线程程序时遇到以下错误

java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

上述错误发生在其中一个线程中.

  1. 据我所知,堆空间仅由实例变量占用.如果这是正确的,那么为什么在运行正常一段时间之后发生此错误,因为在创建对象时分配了实例变量的空间.

  2. 有没有办法增加堆空间?

  3. 我应该对我的程序进行哪些更改,以便它可以减少堆空间?

java multithreading heap-memory out-of-memory

94
推荐指数
7
解决办法
28万
查看次数

Android应用程序内存不足问题 - 尝试了一切但仍然不知所措

我花了整整4天时间尽我所能来弄清楚我正在开发的应用程序中的内存泄漏,但事情很久以前就停止了.

我正在开发的应用程序具有社交性,因此请考虑配置文件活动(P)并列出包含数据的活动 - 例如徽章(B).您可以从配置文件跳转到徽章列表,转到其他配置文件,其他列表等.

所以想象一下这样的流程P1 - > B1 - > P2 - > B2 - > P3 - > B3等.为了保持一致性,我正在加载同一个用户的配置文件和徽章,所以每个P页面是相同的,所以是每个B页面.

这个问题的一般要点是:在导航了一下之后,根据每个页面的大小,我在随机位置得到了一个内存不足的例外 - 位图,字符串等 - 它似乎并不一致.

在做了一切可以想象的事情来弄清楚为什么我的内存不足之后,我什么也没想出来.我不明白的是,如果Android在加载时耗尽内存而不是崩溃,那么为什么Android不会杀死P1,B1等.如果我通过onCreate()和onRestoreInstanceState()返回它们,我会期望这些早期活动会死亡并复活.

更别说这个 - 即使我做P1 - > B1 - >返回 - > B1 - >返回 - > B1,我仍然会崩溃.这表明某种内存泄漏,即使在转储hprof并使用MAT和JProfiler后,我也无法查明它.

我已禁用从Web加载图像(并增加了加载的测试数据以弥补它并使测试公平)并确保图像缓存使用SoftReferences.Android实际上试图释放它所拥有的一些SoftReferences,但就在它崩溃内存之前.

徽章页面从Web获取数据,从BaseAdapter将其加载到EntityData数组中并将其提供给ListView(我实际上使用的是CommonsWare的优秀MergeAdapter,但在此Badge活动中,实际上只有1个适配器,但我无论哪种方式都想提到这个事实).

我已经完成了代码并且无法找到任何可能泄漏的内容.我清除并取消了我能找到的所有内容,甚至是System.gc()左右,但应用程序崩溃了.

我仍然不明白为什么堆栈上的非活动活动不会被收获,我真的很想知道这一点.

在这一点上,我正在寻找任何提示,建议,解决方案......任何有用的东西.

谢谢.

lifecycle android out-of-memory android-activity

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

当仍有大量内存空闲时,抛出'System.OutOfMemoryException'

这是我的代码:

int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];
Run Code Online (Sandbox Code Playgroud)

例外:抛出了类型'System.OutOfMemoryException'的异常.

我在这台机器上有4GB内存当我开始运行时,2.5GB是免费的,PC上有足够的空间来处理762mb的100000000随机数.我需要在给定可用内存的情况下尽可能多地存储随机数.当我去生产时,盒子上将有12GB,我想要使用它.

CLR是否将我限制为默认的最大内存?以及如何申请更多?

更新

我认为将其分解为更小的块并逐渐增加我的内存需求将有助于如果问题是由于内存碎片,但它不会无法超过256mb的总ArrayList大小,无论我做什么调整blockSize.

private static IRandomGenerator rnd = new MersenneTwister();
private static IDistribution dist = new DiscreteNormalDistribution(1048576);
private static List<double> ndRandomNumbers = new List<double>();

private static void AddNDRandomNumbers(int numberOfRandomNumbers) {
    for (int i = 0; i < numberOfRandomNumbers; i++) {
      ndRandomNumbers.Add(dist.ICDF(rnd.nextUniform()));                
  }
}
Run Code Online (Sandbox Code Playgroud)

从我的主要方法:

int blockSize = 1000000;

while …
Run Code Online (Sandbox Code Playgroud)

c# memory-management out-of-memory

86
推荐指数
6
解决办法
25万
查看次数

Maven Out of Memory构建失败

截至今天,我的maven编译失败了.

[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO]  at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO]  at java.lang.String.<init>(String.java:203)
[INFO]  at java.lang.String.substring(String.java:1877)
Run Code Online (Sandbox Code Playgroud)

[错误]内存不足; 要增加内存量,请在启动时使用-Xmx标志(java -Xmx128M ...)

截至昨天,我已成功运行maven编译.

截至今天,我刚刚把我的堆增加到3 GB.另外,我只更改了2-3行代码,所以我不明白这个"内存不足"的错误.

vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
Run Code Online (Sandbox Code Playgroud)

编辑:我通过更改失败的模块的pom.xml尝试了海报的评论.但我得到了相同的maven构建错误.

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <fork>true</fork>
            <meminitial>1024m</meminitial>
            <maxmem>2024m</maxmem>
       </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

out-of-memory pom.xml maven-3 maven maven-compiler-plugin

83
推荐指数
7
解决办法
19万
查看次数

.NET Out of Memory异常 - 使用1.3GB但安装了16GB

当应用程序的内存使用量超过1.3GB时,我的c#应用程序中出现Out Of Memory异常.

我在具有3GB内存的32位机器上遇到了同样的问题,当时它是有道理的,但现在我将硬件升级到具有16GB内存的64位机器,高端主板和RAM但内存不足1.3GB之后仍然会发生异常!

我知道没有超过2GB的单个对象,而且无论如何1.3都不到2GB,因此单个对象的内置MS 2GB限制不太可能是问题...

当应用程序达到某个内存使用阈值时,似乎有某种类型的Windows kill-switch ...那么应该有一种方法可以在注册表中配置它吗?

任何帮助将不胜感激!

c# out-of-memory

83
推荐指数
3
解决办法
12万
查看次数

了解Linux oom-killer的日志

我的应用程序被oom-killer杀死.它是Ubuntu 11.10在没有交换的现场USB上运行,而且PC有1 Gig的RAM.运行的唯一应用程序(除了所有内置的Ubuntu东西)是我的程序flasherav.请注意/ tmp是内存映射的,并且在崩溃时有大约200MB的文件(因此占用了大约200MB的RAM).

我试图理解如何分析om-killer日志,这样我就可以理解所有内存的使用位置 - 也就是那些不同的块会加起来~1 gig导致oom-killer踢在?一旦我理解了这一点,我就可以努力减少罪犯的使用,以便应用程序可以在1 GB内存的计算机上运行.我的具体问题是.

为了分析这种情况,我总结了"total_vm"列,我只获得了609342KB(在/ tmp中添加到200MB时仍然只有809MB).也许我对"total_vm"列是错误的 - 它包括已分配但未使用的内存加共享内存.如果是,那么它不应该过分夸大实际使用的内存(因此我不应该忘记内存),对吧?是否有其他内存正在使用中未列入下面的列表中?

[11686.040460] flasherav invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
[11686.040467] flasherav cpuset=/ mems_allowed=0
[11686.040472] Pid: 2859, comm: flasherav Not tainted 3.0.0-12-generic #20-Ubuntu
[11686.040476] Call Trace:
[11686.040488]  [<c10e1c15>] dump_header.isra.7+0x85/0xc0
[11686.040493]  [<c10e1e6c>] oom_kill_process+0x5c/0x80
[11686.040498]  [<c10e225f>] out_of_memory+0xbf/0x1d0
[11686.040503]  [<c10e6123>] __alloc_pages_nodemask+0x6c3/0x6e0
[11686.040509]  [<c10e78d3>] ? __do_page_cache_readahead+0xe3/0x170
[11686.040514]  [<c10e0fc8>] filemap_fault+0x218/0x390
[11686.040519]  [<c1001c24>] ? __switch_to+0x94/0x1a0
[11686.040525]  [<c10fb5ee>] __do_fault+0x3e/0x4b0
[11686.040530]  [<c1069971>] ? enqueue_hrtimer+0x21/0x80
[11686.040535]  [<c10fec2c>] handle_pte_fault+0xec/0x220
[11686.040540]  [<c10fee68>] handle_mm_fault+0x108/0x210
[11686.040546]  [<c152fa00>] ? vmalloc_fault+0xee/0xee
[11686.040551]  [<c152fb5b>] do_page_fault+0x15b/0x4a0 …
Run Code Online (Sandbox Code Playgroud)

linux memory out-of-memory

75
推荐指数
4
解决办法
9万
查看次数

C#:Out of Memory异常

今天我的申请今天投了一个OutOfMemoryException.对我来说,这几乎是不可能的,因为我有4GB的RAM和大量的虚拟内存.当我尝试将现有集合添加到新列表时发生错误.

List<Vehicle> vList = new List<Vehicle>(selectedVehicles);  
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这里分配的内存不多,因为我的新列表应该包含的车辆已经存在于内存中.我不得不承认这Vehicle是一个非常复杂的课程,我试图一次性将大约50.000个项目添加到新列表中.但是由于Vehicle应用程序中的所有内容都来自一个只有200MB大小的数据库:我不知道OutOfMemoryException在这一点上可能会导致什么.

c# out-of-memory

65
推荐指数
7
解决办法
18万
查看次数

在PHP中需要一个类似于数组的结构,内存使用量最少

在我的PHP脚本中,我需要创建一个> 600k整数的数组.不幸的是,我的web服务器memory_limit设置为32M,所以在初始化数组时,脚本会中止消息

致命错误:8/home/www/myaccount/html/mem_test.php中允许的内存大小为33554432字节(试图分配71个字节)

我知道PHP不会将数组值存储为普通整数,而是存储为比普通整数值大得多的z值(在我的64位系统上为8个字节).我写了一个小脚本来估计每个数组条目使用多少内存,事实证明,它恰好是128个字节.128!我需要> 73M才能存储阵列.不幸的是,网络服务器不在我的控制之下,所以我无法增加memory_limit.

我的问题是,在PHP中是否有可能创建一个使用更少内存的类似数组的结构.我不需要这种结构是关联的(普通的索引访问就足够了).它也不需要动态调整大小 - 我确切知道数组的大小.此外,所有元素都是相同的类型.就像一个好旧的C阵列.


编辑: 所以deceze的解决方案与32位整数一起开箱即用.但即使您使用的是64位系统,pack()似乎也不支持64位整数.为了在我的数组中使用64位整数,我应用了一些位操作.也许下面的片段对某些人有帮助:

function push_back(&$storage, $value)
{
    // split the 64-bit value into two 32-bit chunks, then pass these to pack().
    $storage .= pack('ll', ($value>>32), $value);
}

function get(&$storage, $idx)
{
    // read two 32-bit chunks from $storage and glue them back together.
    return (current(unpack('l', substr($storage, $idx * 8, 4)))<<32 |
            current(unpack('l', substr($storage, $idx * 8+4, 4))));
}
Run Code Online (Sandbox Code Playgroud)

php arrays memory-management out-of-memory

65
推荐指数
5
解决办法
7325
查看次数

如何在Android中解决java.lang.OutOfMemoryError问题

尽管我在drawable文件夹中有一个非常小的图像,我从用户那里得到了这个错误.我没有在代码中使用任何位图功能.至少故意:)

java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:683)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:513)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889)
    at android.content.res.Resources.loadDrawable(Resources.java:3436)
    at android.content.res.Resources.getDrawable(Resources.java:1909)
    at android.view.View.setBackgroundResource(View.java:16251)
    at com.autkusoytas.bilbakalim.SoruEkrani.cevapSecimi(SoruEkrani.java:666)
    at com.autkusoytas.bilbakalim.SoruEkrani$9$1.run(SoruEkrani.java:862)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5602)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

根据这个stackTrace,我在这一行得到了这个错误('tv'是一个textView):

tv.setBackgroundResource(R.drawable.yanlis);
Run Code Online (Sandbox Code Playgroud)

问题是什么?如果您需要有关代码的其他信息,我可以添加它.谢谢!

android bitmap out-of-memory setbackground bitmapfactory

65
推荐指数
4
解决办法
11万
查看次数

如果使用具有大对象的枚举,Parallel.ForEach可能会导致"内存不足"异常

我正在尝试将数据库中存储图像的数据库迁移到指向硬盘驱动器上的文件的数据库中的记录.我试图使用此方法来查询数据Parallel.ForEach以加快进程.

但是,我注意到我得到了一个OutOfMemory例外.我知道Parallel.ForEach会查询一批枚举,以减少开销的成本,如果有一个用于间隔查询(如果您一次执行一堆查询而不是间隔它们,您的源将更有可能将下一条记录缓存在内存中)出).问题是由于我返回的记录之一是1-4Mb字节数组,缓存导致整个地址空间用完(程序必须在x86模式下运行,因为目标平台将是32位机)

是否有任何方法可以禁用缓存或使TPL更小?


这是一个显示问题的示例程序.这必须在x86模式下编译,以显示问题,如果它在你的机器上花费很长时间或者没有发生,从而增加了阵列的大小(我发现1 << 20我的机器上大约需要30秒,4 << 20几乎是瞬间的)

class Program
{

    static void Main(string[] args)
    {
        Parallel.ForEach(CreateData(), (data) =>
            {
                data[0] = 1;
            });
    }

    static IEnumerable<byte[]> CreateData()
    {
        while (true)
        {
            yield return new byte[1 << 20]; //1Mb array
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# out-of-memory large-data task-parallel-library

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