- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 Android中获取各种服务是哪里来的
当app第一次加载时就开始注册了那些服务,具体来说就是在应用创建ContextImpl实例的时候调用了SystemServiceRegistry类来进行注册,其注册的服务(就是具体的相关的服务的实例)保存在HashMap的对象SYSTEM_SERVICE_FETCHERS中: private static final HashMap> SYSTEM_SERVICE_FETCHERS
2016-03-30 12:26:33 1810
原创 JVM之类加载机制
在上一篇文章中我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都要加载到虚拟机中之后才能运行和使用。而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化?这些都是本文所需要解决的问题! 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化最终形成了可以被虚拟机直接使用的Java类型,这就
2016-03-26 19:55:28 290
原创 JVM之类文件结构
实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它至于“Class”文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其它辅助信息。 Java语言中的各种变量、关键字和运算符号的语义最终都是有多条字节码指令组合而成,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。
2016-03-22 21:35:57 1608
转载 从init.rc说起
1 简述Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格,那么得使用转义字符"\",如果在一行的末尾有一个反斜杠,那么是换行折叠符号,应该和下一行合并成一起来处
2016-03-22 11:12:05 284
原创 C/C++拾起
static关键字 static修饰的全局变量和函数只能在本文件类使用。const关键字 const是指常数,这种数存放在rom中,也就是硬盘里,只有使用的时候才读取到内存。const数不能被修改,也不能是局部变量。
2016-03-21 15:10:36 288
原创 AIDL的使用
什么是AIDL aidl的全称是Android Interface Definition Language,这是为了实现跨进程通信而在客户端和服务端编写的接口。
2016-03-21 13:37:00 543 1
原创 JVM之垃圾收集器与分配策略
通过以上JVM两篇文章的介绍,我们大致了解了Java的内存模型以及对象的存储和分配,本文在基于以上知识开始讲解内存的回收,本文尝试解决以下的几个问题: (1)哪些内存需要回收? (2)什么时候进行内存回收? (3)如何回收内存? 上篇文章文章我们已经讲解了Java内存运行时内存区域的各个部分,其中程序计数器、虚拟机栈和本地方法栈三个区域随线程而生随线程而灭;栈中的栈帧随着方法的
2016-03-20 22:37:12 431
原创 Java之问(一)
如何强制执行垃圾回收? (1)首先,垃圾回收是JVM自动处理的,我们不能强制致敬,尽管我们可以调用System.gc()。 (2)JVM不能保证GC能够直接开始回收。 (3)每一个class都从Object基础了finalize()方法。 (4)当垃圾回收器觉得应用中没有更多的引用对象存在时就会调用finalize()。因此我们手动调用finalize()并没有什么多大作用
2016-03-20 11:35:50 303
原创 JVM之Java程序与内存映射
什么是JVM 首先看下一个Java程序是如何在机器上执行的: Java源程序(.java文件)-->Java编译器(如Eclipse) -->字节码(.class文件)-->JVM编译器--> 装配 -->机器码 --> 经过系统总线 -->微处理器-->逻辑门 -->电路 -->设备硬件.
2016-03-19 21:34:09 1096
原创 Java到底是值传递还是引用传递
在Java中,方法的参数传递永远是值传递,不存在引用传递。 实际上,如果一个方法的参数是一个对象,那么当传递这个对象的时候实际上是传递的一个对象的地址过来,而不是传递的一个引用(变量)更不是对象本身,所谓引用变量就是我们 A a = new A(),此a就是一个引用变量,它的值就是一个指向A对象的地址。如果我们把a作为某一个方法的参数传递过去,那么此时传递的仅仅是这个引用a的值(对象的地址)
2016-03-18 23:39:53 297
原创 finally会执行吗
如下代码,finally里的代码是否会执行?public class MainQueue { public static void main(String args[]) { System.out.println(MainQueue.test()); } public static int test() { try { return 0; } finally {
2016-03-18 23:11:54 362
原创 Lock & Condition
Synchronized同步块的不足 在多线程环境下保证线程同步的方法大多是使用synchronized关键字,但是这个关键字在某些环境下是很死板的。其主要缺点如下: (1)如果一个线程已经在一个synchronized块中执行,另一个线程视图进入这个同步块,那么它必须等待直到当前占用这那个同步块的线程执行完并退出。如果线程一直没有进入同步块,那么那个等待的线程就一直
2016-03-18 12:17:11 349
原创 Dalvik虚拟机详解(上)
什么是Dalvik? 首先,每一个Android应用都运行在它自己的进程中也就是它自己的Dalvik虚拟机实例,也即每个app都有自己的dalvik虚拟机实例,他们都是私有的不共享的。Dalvik虚拟机一开始就被设计成可以在一个设备上高效的大量运行(Dalvik虚拟机实例)。Dalvik虚拟机执行器会执行.dex格式的文件。Dalvik虚拟机是基于寄存器的。什么是Zygote?
2016-03-15 17:44:20 6728
原创 如何正确停止一个线程
首先肯定是不能用Thread的stop()方法的,因为此方法是非常不安全的,而且已经被废弃了,那么在这里就给出一种官方的推荐方案。 private static Thread mThread; private static Thread mThread; static StringMain.MyRunnable mRunnable = new StringMain().new MyRu
2016-03-01 14:27:36 7586
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人