Tag: 内存不足

捕获OutOfMemoryError

是否有任何一点在Java中捕获内存不足错误( java.lang.OutOfMemoryError )?

我应该捕获OutOfMemoryError吗?

一般的建议是你不应该捕获java.lang.Error,除非在特殊情况下,请参阅捕获Throwable是不好的做法? 例如。 我的情况是我有一个程序有时耗尽内存并抛出java.lang.OutOfMemoryError。 虽然没有从中恢复但我确实想知道它发生了,所以我希望在日志中看到一些东西和非零退出代码。 所以这样的建议是什么? public static void main(String[] args) { try { … } catch (Exception e) { e.printStackTrace(); System.exit(1); } catch (OutOfMemoryError e) { e.printStackTrace(); System.exit(1); } } 另一个程序是类似的,除了它可能是一个消耗所有内存的特定线程。 在这种情况下,如果该线程退出,则可以继续处理,我真正想要的只是查看日志并最终具有非零退出代码。 那么我应该在那个线程运行方法中捕获OutOfMemoryError吗?

长时间运行后凌空撞击应用程序服务

我实现了一项服务来从服务器获取更新,如下所示: public class Myupdates extends Service { private static final String TAG = “AutoUpdates”; private static final int started = 0; static SQLiteDatabase db; private boolean isRunning = false; private CountDownTimer timer; @Override public void onCreate() { this.db = openOrCreateDatabase(“db”, Context.MODE_PRIVATE, null); //Log.i(TAG, “Service onCreate”); isRunning = true; } int mCount = 1; @Override public […]

OutOfMemoryError:接收2.3 MB的XML响应时

以下是连接到Web服务并从服务器接收XML响应的简单方法,大约2.3MB,我得到的是OutOfMemoryError ( 我已经提到过这个 ),但是找不到我的方式,卡住了很多 public synchronized String getUpdates(boolean news) throws Exception { String response = null; HttpPost httppost; DefaultHttpClient httpclient; ResponseHandler res=new BasicResponseHandler(); List nameValuePairs; httppost = new HttpPost(context.getString(R.string.SYNCURL)); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setContentCharset(params, “UTF-8”); String lastupdate = null; SharedPreferences preferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); lastupdate = preferences.getString(LAST_UPDATE, DatabaseHelper.updateDate); if(news) lastupdate = preferences.getString(LAST_UPDATE_NEWS, lastupdate); httpclient […]

在h2o中加载大于内存大小的数据

我正在尝试加载大于h2o内存大小的数据。 H2o 博客提到: A note on Bigger Data and GC: We do a user-mode swap-to-disk when the Java heap gets too full, ie, you’re using more Big Data than physical DRAM. We won’t die with a GC death-spiral, but we will degrade to out-of-core speeds. We’ll go as fast as the disk will allow. I’ve […]

java.lang.OutOfMemoryError即使很多

我正在尝试将2.5GB的txt文件读入我的应用程序。 我正在运行Win7 x64并且有43GB的内存可用(64GB)。 我尝试使用-Xmx -XX:MaxParmSize -XX:ParmSize等。这些都不会影响错误。 我还能尝试什么? 这个错误看起来很奇怪,因为我当然有足够的堆空间可用。 Exception in thread “main” java.lang.OutOfMemoryError: Requested array size exceeds VM limit at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) at java.lang.AbstractStringBuilder.append(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at j.utilities.IO.loadString(IO.java:187) at j.utilities.IO.loadString(IO.java:169) at city.PreProcess.main(PreProcess.java:78) 我在跑步 java version “1.7.0_09” Java(TM) SE Runtime Environment (build 1.7.0_09-b05) Java HotSpot(TM) 64-Bit Server VM […]

如何在java中列出200万个文件目录而没有“内存不足”exception

我必须处理一个大约200万xml的目录进行处理。 我已经解决了使用队列在机器和线程之间分配工作的处理,一切正常。 但现在最大的问题是用200万个文件读取目录的瓶颈,以便逐步填充队列。 我尝试过使用File.listFiles()方法,但它给了我一个java out of memory: heap spaceexception。 有任何想法吗?

检测内存不足错误

我想为我的系统提供一种检测是否发生内存不足exception的方法。 此练习的目的是通过JMX公开此标志并相应地采取行动(例如,通过在监控系统上配置相关警报),否则这些错误将被忽视几天。 天真的方法是为每个线程设置一个未捕获的exception处理程序 ,并检查引发的exception是否是OutOfMemoryError实例并设置相关的标志。 但是,由于以下原因,这种方法不现实: exception可能发生在任何地方,包括第三方库。 我无法阻止他们捕捉Throwable并为自己保留它。 库可以生成自己的线程,我无法为这些线程强制执行未捕获的exception处理程序。 我看到的一个可能的场景是字节码操作(例如在OutOfMemoryError之上附加某种方面),但是我不确定这是否正确的方法或者这是否可行。 我们启用了-XX:+HeapDumpOnOutOfMemoryError ,但是我没有将此视为此问题的解决方案,因为它是为其他内容设计的 – 当发生这种情况时它不提供Java回调。 有没有人这样做过? 你会如何解决或建议解决它? 欢迎任何想法。

如何在Java中查看堆中的内容?

我设法在我正在开发的java应用程序中获得内存“泄漏”。 运行我的JUnit测试套件时,我会随机出现内存exception(java.lang.OutOfMemoryError)。 我可以使用哪些工具来检查我的java应用程序的堆,以查看我的所有堆的使用情况,以便我可以找出保留对应该能够被垃圾收集的对象的引用。

当看似无关的代码块注释掉时OutOfMemoryError

有人可以解释为什么当for循环被注释掉时,这个程序会抛出一个OutOfMemoryError吗? 如果没有注释,则运行正常。 抛出的exception是: 线程“main”中的exceptionjava.lang.OutOfMemoryError:Java堆空间 public class JavaMemoryPuzzlePolite { private final int dataSize = (int)(Runtime.getRuntime().maxMemory()* 0.6); public void f() { { System.out.println(dataSize); byte[] data = new byte[dataSize]; } /* for(int i = 0; i < 10; i++) { System.out.println("Please be so kind and release memory"); } */ System.out.println(dataSize); byte[] data2 = new byte[dataSize]; } public static […]