自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 Android Gems — Fragment本质之返回栈和事务管理

之前两篇文章 Fragment本质之生命周期管理 和 Fragment本质之View管理,我们主要介绍了Fragment的整个生命周期管理,对Fragment的基本机制也了解得比较透彻了。这节我们介绍一下Back Stack和事务操作。所有用过Fragment的人对FragmentTransaction应该都不会陌生,这是fragment基本操作的接口。FragmentTransaction名字里带了transaction这个单词,也就意味着他是支持事务操作的,而事务是可以回退的。FragmentTran

2016-12-08 14:51:20 1141 1

原创 Android Gems — Fragment本质之View管理

上篇文章我们讲了Fragment的生命周期管理,对Fragment整个运行机制都会比较清楚了,这节我们分析Fragment的View管理。一,Fragment的两种定义方式1,在layout xml里通过fragment标签定义,这种方式定义的fragment是由LayoutInflater在解析xml文件的时候创建。在Activity的onCreate方法里,会通过setContentView方法设置layout id,继而调用LayoutInflater的inflate方法解析xml。LayoutI

2016-12-07 00:18:31 1184

原创 Android Gems — Fragment本质之生命周期管理

Fragment最早引入是在给平板的Android 3.0系统,用来解决Pad上UI的模块化。随后逐渐推广到Phone UI上,3.0之前的版本则通过Support包引入。Fragment本质上是带生命周期管理的View的Wrapper,解耦了Activity和View,一方面Activity可以不用再处理View的逻辑;另一方面View也可以只专注渲染,不用关心Controller逻辑。

2016-12-04 18:47:56 2639 1

原创 Android Gems — Java源码分析之HashMap和SparseArray

SparseArray是Google为了提高性能替换HashMap而推荐使用的容器类,本文从源码的角度来了解一下两种容器的实现原理,从而分析一下其性能对比。HashMap是hash函数+拉链法实现,SparseArray则使用的是有序数组+二分查找实现。HashMap的性能影响主要体现:占用内存过大,插入过程内存动态增长的扩容操作代价,hash冲突时的链表遍历。SparseArray的性能影响

2016-11-29 20:47:51 1323

原创 Android Gems - Java源码分析之List

最近突发奇想,写个Java源码分析系列。开发过程中,总会使用各种类库,如ArrayList,LinkedList等,用得虽多,但对于其实现细节却了解甚少,所以专卖开辟个系列,从源码的角度分析一下各种Java类库的实现细节。就先从最简单的List入手。List是给接口,其继承自Collection,标准接口咱就不说了,List的实现有两个,ArrayList和LinkedList,前者是数组实现

2016-11-25 17:41:22 732

原创 Android Gems — AMS的Service生命周期管理

Service对于Android开发来说再熟悉不过了,不过大部分人对Service的了解也仅限于api,这篇文章,我们通过分析AMS的源码,从一个更高的高度来了解一下Service的整个生命周期。Service的生命周期接口:1. startService2. bindService3. stopService4. unbindService这几个接口在apk进程里调用,通过ActivityManagerNative这个Binder最后调用到ActivityManagerService里,而AM

2016-11-22 19:11:48 1548

原创 Android Gems — Android的LowMemoryKiller杀进程策略

Anroid的杀进程策略是基于kernel里的LowMemeoryKiller模块,LMK的实现在这里不展开分析,大致的原理就是LMK注册了内核的shrinker(lowmem_shrinker),内核线程kswapd,在linux回收内存分页的时候,通过shrinker回调回来给LMK。LMK根据每个进程的oom_adj值,将大于某个阈值的进程都发送SIGKILL信号杀掉。oom_adj的阈值因

2016-11-18 00:04:36 2096

原创 深入理解ART虚拟机—ART的函数运行机制

前面两篇文章介绍了ART的启动过程,而在启动之后,我们感兴趣的就是ART是怎么运行的。回顾一下虚拟机系列的前面几篇文章,我们可以理一下思路:一,apk以进程的形式运行,进程的创建是由zygote。参考文章《深入理解Dalvik虚拟机- Android应用进程启动过程分析》二,进程运行起来之后,初始化JavaVM参考文章《深入理解ART虚拟机—虚拟机的启动》三,JavaVM创建之

2016-11-04 16:09:57 5768

原创 深入理解ART虚拟机—ImageSpace的加载过程分析

