发布

LearnPath

专栏成员
26
文章
14438
阅读量
13
订阅数
JVM之类文件结构
实现语言无关性的基础仍然是虚拟机和字节码存储格式。虚拟机不和包括Java在内的任何语言绑定,它与“Class”文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其它辅助信息。
见得乐
2022-09-08
4480
JVM之类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。如图所示:
见得乐
2022-09-08
2220
JVM之字节码执行引擎
在Java中,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致: 1. 输入:字节码文件 2. 处理:字节码解析 3. 输出:执行结果。
见得乐
2022-09-08
3550
JVM之早期(编译器)优化
JVM的编译器可以分为三个编译器: 1. 前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 2. JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 3. AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。
见得乐
2022-09-08
4090
JVM之晚期(运行期)优化
Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器)。
见得乐
2022-09-08
4630
JVM之内存模型与线程
由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。
见得乐
2022-09-08
2540
集合实现原理汇总
对于ArrayList而言,它实现List接口、底层使用数组保存所有元素。其操作基本上是对数组的操作。
见得乐
2022-09-08
2770
深入理解LayoutInflater.inflate()
形如 LayoutInflater.from(context).inflate(R.layout.test,root,true) 的使用在android开发中很常见,但许多人不但不清楚LayoutInflater的inflate()方法的细节,而且甚至在误用它。
见得乐
2022-09-08
8180
观察者模式及在Android源码中的应用
观察者模式是一种行为类模式,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
见得乐
2022-09-08
5320
工厂方法模式及在Android源码中的应用
在任何需要生成复杂对象的地方,都可以使用工厂方法模式,复杂对象适合使用工厂方法模式,用 new 就可以完成创建的对象无需使用工厂方法模式。
见得乐
2022-09-08
4990
策略模式及Android源码中的应用
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
见得乐
2022-09-08
3370
拆轮子系列之剖析EventBus源码
EventBus是我们在项目当中最常用的开源框架之一。对于EventBus的使用方法也是非常的简单。然而EventBus内部的实现原理也不是很复杂。在这里便针对EventBus3.0的源码进行一下详细的分析。对于EventBus的详细使用可以参考[EventBus 3.0初探: 入门使用及其使用 完全解析](http://www.jianshu.com/p/acfe78296bb5)这篇文章
见得乐
2022-09-08
3570
拆轮子系列之理解GreenDao框架源码
如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后在Android项目中使用这些类,在此过程中分别需要对Android项目添加GreenDAO的核心包依赖和对Java项目添加generator包依赖,所以解析GreenDAO的源码需要解析两部分,而这里只解析GreenDAO核心包在Android项目中的工作原理,generator包中的原理很简单,总的来说有四个作用:就是用于生成实体类、DAO类、建立多表之间的关联以及配置实体类的接口和序列化功能
见得乐
2022-09-08
1.1K0
android进阶之了解Android系统与开机过程
Android系统的源代码数量非常庞大,这些代码主要分成4层,从低到高为Linux内核层、系统库层、应用程序框架层和应用程序层,它们分别由驱动工程师、系统工程师、框架工程师和应用程序工程师来开发。如图所示为整个Android系统的框架图:
见得乐
2022-09-08
6880
android进阶之了解Zygote进程的启动及“孵化”
Zygote中文翻译为“受精卵”,正如其名,它主要用于孵化子进程。在Android系统中有以下两种程序: 1. java应用程序,主要基于ART虚拟机,所有的应用程序apk都属于这类 2. native程序,也就是利用C或C++语言开发的程序,如bootanimation。
见得乐
2022-09-08
8760
android进阶之Watchdog检查系统异常机制
Watchdog是Android系统提供的以后总检查系统异常的机制,正如其名,“看门狗”,它看的是Android框架层的几个核心服务。Watchdog一旦发现的AMS、WMS和PMS等核心服务的主线程阻塞,就清除systemserver进程,我们知道,一单SystemServer进程停止,Zygote进程就会自杀,系统就会重启。
见得乐
2022-09-08
1.7K0
JVM之垃圾收集器与内存分配策略
在堆里面存放着java世界几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象哪些还“存活”,哪些已经“死去”
见得乐
2022-07-20
2400
JVM之内存运行时区域
程序计数器是一块较小的空间,它可以看做是当前线程所执行的字节码的行号指令器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
见得乐
2022-07-20
3590
源码分析Android中的线程和线程池
线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时的操作。在操作系统中,线程是操作系统调度的最小单元。 - AsyncTask封装了线程池和Handler,它主要方便开发者在子线程中更新UI。 - HandlerThread是一个具有消息循环的线程,在它的内部可以使用Handler。 - IntentService是一个服务,系统对它进行了封装使其可以更方便地使用后台任务,IntentService内部使用了HandlerThread来执行任务,当任务执行完毕之后IntentService会自动退出。
见得乐
2022-07-20
3550
Builder设计模式和AlertDialog的源码分析
Builder模式是一步步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构造复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。
见得乐
2022-07-20
3810
点击加载更多
社区活动
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档