StackOverflowError

Android使用ListView时出现StackOverflowError 产生的原因和解决方法

╄→гoц情女王★ 提交于 2019-12-17 16:52:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 昨天用ListView写的一个 类似微博动态 页面,在Android4.4上运行良好,在一款2.3系统的手机上运行崩溃,看log是java.lang.StackOverflowError(堆栈溢出)。 Android SDK 场景描述为: 由于栈调用的层次太多,超过了虚拟器dalvik的最大限制(作为一个虚拟器参数,可定制)导致的。当程序编写错误导致无限递归调用时会触发,此外程序正确但是递归调用的层次过深也会触发。 Google后发现在ListView中造成这种情况的原因是布局嵌套太多造成的,所以我就看我的ListView Item 布局,去掉一、两层后发现还是崩溃,最后就写一个控件,还是崩溃,这样之后我就觉得应该不是ListView中Item的问题,然后我就看ListView所在页面的布局,其父布局为LinearLayout线性布局嵌套,然后果断去掉一层父布局,结果ok。 最后提醒下开发人员, 解决嵌套过深的基本思路是在实现同样的效果的前提下减少界面的layout深度。具体的方法有: 1) 多用RelativeLayout的各种布局属性来完成布局,而避免过多使用嵌套layout来实现。 2) 占位或填充剩余空间的元素多用View,避免使用layout等viewGroup。 总结下,从实际的数据来看

Java内存溢出详解+Tomcat配置文件中JVM的启动参数设置

笑着哭i 提交于 2019-11-30 05:47:21
一、常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。 在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。 解决方法:手动设置JVM Heap(堆)的大小。 2. java.lang.OutOfMemoryError: PermGen space ---- PermGen space溢出。 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。 为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信 息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen