Questions tagged «out-of-memory»

当程序请求无法满足的内存请求时抛出的错误或异常。

22
Android Studio-如何增加分配的堆大小
我使用Android Studio已有3个月了,而我开始使用它的应用程序已经变得相当庞大。程序右下角指示的内存使用量表示我分配的堆最大为494M。 当我开始更改XML文件时,我的内存使用量很快达到该上限,并且IDE崩溃,并显示如下内存不足错误。 我尝试使用此方法来增加堆大小,但到目前为止没有任何效果。 我看了很多关于如何增加堆大小的文章和其他问题,但是他们的答案都没有用。无论我对VMOPTIONS或IDE设置做什么,堆大小都不会增加。我相信我正在为VMOPTIONS编辑正确的文件,因为如果我故意给它一个无效的命令,Android Studio会抱怨它并且无法启动。 我正在使用Windows 7-64位并具有16GB RAM。还有其他人在Android Studio中遇到此问题吗?并且您能够修复它?

2
在Android上调整位图大小的最有效内存方式?
我正在构建一个图像密集型社交应用程序,其中图像从服务器发送到设备。当设备的屏幕分辨率较小时,我需要在设备上调整位图的大小,以匹配其预期的显示大小。 问题是使用createScaledBitmap导致我在调整成组的缩略图图像后遇到很多内存不足错误。 在Android上调整位图大小的最有效内存方式是什么?

14
捕获java.lang.OutOfMemoryError?
文档的java.lang.Error说: 错误是Throwable的子类,它指示严重的问题,即合理的应用程序不应尝试抓住 但是作为java.lang.Error的子类java.lang.Throwable,我可以捕获这种Throwable类型。 我了解为什么捕获这种异常不是一个好主意。据我了解,如果我们决定捕获它,捕获处理程序不应自行分配任何内存。否则OutOfMemoryError会再次抛出。 所以,我的问题是: 捕捞java.lang.OutOfMemoryError可能是个好主意吗? 如果我们决定进行catch java.lang.OutOfMemoryError,如何确保catch处理程序本身不会分配任何内存(任何工具或最佳实践)?

11
java.lang.OutOfMemoryError:Java堆空间
我在执行多线程程序时遇到以下错误 java.lang.OutOfMemoryError: Java heap space 上面的错误发生在其中一个线程中。 据我所知,堆空间仅由实例变量占用。如果这是正确的,那么为什么在运行一段时间后会出现此错误,因为在创建对象时分配了实例变量的空间。 有什么办法可以增加堆空间? 我应该对程序进行哪些更改,以便它将占用更少的堆空间?

14
当仍有大量可用内存时,抛出“ System.OutOfMemoryException”
这是我的代码: int size = 100000000; double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb double[] randomNumbers = new double[size]; 异常:引发了类型为'System.OutOfMemoryException'的异常。 我在这台机器上有4GB内存,开始运行时有2.5GB可用空间,PC上显然有足够的空间来处理762mb的100000000随机数。给定可用内存,我需要存储尽可能多的随机数。当我开始生产时,包装盒上将有12GB,我想利用它。 CLR是否将我限制为默认的最大内存开始?以及我如何要求更多? 更新资料 我认为如果问题是由于内存碎片造成的话,将它分成较小的块并逐步增加我的内存需求将会有所帮助,但是不管我做什么调整blockSize,我都无法超过256mb的总ArrayList大小。 private static IRandomGenerator rnd = new MersenneTwister(); private static IDistribution dist = new DiscreteNormalDistribution(1048576); private static List<double> ndRandomNumbers = new List<double>(); private static …

6
.NET内存不足异常-已使用1.3GB,但已安装16GB
当应用程序的内存使用量超过1.3GB时,我的C#应用​​程序中出现了内存不足异常。 我在具有3gb内存的32位计算机上遇到了同样的问题,那时还是有意义的,但是现在我将硬件升级到了具有16GB内存,高端主板和RAM但内存不足的64位计算机1.3GB之后仍会发生异常! 我知道没有单个对象超过2GB,无论如何,1.3小于2GB,因此单个对象的内置MS 2GB限制不太可能成为问题... 似乎当应用程序达到一定的内存使用量阈值时,会有某种Windows终止开关……那么也许应该有一种方法可以在注册表中进行配置? 任何帮助将不胜感激!
91 c#  out-of-memory 

