1. SOF (堆栈溢出 StackOverflow)

StackOverflowError 的定义: 当应用程序递归太深而发生堆栈溢出时,抛出该错误。
因为栈一般默认为1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。

栈溢出的原因:

  • 递归调用
  • 大量循环或死循环
  • 全局变量是否过多数组、List、map数据过大

2. Android的OOM(Out Of Memory)

当内存占有量超过了虚拟机的分配的最大值时就会产生内存溢出(VM里面分配不出更多的page)。

一般出现情况:

  • 加载的图片太多或图片过大时
  • 分配特大的数组
  • 内存相应资源过多没有来不及释放。

解决方法:

  1. 在内存引用上做处理
    软引用是主要用于内存敏感的高速缓存。在jvm报告内存不足之前会清除所有的软引用,这样以来gc就有可能收集软可及的对象,可能解决内存吃紧问题,避免内存溢出。什么时候会被收集取决于gc的算法和gc运行时可用内存的大小。
  2. 对图片做边界压缩,配合软引用使用
  3. 显示的调用GC来回收内存
if(bitmapObject.isRecycled()==false) //如果没有回收   bitmapObject.recycle();
  1. 优化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);
  1. 用LruCache 和 AsyncTask<>解决
    从cache中去取Bitmap,如果取到Bitmap,就直接把这个Bitmap设置到ImageView上面。 如果缓存中不存在,那么启动一个task去加载(可能从文件来,也可能从网络)。

Java——SOF 与 OOM相关推荐

  1. Java内存溢出(OOM)分析

    当JVM内存不足时,会抛出java.lang.OutOfMemoryError. 主要的OOM类型右: Java heap space:堆空间不足 GC overhead limit exceeded ...

  2. Java内存溢出(OOM)异常完全指南

    原文:http://luecsc.blog.51cto.com/2219432/1948800 这也许是目前最为完整的Java OOM异常的解决指南. 1.Java.lang.OutOfMemoryE ...

  3. linux java性能监控工具_性能监控工具以及java堆分析OOM

    一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每个终 ...

  4. Java内存溢出OOM之dump分析

    目录 内存泄露 内存溢出 1.Java堆内存异常 报错方式 原因 2.Java栈内存异常 报错方式 原因 3.方法区内存异常 报错方式 原因 解决思路 生成dump文件三种方式 dump生成 jvis ...

  5. JAVA堆溢出OOM场景模拟及排除过程

    模拟过程 加参数定义最大堆空间和最小堆空间 -Xms20m -Xmx20m 加参数在堆溢出dump出当前的堆快照 -XX:+HeapDumpOnOutOfMemoryError 上代码 import ...

  6. Java 常见的OOM类型总结

    文章目录 StackOverflowError Java heap space GC overhead limit exceeded Metaspace StackOverflowError 说明:栈 ...

  7. Java内存溢出OOM使用Mat分析

    示例 package com.rumenz;import java.util.ArrayList; import java.util.List;public class OutOfMemory {pu ...

  8. 42、Java服务内存OOM原因分析

    1.出现问题的可能原因 对于应用来说内存分配太少 对象创建太多,又没有释放,造成内存泄漏严重,导致内存耗尽 申请太多的系统资源,系统资源耗尽.例如:不断创建线程,不断发起网络连接 2.如何定位问题(可 ...

  9. java处理oom_java处理OOM和SOF

    一.OOM 内存溢出,是指程序在申请内存时,没有足够的空间供其使用,出现了Out Of Memory,也就是要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出. 内存泄露会导致内存溢出, ...

  10. java from space to space_快速定位Java 内存OOM的问题

    Java服务出现了OOM(Out Of Memory)问题,总结了一些相对通用的方案,希望能帮助到Java技术栈的同学. 某Java服务(假设PID=10765)出现了OOM,最常见的原因为: 有可能 ...

最新文章

  1. idea项目怎么jdk和scala同时显示在External Libraries下?
  2. MySQL中show语法使用总结
  3. linux 添加banner,OpenWrt:Linux下生成banner
  4. 使用 Advanced Installer 打包 一键安装Web应用程序
  5. 用iso镜像配置本地yum源
  6. leetcode python3 简单题26. Remove Duplicates from Sorted Array
  7. [Silverlight]如何创建超链接
  8. 用Python绘制杨紫作品集动态二维码
  9. H5 - 手机 APP 接入支付宝、微信、银联支付流程汇总
  10. Compile fails with 3.5 framework but succeeds with 4.0
  11. JS 格林威治时间格式(GMT)与普通时间格式的互相转换
  12. 电视不正常Android镜像投屏,爱奇艺乐播投屏
  13. kali下使用phpstudy
  14. Rxjava+retrofit+okHttp+mvp网络请求数据
  15. 踩坑 微信小程序开发mpvue使用iconfont,顺便解决偶现图标显示不正确
  16. 0基础学编程需要哪些基础?
  17. 研制过程评审活动(二)方案阶段
  18. MySQL_2020.11.05
  19. sci论文宝典,科研入门,如何进行科研
  20. 计算机序列类型和字典试题,计算机考试试题和资料

热门文章

  1. Android基础入门教程——2.4.2 ListView简单使用
  2. 用友T+改成IIS-网站报500.19错误代码0x8007000d问题解决
  3. RHCEansible静态主机清单
  4. 博弈论战略式表述和扩展式表述
  5. C语言程序设计现代方法第二版,第八章课后编程题——第9题生成贯穿10乘10字符组的随机步法
  6. Github没有Download Zip(下载zip)的绿色选项是因为所在的是一个子目录
  7. 养猫日记之如何获得一只喵
  8. Kali利用metasploit 生成后门程序,操作目标主机cmd
  9. minecraft图标文件_如何在任何操作系统上查找Minecraft保存的游戏文件夹
  10. 05_经典电影台词(一)