【问题标题】:Changing Heap Size in Eclipse.ini Not Helping [duplicate]在 Eclipse.ini 中更改堆大小无济于事 [重复]
【发布时间】:2013-12-27 14:29:04
【问题描述】:

我的资产目录中有数千个 html 文件,我必须将它们的位置存储在 java 文件中,但是 java 中的堆栈空间有限制,这不允许我这样做 我这样做增加了我的堆栈内存 http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F

但现在我可以粘贴我的代码,但几秒钟后我再次收到 stackoverflow 错误,它提示我终止工作区

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class WebViewActivity extends Activity {
    WebView web;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        web = (WebView) findViewById(R.id.webView1);
        web.setWebViewClient(new myWebClient());
        web.getSettings().setJavaScriptEnabled(true);
        int pos = getIntent().getIntExtra("key",0);
 if(pos==0){    web.loadUrl("file:///android_asset/1.html");
else if(pos==1){    web.loadUrl("file:///android_asset/2.html");}   
else if(pos==2){    web.loadUrl("file:///android_asset/3.html");}       
else if(pos==3){    web.loadUrl("file:///android_asset/4.html");}        
else if(pos==4){    web.loadUrl("file:///android_asset/5.html");}

      // similarly for 4 and 5 and so on.
    }

    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub

            view.loadUrl(url);
            return true;

        }
        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

        }
    }
}

【问题讨论】:

  • 这不会增加堆栈大小。
  • 在您的 Eclipse.ini 中,将 -Xss 设置为您想要的任何堆栈大小。

标签: java eclipse


【解决方案1】:

听起来你根本不应该这样做。如果你的堆栈用完了,那不是很正常的情况(除非你正在做无限递归)。 有点更常见的是堆用完。

您是说您有数千个 html 文件,并且您将它们的位置存储在一个 java 文件中。这听起来像是非常糟糕的设计。这些位置应该存储在数据库中,或者如果这不可能(或者更确切地说,您不想这样做),则应存储在您读入的外部文件中。

您能否粘贴几行您遇到问题的代码,并说明您打算如何处理这数千个 HTML 文件,我们将为您提供适当的解决方案。

编辑: 好的。一个合适的解决方案是将 URL 存储到 SQLite 数据库中,以“pos”作为主键。然后你只需要一行代码,即类似

web.loadUrl(sqlDb.load("select url FROM mytable where pos = " + pos));

这里有教程:AndroidSQLite

祝你好运! :)

【讨论】:

  • 好吧,我的职位不好发布,有没有办法将职位(否则如果声明)存储在外部文件中?就像你说的
  • 职位是什么意思?你到底卡在哪里了?你走了多远?
  • 别担心。只需发布您的事情,我们就会告诉您如何正确地做事(即没有成千上万的 else if 语句)。
  • Lars Vogel 的教程比我的代码还要大,大声笑你能举个例子吗?即如何将其引用到 sql 数据库?如何在sql数据库中添加html文件?
  • 说实话,我的 Android-fu 并没有那么强大,以至于我可以把它写下来,而且我现在没有时间自己开始阅读那个教程。
【解决方案2】:

另一个建议:

if(pos==0){    web.loadUrl("file:///android_asset/1.html");
else if(pos==1){    web.loadUrl("file:///android_asset/2.html");}   
else if(pos==2){    web.loadUrl("file:///android_asset/3.html");}       
else if(pos==3){    web.loadUrl("file:///android_asset/4.html");}        
else if(pos==4){    web.loadUrl("file:///android_asset/5.html");}

我不知道这段代码如何代表你真正在做的事情,但这里看起来你可以计算 URL:

String url = "file:///android_asset/" + (pos+1) + ".html";

OTOH,这不是可能导致堆栈溢出的代码。 但是当它这样做时,增加堆栈大小,而不是堆大小。 看,如果你的车没油了,你给挡风玻璃清洗器加油,而不是加水。

【讨论】:

  • 如何增加堆栈大小?
  • 阅读上面的@Matt Bulls 评论。它是 -Xss JVM 选项。您应该对作为程序员使用的工具有基本的了解。对于java程序员来说,JVM是最重要的工具。
  • 我这样做了,我找不到任何“-Xss”的东西,所以我在我的 ini 文件中添加了“-Xss900m”,之后,eclipse 没有启动
  • 试试-Xss4m,应该够用了。
  • 它让我粘贴代码,但现在它显示“onCreate(Bundle) 方法的代码超出了 65535 字节限制”
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2011-08-29
  • 2018-12-20
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多