- 博客(52)
- 收藏
- 关注
转载 Java 线程模型
线程是CPU调度执行的基本单位,多个线程共享系统为进程分配的资源,又可以被系统独立调度执行。多线程模型实现多线程主要有3种模型:内核线程模型、用户线程模型、混合线程模型内核线程模型内核线程模型即完全依赖操作系统内核提供的内核线程(Kernel-Level Thread ,KLT)来实现多线程。在此模型下,线程的切换调度由系统内核完成,系统内核负责将多个线程执行的任务映射到各个...
2018-08-26 19:19:00
171
转载 Java 语法糖
Java语法糖语法糖即为了方便开发人员进行代码开发而在语言层面添加了一些语法支持,这些语法对程序性能并不会有什么提升,仅仅用于提升开发效率。Java语法糖需要Java编译器提供支持,在将源代码编译成字节码的过程中,编译器会进行解语法糖操作,将语法糖还原成更普通的Java语法。常见的Java语法糖泛型与类型擦除泛型即参数化要操作的数据类型,Java在JDK1.5中引入了泛型...
2018-03-18 01:30:00
180
转载 Java编译期的前端过程
Java编译期的概念编译期即将源代码转变成本地代码的过程,对于Java来说,这个过程会更加的多样。Java编译期因为采用的编译器类型不同而导致概念也不同,Java编译器可以分为以下三种类型:前端编译器前端编译器将java源代码转变成字节码,常见的前端编译器包括Javac编译器、ECJ编译器(Eclipse JDT)。即时(JIT,Just In Time)编译器即时编...
2018-03-10 18:01:00
171
转载 基于栈的虚拟机执行引擎
栈帧栈帧(Stack Frame)是虚拟机中用于实现方法调用和方法执行的数据结构,是虚拟机栈中的基本数据元素。一个栈帧中主要包含以下内容:局部变量表局部变量表用于存储方法的形参以及方法内部定义的局部变量,在Class文件中每个方法的Code属性中已经定义了局部变量表的最大容量。局部变量表的存储单位是一个Slot,一个Slot可以存放一个32位以内的数据类型,如果是64位数...
2017-11-27 00:48:00
150
转载 Java 类加载器
Java 类加载器类加载器类加载器用于加载Java类到虚拟机中,加载一个Class首先需要获取该Class的二进制字节流,这个过程可以通过自定义类加载器(覆盖findClass方法)来实现,从而可以通过多种灵活的途径获取Class的二进制字节流。每个类加载器都拥有一个独立的类名称空间,一个Class的唯一性需要通过其类加载器确定,判断两个Class是否是同一个Class的前提是这两...
2017-11-19 18:00:00
94
转载 Java 类加载过程
Java 类加载过程Class的生命周期一个Class在虚拟机中的完整生命周期如下图所示:需要说明的是,上述的流程只是描述了逻辑上各个阶段的开始顺序,实际过程中,各个阶段可能是交错进行,并不是一个阶段等到另一个阶段完全完成才开始执行。加载加载一个Class需要完成以下3件事:通过Class的全限定名获取Class的二进制字节流将Class的二进制内容加载到虚拟机的方法区...
2017-11-13 00:22:00
126
转载 Java class文件的结构
Java class文件的结构class文件是Java源代码编译之后产生的二进制文件,代码中的各个项目严格按照Java的规范组织。class文件以一张表的形式组织代码中的各个部分:名称释义大小magic魔数4 Byteminor_version子版本号2Bytemajor_version主板本号2Byteconstant_pool_...
2017-11-12 00:00:00
108
转载 Android Service
Android ServiceService 是一种运行在后台没有界面的组件,可以执行一些需要长期运行的过程。需要注意的是,service组件本身并不会新建一个进程或者线程来执行任务,service组件运行在它所属App的主线程中。因此,通常需要在service组件中新建一个线程来执行耗时的任务。Service 与 new Thread的区别Service 组件用于当用户没...
2016-06-17 19:09:00
104
转载 Fragment的生命周期
Fragment的生命周期Fragment主要用于将Activity的UI界面划分成多个可复用的部分,这样可以使App的UI界面更容易适应多种不同屏幕分辨率的设备。 Fragment作为可复用的组件,有独立的生命周期,但同时作为Activity的一部分,其生命周期也会受其所属Activity的生命周期的影响。Fragment的生命周期如下图所示:F...
2016-05-04 15:23:00
372
转载 Fragment与Activity通信
Fragment与Activity的通信Fragment通常作为Activity的子组件,可以自由地从Activity添加和删除,可以被多个Activity共享。首先来看Activity如何管理Fragment组件:添加Fragment添加Fragment有两种方式: (1) 在layout文件中通过< fragment >标签声明...
2016-05-04 15:23:00
101
转载 Activity的LaunchMode
Activity的LaunchModeTasks和Back Stack一个Task表示与用户的一次交互,包含交互过程中的多个Activity实例。当用户通过点击桌面上的Launcher图标打开一个app时,则启动一个新的Task开始与用户交互,当用户点击Home键时,当前Task则被转入后台,而当用户再次点击桌面上相同的Launcher图标时则将刚才转入...
2016-04-26 15:23:00
87
转载 Activity的生命周期
Activity的生命周期首先给出Google官方API中的图片:注意以下回调方法都是在UI线程中执行的,所以通常不能直接执行耗时的操作。onCreate创建Activity首先要执行onCreate。onCreate中通常执行一些初始化的工作,比如:创建各View组件、绑定数据等。onCreate后一定跟着执行onStart方法。o...
2016-04-25 10:03:00
114
转载 Android平台简单介绍
1. 起源和发展 Android是由Android公司的创始人Andy Rubin创造的,而后被Google收购,Google的目标是将Android打造成一个标准化、开放式的移动操作系统平台。 Android是开放源代码的移动操作系统软件,提供了丰富的功能和酷炫的用户界面。Google不断优化和改进Android系统,并开放原生的安卓系统源代码允许各个软件厂商或者手机厂商...
2015-11-12 16:49:00
459
转载 Java并发编程(六) 一个日志服务的例子
日志服务需要提供的功能有:可以从外部安全地开启和关闭日志服务;可以供多个线程安全地记录日志消息;在日志服务关闭后,可以把剩余未记录的消息写入日志文件;public class LogService{ private final BlockingQueue<String> msgQueue; //阻塞的消息队列保存日志消...
2015-11-10 17:59:00
101
转载 Java并发编程(五) 任务的取消
在Java中无法抢占式地停止一个任务的执行,而是通过中断机制实现了一种协作式的方式来取消任务的执行。外部程序只能向一个线程发送中断请求,然后由任务自己负责在某个合适的时刻结束执行。1. 设置取消标志 这是最基本也是最简单的停止一个任务执行的办法,即设置一个取消任务执行的标志变量,然后反复检测该标志变量的值。public class MyTask implements...
2015-11-09 17:21:00
130
转载 Java并发编程(四) 任务的执行
1. 启动线程的最基本方式 在Java中用Runnable表示一个任务,需要在Runnable接口的run方法中实现任务的具体业务逻辑,然后创建一个Thread并调用start方法启动任务。 例如执行一个匿名任务:new Thread(new Runnable() { public void run()...
2015-11-05 20:45:00
107
转载 Java垃圾回收
1. 垃圾回收 Java垃圾回收(GC)分为两个阶段: 判定,判定哪些对象可以被回收,使用可达性分析算法; 回收,回收那些无用的垃圾对象,常用的算法有:标记—清除算法、复制算法、标记—整理算法;2. 可达性分析 当前的主流虚拟机都是使用可达性分析算法来判定一个对象是否还存活。 Java虚拟机中标记一系列称为GC Root的对象,可达性分析算法的基本...
2015-09-05 16:46:00
105
转载 Java虚拟机内存模型
1. Java内存区的构成 Java虚拟机运行时内存主要由五个部分组成: (1)方法区 方法区用于存储被虚拟机加载的类信息、常量、static变量等数据。字符串常量池就位于方法区。 (2)堆 堆用于存储对象实例,java中通new创建的对象实例就保存在堆中。 (3)虚拟机栈 虚拟机栈用于实现方法调用,每次方法调用就...
2015-09-04 23:46:00
95
转载 Java并发编程(三) 并发类库中的常用类
1. 同步容器类 遗留下来的同步容器类包括Vector和Hashtable,此外java.util.Collections类中还提供了以下工厂方法创建线程安全的容器对象: Collections.synchronizedList 返回支持同步操作(线程安全)的List对象; Collections.synchronizedSet 返回支持同步操作(线程全的)的Set对象...
2015-09-02 21:36:00
144
转载 Java并发编程(二) 创建线程安全的类
1. 线程安全的类 多线程环境中访问某个类时,不需要额外的同步或者协同,这个类都能表现出正确的行为,则称该类是线程安全的。2. 设计线程安全的类的基本步骤:(1)找出构成对象所有状态的域(2)找出约束状态域的不变性条件(3)设计对象状态的并发访问和管理策略收集同步需求:我们需要分析对象的不变性条件,在执行某个操作时,需要判断操作执行之后是否会导致对...
2015-09-01 10:55:00
85
转载 Java并发编程(一) 基础知识
1. 原子性 操作的原子性是即不能被分割的操作,和数据库中事务的原子性概念一致,即要么不执行,要么全部完成。有很多看起来具有原子性操作的实际上并不具有“原子性”,例如: “读取-修改-写入”操作:形式上像 i++ 一样简单的语句实际上并不是一个具有“原子性”的操作,它实际上包含三步: 读取原来的值 修改值 写入新的值 并且这三步之间是可以被分割执行的。...
2015-08-31 16:53:00
104
转载 Java数据库编程
1. 数据库编程基本流程 (1)加载数据库厂商的驱动程序 例如:对于Mysql数据库,Class.forName("com.mysql.jdbc.Driver"); (2)获得数据库连接对象 Connection connection = DriverManager.getConnection(url,username,password); (3)创建数据库...
2015-08-26 12:33:00
112
转载 虚拟存储器
1. 虚拟存储器机制 虚拟存储器即对磁盘存储器进行抽象,将磁盘存储器组织成一个连续的存储器,将主存看成是磁盘存储器的一个高速缓存。 虚拟存储器提供了三个重要的能力:(1)将主存看成是磁盘存储器的高速缓存,在主存中只保存活动区域,并根据需要在主存和磁盘之间来回传送数据,有效地提高了主存的利用率(2)为每个进程提供了一致的地址空间,大大简化了存储器的管理(3)为...
2015-08-24 20:13:00
140
转载 异常
1. 异常 这里说的异常不是通常所说的软件编程中的"异常处理",而是指令流的一种突变,用来响应系统中的某些变化。异常是由硬件和操作系统共同实现的,处理器执行当前指令时,处理器检测到系统发生了某个事件,便调用异常处理程序来处理这个事件,如下图所示:异常处理之后,有三种可能: 终止程序指令流的执行; 返回到被中断的指令继续执行(当前指令); 返回到下一条...
2015-08-22 23:20:00
151
转载 Java新IO
Java从1.4开始引进了对于输入输出的改进,相关类位于java.nio包中。新IO主要有以下几个特性:(1)字符集编码器和解码器(2)非阻塞的IO(3)内存映射文件1. 字符集编码器和解码器 Charset类表示不同的字符集,可以使用Charset.forName方法获得指定名称的字符集对象,与Charset相关的类在java.nio.charset包中...
2015-08-16 22:00:00
86
转载 Java流式IO
1. 流式IO结构 下图只给出了较为常用的IO流的类图结构 Java的IO流主要分为两大类:字节流和字符流,字节流以InputStream和OutputStream为基础类,字符流以Reader和Writer为基础类。2. 字节流 字节流以InputStream和OutputStream为基础类,常用的子类流有: FileInputStr...
2015-08-16 17:16:00
121
转载 程序链接
1. 源程序的处理过程(1) 预处理 根据“#”开头的预处理命令,修改原始代码文件得到一个中间文件。例如:将#include的头文件的内容直接插入到源文件中;(2) 编译 对预处理之后的文件进行编译,得到包含汇编代码的文件;(3) 汇编 对汇编文件进行处理,翻译成二进制的可重定位目标文件;(4) 链接 链接器将多个可重定位目标文件以及静态库文件等组合...
2015-08-15 10:48:00
87
转载 Java集合框架
Java集合框架实现了常用的基本数据结构,如:集合、线性表、队列、栈、映射表等。下图是集合框架的类关系图: Java集合框架主要由Collection接口和Map接口构成,Collection接口有子接口List、Set、Queue接口。常用的集合类有:ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等...
2015-08-11 23:25:00
75
转载 Java泛型编程
1. 泛型类 泛型类就是具有一个或者多个类型变量的类,在Java集合框架中大量使用了泛型类。通过泛型编程可以使编写的代码被很多不同的类型所共享,大大提高了代码的重用性。 下面给出一个自定义泛型类的例子:public class Pair<T>{ private T first; private T second; pu...
2015-08-10 20:33:00
182
转载 缓存机制
1. 局部性原理 局部性原理是指计算机在执行某个程序时,倾向于使用最近使用的数据。局部性原理有两种表现形式:时间局部性和空间局部性。 时间局部性是指被引用过的存储器位置很可能会被再次引用,例如:重复的引用一个变量时则表现出较好的时间局部性 空间局部性是指被引用过的存储器位置附近的数据很可能将被引用;例如:遍历二维数组时按行序访问数据元素具有较好的空间局部性2....
2015-08-08 23:26:00
176
转载 存储器分类
1. 随机访问存储器(RAM) 随机访问存储器可以分为静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)。 SRAM通常作为高速缓存存储器,它的速度比DRAM要快,抗干扰性比DRAM好,造价也更高;DRAM通常作为计算机的主存以及显存。 SRAM和DRAM都是易失性存储器,断电后,存储的信息就会丢失。2. DRAM和主存 DRAM将每个位存储...
2015-08-08 17:21:00
112
转载 Java异常处理
1. 异常分类 Java中所有的异常类都派生于Throwable类,Throwable类有子类Error和Exception类。其中Error表示Java运行时系统的内部错误,Exception表示程序运行异常。Exception的子类又分为两大类:RuntimeException类和其他异常类,RuntimeException表示程序的逻辑错误,如:NullPointer...
2015-07-30 22:59:00
71
转载 数据对齐
1. 基本类型 计算机系统对基本数据类型的合法地址做出一些限制,要求地址必须是某个值的倍数,这样的限制简化了处理器和存储器之间的接口设计。 首先对于char类型,只占一个字节,因此对char类型的地址没有限制; 在Linux系统中,short类型的地址必须是2的倍数(地址最低位必须是0),其他类型的地址必须是4的倍数(地址最低两位必须是00); 在Window...
2015-07-28 14:48:00
89
转载 程序调用栈
1. 栈帧 计算机使用栈这样的结构来支持函数调用,栈用来传递过程参数、存储返回信息、保存寄存器信息用于恢复、存储局部变量等。每一次函数调用,系统都会在栈中开辟一块空间用来保存执行状态,为每次函数调用分配的栈空间成为栈帧。 上图描绘了栈帧的结构,帧指针和栈顶指针标示了栈帧的范围,帧指针指示栈帧的起始位置,通常使用寄存器%ebp来保存帧指针,使用寄存器%esp来保存栈顶...
2015-07-27 19:48:00
140
转载 Java抽象类与接口
1.抽象类 抽象类表示抽象程度比较高而无法直接通过new来创建实例的类,抽象类使用abstract修饰。抽象类可以包含普通的属性和方法,还可以包含抽象方法(当然也可以不包含)。 抽象方法使用abstract修饰,没有方法体,方法声明结尾是分号,抽象方法的具体实现留在子类中。public abstract class AbstractClass{ pri...
2015-07-22 22:12:00
65
转载 Java的Object类
Object类是所有类的祖先类,如果一个类没有明确的父类,则它的父类就是Object类。Object类中以下几个比较重要的方法:1. equals方法 public boolean equals(Object object)该方法用来判断两个对象是否相等,Object类的默认实现是判断两个引用是否指向同一个对象,String类的实现则是判断两个字符串的内容是否相同。...
2015-07-22 20:08:00
68
转载 Java内部类
1.定义内部类即定义在一个类体内部的类,内部类被编译器编译成OuterClass$InnerClass.class 。class OuterClass{ private int value; private class InnerClass { }}2.特性(1)内部类可以访问外部类的属性和方...
2015-07-21 18:35:00
75
转载 Java创建对象的初始化顺序
1. 初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句; 初始化块分为instance初始化块和static初始化块,初始化块在构造方法执行之前被执行; static初始化块不能访问非statci成员,也不能调用非static方法,并且只在类加载时执行一次; 初始化块通常用于提取多个构造方法中的公共代码。...
2015-07-21 16:42:00
87
转载 Java多态与动态绑定
1.多态 一个实例变量可以引用多种不同类的实例的现象称为多态,这些类之间是父类与子类的关系,即父类引用可以指向子类的对象,这样参数是父类类型的方法也可以用来处理子类。2.动态绑定 父类有多个子类,且多个子类都继承了父类中某个方法并以不同实现重写了。由于多态,父类引用可能指向的是子类对象,在使用父类引用调用该方法时,虚拟机可以在运行时决定调用对象的实际类型中的实现,即所...
2015-07-21 16:39:00
140
转载 Java访问修饰符
private、protected、public是Java中的访问权限修饰符,可以用于修饰变量、方法和类。(更正:类只有default和public两种修饰符,内部类相当于成员,可以使用private、protected和public修饰) private表示只能在本类才能访问; protected表示在同一个包的类中或者子类中可以访问; public表示在任...
2015-07-21 16:36:00
91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人