聊城手机网站建设多少钱曲阜网站建设哪家便宜

news/2025/9/29 1:33:11/文章来源:
聊城手机网站建设多少钱,曲阜网站建设哪家便宜,苏州优化网站排名,福建省住房和城乡建设部网站一、 Android的内存机制 Android的程序由Java语言编写#xff0c;所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存#xff0c;所有对象在java堆内分配空间#xff1b;然而对象的释放是由垃圾回收器来完成的。C#xff0f;C中的内存机制是“谁污染…一、 Android的内存机制     Android的程序由Java语言编写所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存所有对象在java堆内分配空间然而对象的释放是由垃圾回收器来完成的。CC中的内存机制是“谁污染谁治理”java的就比较人性化了给我们请了一个专门的清洁工GC。     那么GC怎么能够确认某一个对象是不是已经被废弃了呢Java采用了有向图的原理。Java将引用关系考虑为图的有向边有向边从引用者指向引用对象。线程对象可以作为有向图的起始顶点该图就是从起始顶点开始的一棵树根顶点可以到达的对象都是有效对象GC不会回收这些对象。如果某个对象 (连通子图)与这个根顶点不可达(注意该图为有向图)那么我们认为这个(这些)对象不再被引用可以被GC回收。 二、Android的内存溢出     Android的内存溢出是如何发生的?     Android的虚拟机是基于寄存器的Dalvik它的最大堆大小一般是16M有的机器为24M。因此我们所能利用的内存空间是有限的。如果我们的内存占用超过了一定的水平就会出现OutOfMemory的错误。 为什么会出现内存不够用的情况呢我想原因主要有两个 由于我们程序的失误长期保持某些资源如Context的引用造成内存泄露资源造成得不到释放。保存了多个耗用内存过大的对象如Bitmap造成内存超出限制。三、万恶的static     static是Java中的一个关键字当用它来修饰成员变量时那么该变量就属于该类而不是该类的实例。所以用static修饰的变量它的生命周期是很长的如果用它来引用一些资源耗费过多的实例Context的情况最多这时就要谨慎对待了。 public class ClassName {       private static Context mContext;       //省略  }    以上的代码是很危险的如果将Activity赋值到么mContext的话。那么即使该Activity已经onDestroy但是由于仍有对象保存它的引用因此该Activity依然不会被释放。     我们举Android文档中的一个例子。 private static Drawable sBackground;        Override   protected void onCreate(Bundle state) {     super.onCreate(state);          TextView label  new TextView(this);     label.setText(Leaks are bad);          if (sBackground  null) {       sBackground  getDrawable(R.drawable.large_bitmap);     }     label.setBackgroundDrawable(sBackground);          setContentView(label);   }      sBackground, 是一个静态的变量但是我们发现我们并没有显式的保存Contex的引用但是当Drawable与View连接之后Drawable就将View设置为一个回调由于View中是包含Context的引用的所以实际上我们依然保存了Context的引用。这个引用链如下     Drawable-TextView-Context     所以最终该Context也没有得到释放发生了内存泄露。     如何才能有效的避免这种引用的发生呢     第一应该尽量避免static成员变量引用资源耗费过多的实例比如Context。     第二、Context尽量使用Application Context因为Application的Context的生命周期比较长引用它不会出现内存泄露的问题。     第三、使用WeakReference代替强引用。比如可以使用WeakReferenceContext mContextRef;     该部分的详细内容也可以参考Android文档中Article部分。 四、都是线程惹的祸     线程也是造成内存泄露的一个重要的源头。线程产生内存泄露的主要原因在于线程生命周期的不可控。我们来考虑下面一段代码。 public class MyActivity extends Activity {      Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          new MyThread().start();      }        private class MyThread extends Thread{          Override          public void run() {              super.run();              //do somthing          }      }  }        这段代码很平常也很简单是我们经常使用的形式。我们思考一个问题假设MyThread的run函数是一个很费时的操作当我们开启该线程后将设备的横屏变为了竖屏一般情况下当屏幕转换时会重新创建Activity按照我们的想法老的Activity应该会被销毁才对然而事实上并非如此。     由于我们的线程是Activity的内部类所以MyThread中保存了Activity的一个引用当MyThread的run函数没有结束时MyThread是不会被销毁的因此它所引用的老的Activity也不会被销毁因此就出现了内存泄露的问题。         有些人喜欢用Android提供的AsyncTask但事实上AsyncTask的问题更加严重Thread只有在run函数不结束时才出现这种内存泄露问题然而AsyncTask内部的实现机制是运用了ThreadPoolExcutor,该类产生的Thread对象的生命周期是不确定的是应用程序无法控制的因此如果AsyncTask作为Activity的内部类就更容易出现内存泄露的问题。     这种线程导致的内存泄露问题应该如何解决呢     第一、将线程的内部类改为静态内部类。     第二、在线程内部采用弱引用保存Context引用。     解决的模型如下 public abstract class WeakAsyncTaskParams, Progress, Result, WeakTarget extends          AsyncTaskParams, Progress, Result {      protected WeakReferenceWeakTarget mTarget;        public WeakAsyncTask(WeakTarget target) {          mTarget  new WeakReferenceWeakTarget(target);      }              Override      protected final void onPreExecute() {          final WeakTarget target  mTarget.get();          if (target ! null) {              this.onPreExecute(target);          }      }              Override      protected final Result doInBackground(Params... params) {          final WeakTarget target  mTarget.get();          if (target ! null) {              return this.doInBackground(target, params);          } else {              return null;          }      }              Override      protected final void onPostExecute(Result result) {          final WeakTarget target  mTarget.get();          if (target ! null) {              this.onPostExecute(target, result);          }      }        protected void onPreExecute(WeakTarget target) {          // No default action      }        protected abstract Result doInBackground(WeakTarget target, Params... params);        protected void onPostExecute(WeakTarget target, Result result) {          // No default action      }  }      事实上线程的问题并不仅仅在于内存泄露还会带来一些灾难性的问题。由于本文讨论的是内存问题所以在此不做讨论。转载于:https://www.cnblogs.com/wzfyang/p/3300839.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SimpleFOC】区分BLDC霍尔安装间隔60还是120