13
Maven内存不足构建失败
截至今天,我的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) [ERROR]内存不足;要增加内存量,请在启动时使用-Xmx标志(java -Xmx128M ...) 从昨天开始,我已经成功运行了Maven编译。 从今天起,我将堆增加到3 GB。另外,我只更改了2-3个较小的代码行,所以我不理解此“内存不足”错误。 vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS -Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m 编辑:我通过更改失败模块的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>

10
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之后,我也无法查明。 我已禁止从网络上加载图像(并增加了加载的测试数据来弥补它并使测试公平),并确保图像缓存使用SoftReferences。Android实际上试图释放它拥有的一些SoftReference,但要在它崩溃到内存不足之前。 徽章页面从Web获取数据,将其从BaseAdapter加载到EntityData数组中,然后将其提供给ListView(我实际上是在使用CommonsWare的出色MergeAdapter,但是在此Badge活动中,无论如何实际上只有1个适配器,但是我想以任何一种方式提及这个事实)。 我遍历了代码,却找不到任何可能泄漏的内容。我清除并清空了所有可以找到的内容,甚至将System.gc()左右移走,但应用程序仍然崩溃。 我仍然不明白为什么堆栈中不活动的活动不会获得收益,我真的很想弄清楚这一点。 在这一点上,我正在寻找任何提示,建议,解决方案……任何可能有用的方法。 谢谢。

3
了解Linux oom-killer的日志
我的应用被oom-killer杀死了。它是在没有交换的实时USB上运行的Ubuntu 11.10,并且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>] ? …

10
C#:内存不足异常
今天我的申请提出了OutOfMemoryException。对我来说,这几乎几乎是不可能的,因为我也有4GB RAM和很多虚拟内存。当我尝试将现有集合添加到新列表时发生了错误。 List<Vehicle> vList = new List<Vehicle>(selectedVehicles); 据我了解,这里没有分配多少内存,因为我的新列表中应该包含的车辆已经存在于内存中。我不得不承认这Vehicle是一个非常复杂的类,我试图一次将大约50.000个项目添加到新列表中。但是,由于Vehicle应用程序中的所有内容都来自大小仅为200MB的数据库,因此我不知道这可能导致什么OutOfMemoryException。
71 c#  out-of-memory 

6
如何解决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) 根据这个stackTrace,我在这一行开始这个错误(“ tv”是textView): tv.setBackgroundResource(R.drawable.yanlis); 问题是什么?如果您需要有关代码的其他信息,可以添加它。谢谢!

4
如果使用可枚举的大对象,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 } } }

3
并行无限Java流内存不足
我试图理解为什么以下Java程序给出OutOfMemoryError,而没有的相应程序没有给出.parallel()。 System.out.println(Stream .iterate(1, i -> i+1) .parallel() .flatMap(n -> Stream.iterate(n, i -> i+n)) .mapToInt(Integer::intValue) .limit(100_000_000) .sum() ); 我有两个问题: 该程序的预期输出是什么? 如果没有,.parallel()这似乎只是输出sum(1+2+3+...),这意味着它只是在flatMap的第一个流“卡住”了,这是有道理的。 对于并行,我不知道是否有预期的行为,但是我的猜测是它以某种方式交错了第一个n左右的流,n并行工作者的数量在哪里。根据组块/缓冲行为,它也可能略有不同。 是什么导致它的内存不足?我正在专门尝试了解这些流是如何在后台实现的。 我猜有些东西阻塞了流,因此它永远不会完成,并且能够摆脱生成的值,但是我不太清楚事物的评估顺序和缓冲发生的位置。 编辑:如果相关,我正在使用Java 11。 Editt 2:即使对于简单的程序IntStream.iterate(1,i->i+1).limit(1000_000_000).parallel().sum(),显然也会发生同样的事情,因此它可能与limit而不是的懒惰有关flatMap。

2
尽管使用了WeakHashMap,但仍发生OutOfMemoryException
如果不调用System.gc(),系统将抛出OutOfMemoryException。我不知道为什么需要System.gc()显式呼叫;JVM应该gc()自称对吧?请指教。 以下是我的测试代码: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } } 如下所示,添加-XX:+PrintGCDetails以打印出GC信息;如您所见,实际上,JVM尝试执行完整的GC运行,但是失败;我仍然不知道原因。如果我取消注释该System.gc();行,结果是肯定的,这很奇怪: add new element …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.