最近,我在scala中编写了一些Android应用程序,使用Eclipse.
一切都很好,直到我的程序只有几个类/活动.
当我添加更多代码时,JVM开始崩溃,eclipse经常冻结,adb经常丢失连接.任务经理表明Java进程需要800到1300 MB的内存!
我的电脑硬件参数非常不错,比如i7 3rd gen,8GB DDR3和SSD 256.
所以这不是原因.
此外,我的软件是最新版本,包含最新版本的Eclipse,Android SDK,Scala和Java开发工具包,以及eclipse的所有插件. -vmargs配置为scala开发,但它根本没有帮助.
所以我把它作为问题的原因消除了.
当我将我的代码重写为Java时,everythig非常出色,我可以继续我的项目.
有没有人发现在Android项目中使用scala的解决方案?我在这里和谷歌小组上阅读了几个类似的主题但这个问题没有答案.
编辑:
我用visual vm描述了我的代码,但堆空间使用是正常的.
这是我的代码的一些片段.
imports ...
class MainActivity extends FragmentActivity {
private lazy val timePicker = findViewById(R.id.timePicker).asInstanceOf[TimePicker]
private lazy val spinner_sourceBank = findViewById(R.id.spinnerSource).asInstanceOf[Spinner]
private lazy val spinner_targetBank = findViewById(R.id.spinnerDestination).asInstanceOf[Spinner]
private lazy val myApplication = getApplication.asInstanceOf[MyApplication]
private var ignoreTimeChange = false
override protected def onCreate(savedInstanceState: Bundle) = {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
timePicker.setIs24HourView(true)
initializeSpinner(spinner_sourceBank)
initializeSpinner(spinner_targetBank)
}
private def initializeSpinner(spinner: Spinner) = {
val adapter = ArrayAdapter.createFromResource(this,R.array.banks,R.layout.spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.setAdapter(adapter)
}
def reset(w: View) = {
timePicker.setCurrentHour(13)
timePicker.setCurrentMinute(00)
spinner_sourceBank.setSelection(0)
spinner_targetBank.setSelection(0)
}
def submit(w: View) = {
if (spinner_sourceBank.getSelectedItemPosition == 0 || spinner_targetBank.getSelectedItemPosition == 0) {
new AlertDialog.Builder(this).setPositiveButton("OK",new OnClickListener {
override def onClick(dialog: DialogInterface,which: Int) { dialog dismiss }
}).setMessage(getString(R.string.alert_title)).setTitle("Alert Dialog").setIcon(android.R.drawable.ic_dialog_alert).create.show
} else manageFragments(sourceBank,targetBank)
}
def manageFragments(sourceBank: String,targetBank: String) = {
val fragmentTransaction = getSupportFragmentManager.beginTransaction
if (targetBank == sourceBank) myApplication.setCurrentFragment(MyApplication.NOW)
else myApplication.setCurrentFragment(MyApplication.FIRST_SESSION)
fragmentTransaction.replace(R.id.fragment_container,myApplication.getCurrentFragment)
fragmentTransaction.commit
}
override def onCreateOptionsMenu(menu: Menu): Boolean = { getMenuInflater.inflate(R.menu.activity_main,menu); true }
}
我可以在移动设备上测试我的应用程序,它运行得很好.我也可以编写我的代码,但eclipse的行为就像在旧计算机上运行一样 – 切换选项卡花费了大量时间,因此构建和部署.
最佳答案
将这些添加到eclipse.ini(或编辑,如果存在),因为更适合Scala开发:
它们应该出现在eclipse条目下面,例如-vm:
原文链接:https://www.f2er.com/android/430758.html它们应该出现在eclipse条目下面,例如-vm:
-Xverify:none
-Dosgi.requiredJavaVersion=1.6
-Xms900m
-Xmx900m
-Xss2m
-XX:PermSize=256m
-XX:MaxPermSize=256m
-XX:MaxGCPauseMillis=20
-XX:MaxHeapFreeRatio=70
-XX:+ScavengeBeforeFullGC
-XX:+UseParallelOldGC
-XX:+UnlockExperimentalVMOptions
-XX:+UseFastAccessorMethods
-XX:ReservedCodeCacheSize=128m
-XX:+TieredCompilation
-XX:+AggressiveOpts