02 霍尔安装角度辨别当我们拿到一个新的三相直流无刷电机时,可以通过测量三个霍尔信号,然后分析它们之间的关系即可知道霍尔的安装角度间隔是60度电角度还是120度电角度。那么,60度电角度跟120度电角度在三路霍尔波…

如何经营一个购物网站网站流量所需的成本.

前言 本节内容会着重介绍jenkins持续集成开发工具的一些常用插件安装以及全局工具的配置安装,并说明其主要作用。在开始插件和工具安装之前,我们要保证可以正常访问网络,并且使用国内的插件更新地址,便于插件的正常安装。官方的地…

4 个支持在线编辑的PPT模板网站,不用下载软件!

​ 4 个支持在线编辑的 PPT 模板网站,不用下载软件 加班到晚上 8 点,领导突然让你明天一早交一份项目汇报 PPT,电脑里没装 PPT 软件,下载安装又要花半个多小时?别慌,这 4 个支持在线编辑的 PPT 模板网站,能帮你…

[GenAI] 提示词工程

RCT构词法 提示词工程是一门专注于 LLM 输入的学科,主要目的是以尽可能程序化的方式生成理想的输出。角色(Role) 上下文(Context) 任务(Task)上下文 在为 LLM 编写输入文本的时候,需要尽可能详细的描述上下文。…

郑州个人做网站黑龙江省建设安全监督网站

