【问题标题】:I got java.lang.OutOfMemoryError even if I increased the permgen size available to Eclipse. How to fix?即使我增加了 Eclipse 可用的 permgen 大小,我也得到了 java.lang.OutOfMemoryError。怎么修?
【发布时间】:2012-08-04 19:07:49
【问题描述】:

我已修改 eclipse.ini 以修复 java.lang.OutOfMemoryError。但问题仍然存在。这些是 eclipse.ini 中设置的选项:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.200.v20120522-1813
-product
org.eclipse.epp.package.rcp.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
3000m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-XX:MaxPermSize=3000m
-Xms3000m
-Xmx3000m
-XX:PermSize=3000m 

这是我打开通用 Android 项目的任何文件时遇到的错误:

Exception in thread "org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor" java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:614)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

注意:我在 Ubuntu 11.10 上使用 Eclipse junco,我正在尝试使用 ADT 插件开发一个 android 应用程序。

【问题讨论】:

  • 它实际上似乎不太可能使用近 3GB 的 permgen 空间 - 我猜,出于某种原因,VM 实际上并没有以您期望的参数启动,并且您实际上没有 3,000 MB 的永久空间。您能否使用 VisualVM 附加到该进程并验证实际可用的 permgen 空间是多少?这将有助于缩小问题范围。

标签: eclipse adt out-of-memory ubuntu-11.10


【解决方案1】:

我已修复:我删除了我的 Eclipse“面向 RCP 和 RAP 开发人员的 Eclipse”,而改用了“面向 C/C++ 开发人员的 Eclipse IDE”。现在一切正常。 感谢大家的帮助!

【讨论】:

    【解决方案2】:

    您可能希望查看您的代码而不是 Eclipse。也许其中存在一个错误,导致它分配了太多的内存,或者它的编写效率不高。内存异常的可能原因是:

    -将大文件加载到内存中

    -无限循环创建对象或将数据附加到变量

    -在 RAM 中存储大量任何类型的数据

    我希望这将帮助您更接近解决方案。

    【讨论】:

    • 代码应该没问题,因为它是Android SDK的示例项目(记事本示例)。我可以正确构建它,但如果我打开任何 .xml 文件,我会收到错误消息。我同意你的观点,这个问题似乎与占用的内存有关,但我应该找到一种方法来解决它,因为我有 3GB 的内存:可能我只需要为 eclipse 或 JVM 设置一些变量环境来解决它。
    猜你喜欢
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多