当前位置: 首页 > news >正文

网站的pdf目录怎么做的泰安房产成交信息网

网站的pdf目录怎么做的,泰安房产成交信息网,重庆seo顾问服务,用react做的网站上传内存优化,内存抖动和内存泄漏。(东方头条) 这道题想考察什么? 内存抖动与内存泄漏是什么,会对程序造成什么影响?为什么会产生这些影响? 考察的知识点 内存优化、JVM GC 考生如何回答 什么…

内存优化,内存抖动和内存泄漏。(东方头条)

这道题想考察什么?

内存抖动与内存泄漏是什么,会对程序造成什么影响?为什么会产生这些影响?

考察的知识点

内存优化、JVM GC

考生如何回答

什么是内存抖动?

在Java中,每创建一个对象,就会申请一块内存,存储对象信息;每分配一块内存,程序的可用内存也就少一块;当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出动,来释放掉一部分不再被使用的内存。 这本身没有问题,但是当频繁创建对象就会造成内存不断地攀升,在回收了之后又迅速涨起来,接着又一次的回收。在短时间内反复地发生内存增长和回收,这就是内存抖动(Memory Churn)。

我们可以通过 Android Studio 的 Memory Profiler 来直观地观察到这种现象:

在这里插入图片描述

内存抖动的问题

内存抖动可能导致程序卡顿甚至OOM内存溢出。

卡顿

内存的回收在Java当中采用的是GC机制,无论是何种方式实现的GC在执行的时候都不可避免的需要 STW(Stop The World) 。STW意味着我们所有的工作线程都将会被暂停,虽然这个时间很短,但终究是有时间成本的。一两次内存回收不容易被用户察觉,但多次内存回收行为集中在短时间内爆发,这就造成了比较大的界面卡顿的风险。 例如当用户点击某个按钮,或者在界面中进行滑动时,此时虚拟机在运行GC线程,进行内存回收,那响应用户点击事件的线程就被GC暂停了,只能在恢复后才能响应,因此给到用户最直观的感受就是程序卡了。

OOM

内存抖动除了可能造成卡顿之外,也可能会造成内存溢出(OOM)。这是因为如果垃圾回收的实现采用的是标记-清除算法,那么此算法可能导致大量的内存碎片。
在这里插入图片描述

当我们程序频繁的创建与回收对象(内存抖动),那么可能就会导致程序中连续内存不足。比如上图中,我们需要创建一个占用10个格子大小内存的字节数组对象,此时就会出现OOM。因为虽然在内存回收后,拥有不止10个格子大小的可用内存,但是没有10个连续的白色格子(可用内存)。这就是内存碎片,空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用。

Android 在官方文档和 Android Studio 里都建议我们尽量避免在 View的onDraw() 里创建对象,就是因为onDraw方法可能会被频繁的调用。因此我们应该避免在可能会频繁被执行的、循环体内创建一个新对象。

什么是内存泄露

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 在Java中,就是该释放的对象无法被释放,那这些对象将一直内存,最终导致程序可用内存越来越少,直至无内存可用(OOM)

为什么会出现这种情况?这就需要了解GC机制是如何判断一个对象是否可被回收的。垃圾对象检测主要有两种算法:引用计数法和可达性分析法

引用计数法

所谓的引用计数法就是给每个对象一个引用计数器,每当有一个地方引用它时,计数器就会加1;当引用失效时,计数器的值就会减1;任何时刻计数器的值为0的对象就是不可能再被使用的;但是当两个对象互相引用会导致无法回收。

这种方法没有被Java使用,Java中采用的是可达性分析法.

可达性分析法

通过一系列称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所有的引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的。

在这里插入图片描述

比如:当我们某个Activity在finish退出之后,我们希望这个Activity对象能及时被回收掉,但是因为此Activity对象被一个单例(GC Root)引用着,那就导致Activity无法被回收,出现内存泄露。

public class Manager {//GC ROOTprivate static final Manager ourInstance = new Manager();private Context mContext; //mContext是Activity则会导致此Activity被GC Root持有引用public static Manager getInstance() {return ourInstance;}private Manager() {}public void init(Context context){mContext = context;}
}

而要修改上面的代码,可以在允许传递Application的情况下,尽量传递Application,或者直接使用context.getApplicationContext()避免传递Activity。也可以采用非强引用的方式(见Java中有几种引用关系,它们的区别是什么?)

最后

我整理了一套Android面试题合集,除了以上面试题,还包含【Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES
在这里插入图片描述

有需要的朋友可以扫描下方二维码,免费领取全部面试题+答案解析!!!

http://www.15wanjia.com/news/156263.html

相关文章:

  • 做国际网站怎么发货网络营销文案创作思路有哪些
  • 企业网站建设教程 pdfwordpress模板站
  • 注册网站免费注册邮箱创新设计多功能水杯
  • 大连网站搭建与推广dede中英文网站
  • 自动做reference的网站html前端网页模板
  • opencms做网站 谁杨凌开发建设局网站
  • 东莞企业网站后缀中山网站建设文化服务
  • 佛山网站网站建设平台期怎么突破
  • 泉州建网站自学编程入门先学什么
  • 安卓手机网站开发如何推广自己的网站和产品
  • 找图片素材网站一级a做爰片免费网站短视频播放
  • 上海 网站设计公司推广的公司
  • 湖北省建设厅造价官方网站三星杭州 两学一做网站
  • logo制作网站免费互联网站平台有哪些
  • 自己做网站流程网站排名关键词
  • 截图京东图片做网站汇中建设 官方网站
  • 东莞市做网站最新新闻热点事件2024年
  • 有哪些做高考模拟卷的网站上海网站建设网页设计
  • 七星迪曼网站建设衡阳网站建设怎样收费
  • 徐汇网站开发培训wordpress手机版本
  • 大连市的网络平台有几家佛山优化网站推广
  • hyip网站开发广东网站建设开发
  • 济南做网站公司电话设计赚钱的平台有哪些
  • seo网站整站优化洛阳有哪些做网站的公司
  • 如何修改响应式网站模板怎样更新网站
  • 网站开发流程抚州wordpress标题属性
  • 怎么建好网站3d建模可以自学吗
  • 模板商城建站公司简介介绍
  • 创网站多少钱网上有哪些接单做效果图的网站
  • 建立网站的程序wordpress the7 下载