Java——SOF 与 OOM
1. SOF (堆栈溢出 StackOverflow)
StackOverflowError 的定义: 当应用程序递归太深而发生堆栈溢出时,抛出该错误。
因为栈一般默认为1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。
栈溢出的原因:
- 递归调用
- 大量循环或死循环
- 全局变量是否过多数组、List、map数据过大
2. Android的OOM(Out Of Memory)
当内存占有量超过了虚拟机的分配的最大值时就会产生内存溢出(VM里面分配不出更多的page)。
一般出现情况:
- 加载的图片太多或图片过大时
- 分配特大的数组
- 内存相应资源过多没有来不及释放。
解决方法:
- 在内存引用上做处理
软引用是主要用于内存敏感的高速缓存。在jvm报告内存不足之前会清除所有的软引用,这样以来gc就有可能收集软可及的对象,可能解决内存吃紧问题,避免内存溢出。什么时候会被收集取决于gc的算法和gc运行时可用内存的大小。 - 对图片做边界压缩,配合软引用使用
- 显示的调用GC来回收内存
if(bitmapObject.isRecycled()==false) //如果没有回收 bitmapObject.recycle();
- 优化Dalvik虚拟机的堆内存分配
1.增强程序堆内存的处理效率
//在程序onCreate时就可以调用 即可
private final static floatTARGET_HEAP_UTILIZATION = 0.75f;
VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);
2 .设置堆内存的大小
//在程序onCreate时就可以调用 即可
private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ; //设置最小heap内存为6MB大小
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
- 用LruCache 和 AsyncTask<>解决
从cache中去取Bitmap,如果取到Bitmap,就直接把这个Bitmap设置到ImageView上面。 如果缓存中不存在,那么启动一个task去加载(可能从文件来,也可能从网络)。
Java——SOF 与 OOM相关推荐
- Java内存溢出(OOM)分析
当JVM内存不足时,会抛出java.lang.OutOfMemoryError. 主要的OOM类型右: Java heap space:堆空间不足 GC overhead limit exceeded ...
- Java内存溢出(OOM)异常完全指南
原文:http://luecsc.blog.51cto.com/2219432/1948800 这也许是目前最为完整的Java OOM异常的解决指南. 1.Java.lang.OutOfMemoryE ...
- linux java性能监控工具_性能监控工具以及java堆分析OOM
一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每个终 ...
- Java内存溢出OOM之dump分析
目录 内存泄露 内存溢出 1.Java堆内存异常 报错方式 原因 2.Java栈内存异常 报错方式 原因 3.方法区内存异常 报错方式 原因 解决思路 生成dump文件三种方式 dump生成 jvis ...
- JAVA堆溢出OOM场景模拟及排除过程
模拟过程 加参数定义最大堆空间和最小堆空间 -Xms20m -Xmx20m 加参数在堆溢出dump出当前的堆快照 -XX:+HeapDumpOnOutOfMemoryError 上代码 import ...
- Java 常见的OOM类型总结
文章目录 StackOverflowError Java heap space GC overhead limit exceeded Metaspace StackOverflowError 说明:栈 ...
- Java内存溢出OOM使用Mat分析
示例 package com.rumenz;import java.util.ArrayList; import java.util.List;public class OutOfMemory {pu ...
- 42、Java服务内存OOM原因分析
1.出现问题的可能原因 对于应用来说内存分配太少 对象创建太多,又没有释放,造成内存泄漏严重,导致内存耗尽 申请太多的系统资源,系统资源耗尽.例如:不断创建线程,不断发起网络连接 2.如何定位问题(可 ...
- java处理oom_java处理OOM和SOF
一.OOM 内存溢出,是指程序在申请内存时,没有足够的空间供其使用,出现了Out Of Memory,也就是要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出. 内存泄露会导致内存溢出, ...
- java from space to space_快速定位Java 内存OOM的问题
Java服务出现了OOM(Out Of Memory)问题,总结了一些相对通用的方案,希望能帮助到Java技术栈的同学. 某Java服务(假设PID=10765)出现了OOM,最常见的原因为: 有可能 ...
最新文章
- idea项目怎么jdk和scala同时显示在External Libraries下?
- MySQL中show语法使用总结
- linux 添加banner,OpenWrt:Linux下生成banner
- 使用 Advanced Installer 打包 一键安装Web应用程序
- 用iso镜像配置本地yum源
- leetcode python3 简单题26. Remove Duplicates from Sorted Array
- [Silverlight]如何创建超链接
- 用Python绘制杨紫作品集动态二维码
- H5 - 手机 APP 接入支付宝、微信、银联支付流程汇总
- Compile fails with 3.5 framework but succeeds with 4.0
- JS 格林威治时间格式(GMT)与普通时间格式的互相转换
- 电视不正常Android镜像投屏,爱奇艺乐播投屏
- kali下使用phpstudy
- Rxjava+retrofit+okHttp+mvp网络请求数据
- 踩坑 微信小程序开发mpvue使用iconfont,顺便解决偶现图标显示不正确
- 0基础学编程需要哪些基础?
- 研制过程评审活动(二)方案阶段
- MySQL_2020.11.05
- sci论文宝典,科研入门,如何进行科研
- 计算机序列类型和字典试题,计算机考试试题和资料
热门文章
- Android基础入门教程——2.4.2 ListView简单使用
- 用友T+改成IIS-网站报500.19错误代码0x8007000d问题解决
- RHCEansible静态主机清单
- 博弈论战略式表述和扩展式表述
- C语言程序设计现代方法第二版,第八章课后编程题——第9题生成贯穿10乘10字符组的随机步法
- Github没有Download Zip(下载zip)的绿色选项是因为所在的是一个子目录
- 养猫日记之如何获得一只喵
- Kali利用metasploit 生成后门程序,操作目标主机cmd
- minecraft图标文件_如何在任何操作系统上查找Minecraft保存的游戏文件夹
- 05_经典电影台词(一)