JDK 自带排序(Arrays.sort(数组名))与自行编写的降序 jdk 自带的排序 Arrays.sort(数组名) 只能进行升序排列 可以与自己写的降序 配合使用 import java.util.Arrays;public class Test1 {//jdk 自带升序public static void m1(int [] arr1) {Arrays.sor…

做网站的厉害还是黑网站的厉害wordpress房产插件

SD卡数据的写入或者读取,需要将数据写入SDIO的FIFO寄存器,然后通过FIFO寄存器进行数据的发送。FIFO寄存器是32位的寄存器,操作 SDIO_FIFO(不论读出还是写入)必须是以 4 字节对齐的内存进行操作,否则将导致出…

关于第一次使用latex写文章

关于第一次使用latex写文章一次简单的latex公式输出 整体的代码\usepackage{amsmath, bookmark,amsthm, amssymb, graphicx} \usepackage{ctex} \usepackage{geometry} \geometry{a4paper, scale=0.9} \title{Homework…

东莞勒流网站制作wordpress 美观插件

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)&#xff0c;而函数调用的格式如下&#xff1a; $(<function> <arguments>) 或者是…

设计好的网站推荐网页制作与维护

点击查看专栏目录 文章目录 一、qca-logger插件介绍二、QCA下载三、文件分析四、pro文件五、编译实践5.1 windows下编译5.2 linux下编译5.3 macos下编译一、qca-logger插件介绍 QCA::Logger 是 Qt Cryptographic Architecture (QCA) 库中的一个类,它提供了一个简单而灵活的日志…

相册网站开发昌平网站开发公司

强制类型转换形式&#xff1a;(类型说明符) (表达式)举例说明&#xff1a;1) int a;a (int)1.9;2)char *b;int *p;p (int *) b; //将b的值强制转换为指向整型数据的指针类型&#xff0c;后赋给p注示&#xff1a;类型说明符和表达式都必须加括号&#xff0c;表达式为单个变量可…

建设局工程网站成功的网络营销案例及分析

随着电子商务的繁荣和移动支付技术的发展&#xff0c;网络支付已成为全球消费者日常生活中不可或缺的一部分。然而&#xff0c;这种便捷的支付方式也带来了许多安全风险&#xff0c;这些风险可能威胁到用户的财务安全和个人隐私。本文将深入探讨网络支付面临的主要安全风险&…

res := model.UserConsume{}与res := model.UserConsume{}区别

在Go语言中,res := &model.UserConsume{} 与 res := model.UserConsume{} 的主要区别在于变量的类型和内存分配方式: 类型差异res := &model.UserConsume{}:创建一个 *model.UserConsume类型的变量(指针类…

学校校园网站网站管理员中心

Function.apply(obj,args)方法能接收两个参数&#xff0c;简单说apply方法作用就是给类或方法中的this赋值。所以学会这个方法首先要知道this的作用。(this的用法可以看一下这个链接&#xff1a;http://www.cjavapy.com/article/8/ )obj&#xff1a;这个对象将代替Function类里…

图论010203

图论01&02&03代码问题很多问题都是由母问题衍生出来的,所以核心工具函数甚至不需要怎么变化,只需要在调用函数之前增加判断语句即可,妙哉~ 淹没孤岛的核心是 “先区分非孤岛和孤岛”:边缘相连的是非孤岛,…

搜索引擎网站推广jsp网站开发文献

会一直持续更新。。。 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时…

西安网站设计开发前端开发培训费用

一、基本概念 与MVC模式不同&#xff0c;MV视图架构中没有包含一个完全分离的组件来处理与用户的交互。 一般地&#xff0c;视图用来将模型中的数据显示给用户&#xff0c;也用来处理用户的输入。为了获得更高的灵活性&#xff0c;交互可以由委托来执行。 这些组件提供了输入…

南通 网站优化济南mip网站建设

EtherCAT主站SOEM -- 37 -- win-soem-win10及win11系统QT-SOEM-1个电机转圈圈-周期同步速度模式(CSV模式) 0 QT-SOEM及STM32F767-SOEM视频欣赏及源代码链接:0.1 Linux--Ubuntu系统之 QT-SOEM博客、视频欣赏及源代码链接0.2 STM32F767-SOEM 博客、视频欣赏及源代码链接0.3 wi…

郑州知名做网站公司网络推广的方法和技巧可以学吗

SWOT分析法&#xff1a;一个综合的方法&#xff0c;可以分析、评估并提出决策建议&#xff0c;需要结合内部因素分析、外部因素分析、综合评价&#xff0c;和辅助决策等一系列方法才能完成鱼骨图分析法&#xff1a;层次分析法的图形展示5M因素分析法&#xff1a;分析法&#xf…

北京微信网站制作费用订阅号可以建设微网站

设想一下&#xff0c;如果待排元素不是一个简单的整数&#xff0c;而是一个庞大的结构体&#xff0c;移动元素的时间不能忽略不计。 元素需要频繁互换&#xff0c;那么移动这些元素的时间将会非常长久&#xff0c;效率很低 typedef very_large_item {int comparable;Tp very_…