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

西安网站建设制作win10优化软件哪个好

西安网站建设制作,win10优化软件哪个好,国外网站界面,如何将优酷视频放到自己的网站内存优化,内存抖动和内存泄漏。(东方头条) 这道题想考察什么? 内存抖动与内存泄漏是什么,会对程序造成什么影响?为什么会产生这些影响? 考察的知识点 内存优化、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.tj-hxxt.cn/news/120583.html

相关文章:

  • 怎么样自己做最简单的网站手机搭建网站
  • 二手交易平台网站的建设优化seo排名
  • 青创云网站建设seo实战技巧
  • 容桂网站制作值得信赖自己有域名怎么建网站
  • 做神马网站优化快速排搜索引擎有哪些软件
  • 双柏县住房和城乡建设局网站广州 关于进一步优化
  • 公司建网站有何意义怎样推广自己的app
  • 日本女做网站模板网站建设开发
  • 商洛网站开发公司近期出现的病毒叫什么
  • 设计公司做网站价格建立企业网站步骤
  • server 2012 做网站专业制作网站的公司哪家好
  • 西安网站建设优化服务公司网站seo查询工具
  • 新疆网站新疆网页设计建设怎么开网站平台
  • 文化管 网站建设规划游戏推广员到底犯不犯法
  • 饰品企业网站建设nba排名最新赛程
  • 营销型网站建设与网页设计seo快速排名系统
  • 合肥市住房和城乡建设厅网站曼联官方发文
  • 成都公司注册网项目优化seo
  • 营销网站建设需要多少钱google搜索引擎入口google
  • 新建定制网站费用百度推广客户端mac版
  • 亳州市网站建设网络营销软文范文
  • 网站运营需要黄页网推广服务
  • 宁波市城乡建设委员会网站项目推广方式有哪些
  • 政府网站改版建设报告2022今日最新军事新闻
  • 自己做装修网站需要多少钱网站运营包括哪些内容
  • 企业推广网站网站关键词优化教程
  • 做装饰公司网站6弹窗广告最多的网站
  • 建设银行的英语网站首页推广文章的步骤
  • 做网站多久徐州关键词优化平台
  • 网站的简介怎么在后台炒做软件推广接单平台