上一篇分析了art虚拟机的启动过程,不过跳过了一个技术点,就是ImageSpace。由之前的分析可知,ClassLinker是用来加载类对象的,有三类类对象,一是ClassRoot,包括java.lang包下的类,这类的类对象是语言自己的,不需要import,ART虚拟机是定义在mirror目录下的。二是boot_class_path,包括jdk和android.jar,这类的类对象是通过指定

2016-10-14 12:50:50 4509 1

原创 深入理解ART虚拟机—虚拟机的启动

看art虚拟机也有一段时间了,是时候写点什么出来了。早先看art的时候,发现不是太能理解,所以就恶补了一下dalvik虚拟机,所以有了之前的dalvik系列,等再次回头看art的时候,确实轻松了不少。art从Android L开始正式替换dalvik,成为Android的默认虚拟机,L的art源码和之前KK的差别比较大,网上很多分析ART的文章都是基于KK的art源码。L开始art才走向成熟,

2016-10-11 13:50:16 10713

原创 深入理解Dalvik虚拟机- 解释器的运行机制

Dalvik的指令执行是解释器+JIT的方式,解释器就是虚拟机来对Javac编译出来的字节码,做译码、执行,而不是转化成CPU的指令集,由CPU来做译码,执行。可想而知,解释器的效率是相对较低的,所以出现了JIT(Just In Time),JIT是将执行次数较多的函数,做即时编译,在运行时刻,编译成本地目标代码,JIT可以看成是解释器的一个补充优化。再之后又出现了Art虚拟机的AOT(Ahead

2016-04-06 00:14:34 6757 1

原创 深入理解Dalvik虚拟机- Android应用进程启动过程分析

Android的应用进程启动是apk在manifest里申明的Activity,Service,BroadcastReceiver等组件被调起时而触发的。我们以Activity为例,当点击桌面上的应用图标时,桌面会调用startActivity,启动manifest里申明的相应Launcher的Activity,而Activity的startActivity会通过Binder调用来到Activit

2016-03-02 13:28:24 3813

原创 linker and loader 读书笔记(一)

linker and loader这本书是目前介绍连接器跟加载器最全面的书了。毕业之前在学校的时候就看过一遍,不过由于这本书过于理论、晦涩,当时并没有理解透,如今结合实际来读,来彻底的完成对这本书的学习。这篇笔记并不是想全面介绍什么是连接器和加载器,这是记下自己读这本书的理解过程,结合一些实际来加深理解。对广大程序员来说,连接器跟加载器也并不是什么特别陌生的东西,虽然并不是很多人都会非常了解编译连接技术,不过没见过猪跑,难道还没吃过猪肉吗,写程序写多了总会对连接器有点了解。下面从一个简单的“he

2010-08-11 20:20:00 2738 1

原创 走进并行时代之编程篇(二)

上回介绍了内存模型的概念,应该对多核、多处理器编程所面临的问题有所了解了,对顺序一致性模型的一种松弛就是在性能与编程性之间做出的一种折衷。不同的体系结构所做的松弛是不一样的,都必须得提供相应的内存屏障指令来保证一致性。我们接下来从编译器跟处理器两个层面来探讨内存一致性问题的解决方案。编译器层面:volatile,这个关键字应该已经被人熟知了,只不过确实对它有深刻了解的人可能不多。JAVA,C#,C++都提供了这个关键字,都有定义自己的语义。

2010-06-10 23:37:00 793

原创 COM杂谈(一)

由于工作需要,最近开始忙于C#跟COM的交互操作。之前基本上没有玩过C#跟COM,作为一名狂热的技术民工表示,越高级越好玩。即将上市的Windows Phone 7的SDK是基于Silverlight的,用C#作为其编程语言。据我初步的关注了一下,跟Palm的web os有几分神似,主要的应用软件层都是基于Browser。web os比较纯粹,就是Browser上面的HTML+JS,而WPhone

2010-04-09 00:22:00 488

原创 走进并行时代之编程篇(一)

内存模型(一) 并行系统给程序员带来了性能的提升,不过也给编程带来了挑战。load/store是程序员再熟悉不过的内存操作了,在单处理器的情况下,程序的执行是串行化的,内存呈现给程序员的表现就是program order。在多处理器的情况下,多个处理器共享内存,并行的执行程序,那么需要一种模型来决定内存对程序员的呈现形式,这也就是所谓的内存一致性模型。 内存的一致性模型有很多种,顺

2010-03-14 19:23:00 806 1

原创 走进并行时代之CPU篇(一)

说是CPU篇,其实还是跟GPU扯上关系,Larrabee是比较新颖的Fusion实现,而这一篇则是介绍比较传统的一种Fusion解决方案,一种异构多核的实现。 主要参考文献有:ISCA   06的 Multiple Instruction Stream ProcessorPLDI   07的 EXOCHI: Architecture and Programming Environm

2009-10-08 10:43:00 996

原创 走进并行时代之GPU篇(三)

传统的GPU架构前面两篇都介绍了,这篇主要聊聊Intel即将上市的新款X86的GPU——Larrabee Fusion是AMD提出的融合GPU和CPU的概念,这也是收购ATI的一个主要目的吧。AMD从08年就开始造势说要出产品了,最后还是一拖再拖,目前的说法是要在2011年的时候推出32nm的Fusion芯片。另一方面Intel也是在打算做融合,原本是今年下半年推出融合了GPU的N

2009-09-02 01:24:00 1001

原创 走进并行时代之GPU篇(二)

上回讲了传统的GPU体系结构,它是完全按照graphics pipeline来设计的,每一级硬件对应与pipeline的的一个stage。其中有两级是可编程的,即vertex shader和pixel shader。在传统的GPU架构下的GPU编程其实就是编写这两个shader的函数,然后通过DX或者OGL的pipeline接口写入GPU设备,通过绘制一遍流水线来实现shader功能。编写shad

2009-02-22 22:33:00 2458

原创 走进并行时代之GPU篇(一)

 并行计算一直以来都是比较高端的一个东东,对于普通的程序员还是不容易接触。不过如今多核开始流行,用自己的一台PC机都可以来实现并行算法了,多核从结构上来看就和SMP差不多。只是现在主流的也就2核,体现不出并行计算的强大。另一方面,GPU现在是越做越强大,nv发布G80的时候的一个口号就是打造个人的超级计算机。GPU和CPU的设计理念不同,GPU是计算密集型的,因为它的最初设计就是为了图形处理,并不

2009-01-16 21:50:00 2162 1

原创 走进并行时代(序)

     接触并行计算已经有一阵子了,最初的兴趣始于对GPU的好奇,G80这个NV为了GPU的通用化走向的第一步,也慢慢揭开了以后GPU的一种趋势:多核通用化。不管以后是CPU取代GPU,或者两者和谐共处,多核计算是不可阻挡的趋势。    传统的单核体系结构的研究已经沉寂很久了,单核技术需要一种革命性的突破才能打破这种沉寂。不管是学术界,还是工业界都热衷于在多核技术上,往一个die里面使劲的塞U,

2008-09-25 20:41:00 713

原创 CUDA 之FAQ

开始学CUDA,一方面可以学点编译器的知识(NVCC),另一方面想通过CUDA更好的了解G80/G92等等,毕竟这比Graphics Pipeline更接近硬件。写这个FAQ,其实也就是通过一点一点的去接近硬件,只是按我的理解,并不一定正确,有错误可以指出讨论。 Q:      CUDA为何不支持递归?A:      由于CUDA的函数调用是stackless的,用inline实现的,

2008-07-25 09:21:00 453

原创 谈谈Intel的Larrabee计划

以下纯属自己yy 最近Larrabee被炒得比较热,一是intel的一篇2008 siggraph文章《Larrabee: A Many-Core x86 Architecture for Visual Computing》,二来Larrabee将会在8月的Siggraph 2008上亮相,看了一些Larrabee的公开资料,谈谈我对Intel目前策略的理解吧。Larrabee是一款基于x86

2008-06-18 18:39:00 655

原创 类成员函数调用

大家都知道C++的虚函数前必须加virtual,但如果一连串的继承下来,有的忘了加virtual会出现什么情况呢?为了满足我的好奇心,做了点实验然后有了本文,仅仅是好玩,没有啥实际意义。本文只给出vs2005的情况首先,如果是单一类,没加virtual的话那么好办,直接call A::fun,非static函数call之前push对象指针就OK了。所以此类函数的调用与普通函数没啥两样,用点小t

2008-06-11 21:41:00 965

原创

太懒一直不喜欢写blog,早上遇到一以前研究过的技术问题,发现都已经忘得差不多了,想想还是开个技术blog吧,以便日后可以查找,有时候不能太相信自己的记忆力。threepig这id被注册了,只能加个s了,还是看着threepig比较顺眼,哈哈

2008-06-10 13:03:00 509

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除