在 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 中更改堆大小无济于事 [重复]的主要内容,如果未能解决你的问题,请参考以下文章