读书笔记-内存初始化和清理


                                    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


        在Java开发中,对象创建、数据关系、垃圾回收始终是不变的话题,今天我们来简单说一下初始化和清理的问题。

        我们知道对象未被初始化即被使用,是要报错的,所以一般情况下在类构造方法里去赋初值,确保初始化工作的完成。关于构造方法,我们可以使用不同参数类型和数目的构造器。

        this关键字代替了对象,以调用方法,在内部类里面十分有用,可以避免建造多余对象;另外一方面在一个构造器内调用另一个,可以避免重复代码。static方法内部不能调用非静态方法和变量,不能使用this关键字。

        在Java中有一个finalize方法,在对象内部都可以重载,一旦垃圾回收器准备好释放对象所占用的内存空间,首先调用此方法,然后才进行清理工作;但对象并不一定会被回收,所以finalize即使被执行,也是没用的。但是程序执行结束,退出,那么资源才会全部交还它们操作系统。它不是进行清理的合适场所,最好手动进行清理工作。

        一般情况下,Java工作时,一面回收空间,一面使堆中的对象紧凑排列,这样“堆指针”就可以很容易移动到更靠近传送带的开始处,被使用。Java采用一种自适应的垃圾回收技术。一种名为停止-复制(stop-and-copy),先暂停程序的运行(非后台运行),然后把所有存活的对象从当前堆复制到另一个堆,没有被复制的全部都是垃圾。当然在搬运过程中,所有指向它的引用都被修正。这种回收呢,效率会比较低,因为两个堆要来回倒腾。某些虚拟机对此问题的处理方式是:按需从堆中分配几块较大的内存,动作发生在这些大块内存之间。

        另外,如果程序进入稳定状态后,垃圾产生会比较少,上述回收方法就比较浪费,Java虚拟机会进行检查,要是没有新垃圾产生,就转换到另一种工作模式(自适应),标记-清扫(mark-and-sweep),思路是:从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象,对设标记,全部设完,清理工作开始。在清理过程中,没有标记的对象将被释放。如果所有对象都很稳定,垃圾回收器的效率降低的话,就村切换到“标记-清扫”方式;同时如果堆空间出现很多碎片 ,就会切换回“停止-复制”方式,这样自适应的回收机制堪称完美!

        目前,Java虚拟机中有许多附加技术用以提升速度,尤其是与加载器操作有关,被称为“JIT”-Just In Time,把程序全部或部分翻译成本地机器码,程序运行速度因此得以提升。Android最新版也采用ADT,Ahead of Time,安装时即编译,借以来提升运行速度,我们很是期待。

        在类中初始化顺序,先执行static{}且仅一次,再执行静态变量、全局变量,然后是默认构造器


​以下是摘抄:

Android4.4提出新概念,Android Runtime,默认仍是Dalivk,但将代替它。

ART使用AOT进行处理(Ahead-Of-Time),并会在应用程序安装完毕时,进行预先的基础性编译作业,这就减去了JIT运行时的机器码转化时间,应用的启动和执行都会变得更加快速。


ART优点:
1、系统性能的显著提升。
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3、更长的电池续航能力。
4、支持更低的硬件。

ART缺点:
1、更大的存储空间占用,可能会增加10%-20%。
2、更长的应用安装时间。
总的来说ART的功效就是“空间换时间”。

