在 Eclipse.ini 中更改堆大小无济于事 [重复]

Posted

技术标签:

【中文标题】在 Eclipse.ini 中更改堆大小无济于事 [重复]【英文标题】:Changing Heap Size in Eclipse.ini Not Helping [duplicate] 【发布时间】: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

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

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 设置为您想要的任何堆栈大小。 【参考方案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 字节限制”

以上是关于在 Eclipse.ini 中更改堆大小无济于事 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 堆空间(内存不足错误)

eclipse-inst-ini是啥

eclipse ini 配置

eclipse.ini 非标准选项

jvm 堆内存 栈内存 大小设置

如何设置java内存限制