ART相关源代码下载地址:(https://android.googlesource.com/platform/art/+archive/kitkat-release.tar.gz)

从源代码文件目录名称可以很清楚的了解各文件夹中相关文件的功能,我们最关心的主要有compiler、dex2oat、runtime三个文件夹:

compiler:主要负责Dalvik字节码到本地代码的转换,编译为libart-compiler.so

dex2oat :完成DEX文件到ELF文件转换。编译为dex2oat

runtime :Android ART运行时源代码,编译为libart.so

在应用安装时,installd通过dex2oat优化APK安装包classes.dex的Dalvik字节码为本地机器代码。整个优化为:

 

/



转载于:https://www.cnblogs.com/fengju/p/6174437.html

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

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

相关文章

1.1 Machine learning: what and why?

1. 基本概念 机器学习的种类:supervised learning / unsupervised learning / reinforcement learning. 2,有趣问题 这是supervised learning的training data的例子,左边是以非常直观的方式(图画)描述,右边是观察左图的特征&…

winform第三方控件wmp

用windows media player 制作一个简单的的音乐播放器。 先把播放器的属性设为null。 private void button5_Click(object sender, EventArgs e)//从本地添加歌曲按钮 {OpenFileDialog of new OpenFileDialog();//打开文件对话框of.Filter "(mp3,wav,mp4,mov,wmv,mpg)|*.…

服务器lunix系统开启多用户,Ubuntu 服务器设置软件多用户访问

django 学习第一天搭建环境目前django版本是1.10,我学习的基础教材是 Web Development with Django Cookbook, Second Edition 搭建好配置环境 ssh免认证登录 修改一下 ...sed实例精解--例说sed完整版

存储过程知识总结【一】

/**描述: 存储过程知识点总结,以Northwind数据库的Employees表为例*/ --1.没有参数的存储过程create procedure usp_NoParameterSelectasbegin select * from dbo.Employeesend GO --执行测试EXECUTE usp_NoParameterSelect GO--2.带参数的存…

1034. 有理数四则运算(20)

本题要求编写程序,计算2个有理数的和、差、积、商。输入格式:输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。输出格式&…

ADO.NET,浅显

ADO.NET 之非查询操作 ADO.net是c sharp中一种将数据库与软件连接的技术. 在用户来操作窗口,来对数据库进行更改. 非查询操作死代码 ; Using Data.SqlClient;//导入数据库客户端 string sql string.Format("增删改的sql语句,要操作的变量用占位符表示"); //如果用w…

ajax的学多久,ajax第二天学习

post方式发送请求要首先设置请求头(参数设置为ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")-->send中放入要发送的参数(keyvalue&keyvalue)-->发送数据(ajax.send(context))当xml作为载体的时候servlet中声明发送…

马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版

时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票。 Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式。 代码存在如下BU…

华为虚拟一键部署服务器,一键部署云服务器

一键部署云服务器 内容精选换一换SAP NetWeaver分布式部署如图1所示。该部署方式是由多个SAP实例组成,一个SAP实例是一组同时开始和结束的进程。在分布式系统中,所有实例都运行在独立的云服务器上,主要包括以下实例:ABAP Central …

ADO.NET多值查询

1,新控件,可以显示很多数据,视觉清晰.相当于表. listView,列表视图 添加与数据库相关的列名. SqlDataReader sdr cmd.ExecuteReader(); listView.Items.Clear();//避免数据重复 while(sdr.Read())//读所有行 {string a sdr["第一个列名"].ToString();ListviewIte…

1040. 有几个PAT(25

字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。现给定字符串,问一共可以形成多少个PAT?输入格式:输入只有一行,包含一个字符串…

我的世界服务器显示不出地图,为什么我的世界服务器地图加载不了

期中一段:java:751) ~[ahb.class:?]at net.minecraft.world.World.func_147439_a(World.java:677) ~[ahb.class:?]at com.tmtravlr.jaff.entities.EntityFish.isInTank(EntityFish.java:89) ~[EntityFish.class:?]at com.tmtravlr.jaff.entities.EntityFish.func…

dataGridview与下拉框高级绑定

//在dataGridView里批量显示所有数据string sql "select * from mingxing";SqlConnection con new SqlConnection(address);//今天所学,生成适配器工具sda,批量读取(读完)SqlDataAdapter sda new SqlDataAdapter(sql, con);//创建对象dt,可以理解为是客户端的一个…

1041. 考试座位号(15)

每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座…

前端学习(971):swiper插件使用

引入 2复制div部分 不要修改里面的文件 3复制css样式 4复制js 注意winows.addEventListener 加载后使用 5运行结果

登录的基本逻辑

登录的基本逻辑 1,验证账号密码的正确性 与数据库相匹配的代码 string sql "select count[*] from 表名 where pwd ‘’ and ac ‘’ "; //单值结果(0/1)判断是否正确,有一条结果返回。 using System.Data.SqlClient; public static string address “Data So…

ncm转MP3的工具

网易下载歌曲,发现带有.ncm的歌曲不能听,所以我查资料,怎么解决. 查到3种方式. 1,网页搜索F12 network,找到mp3的文件,右键播放. 2,将歌曲缓存,在网易设置,c盘找到缓存文件,有uc文件和连同的个2文件,uc改为mp3,再用网易打开,收藏歌单,下载. . . . 但前两种方式然并ruan. 3, htt…