随笔分类 - Java
摘要:一、生命周期 创建阶段(Created):创建Java对象 为对象分配内存空间。 构造对象。 从超类到子类对static成员进程初始化,类的static成员的初始化在ClassLoader加载该类时进行。 超类成员变量按顺序初始化化,递归调用超类的构造函数。 子类成员变量按顺序初始化,一旦对象被创建
阅读全文
摘要:一、new操作符 new操作符用来实例化对象并返回该对象引用。 Java中new创建对象分为三步: 声明对象引用。 实例化对象:Java中实例化对象就是创建一个Java对象,即分配内存并返回指向该内存的引用。 初始化对象实例:调用构造函数,为类的实例对象赋值。 Java对象内存布局: 对象头(Obj
阅读全文
摘要:一、简介 Service是Android四大组件之一,也可以称为后台服务。Service是一个可以长期在后台执行而不用提供用户界面的应用组件。服务可由其它应用组件启动,即使切换到其它应用组件,服务依然会在后台继续运行。 此外,组件可以绑定到服务,并与之进行交互,甚至是执行进程间通信(IPC)。 例如
阅读全文
摘要:一、Service基础 1. Service是什么? Service是一种在后台长时间运行,但是没有界面与用户交互的组件。在App退出时,Service依然在后台运行,这就是Service保活。 Service与BoradCast都是运行在主线程中。所以,Service不能执行耗时操作。 2. Se
阅读全文
摘要:一、ThreadLocal是什么? ThreadLocal全名是Thread Local Variable,是Java中线程局部变量类。 二、作用 用于存储线程内的变量,变量不会被其它线程污染。 三、原理 通过源码: public class ThreadLocal<T> { /** * Threa
阅读全文
摘要:一、简介 1. Linux内核基础知识, (1)进程隔离/虚拟地址空间 进程隔离是防止进程A数据写入到进程B地址空间,进程隔离实现使用了虚拟地址空间。 进程间通信需要使用某种相应的通信机制,在Android中使用Binder实现。 (2)系统调用 (内核空间和用户空间)? 对内核有某些保护机制来告诉
阅读全文
摘要:1. 什么是UI线程? App通过Zygote fork创建一个App进程,通过ActivityThread的main()函数创建ActivityThread实例及UI线程Looper对象。 程序都有一个main()函数,也就是主函数,Android中的主函数在ActivityThread这个类中,
阅读全文
摘要:一、ThreadPoolExecutor类使用 1. 创建线程池源码: /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize the nu
阅读全文
摘要:1. 为什么使用锁? 多线程操作带来的问题? 访问冲突; 锁竞争; 死锁; 锁的粒度; 上下文切换开销; 同步/内存拷贝开销等; 2. 线程安全 Java内存模型(JMM) working memory & main memory 原子性; 可见性; 有序性; happens before原则 代码
阅读全文
摘要:1. Java线程 2. Java线程安全 3. 多线程与线程间通信 4. Java 线程池ThreadPoolExecutor类 5. Java线程与线程池进阶
阅读全文
摘要:1. 线程的状态 Java程序在运行过程中线程可能有6种状态: New:新创建状态; Runnable:可运行状态; Blocked:阻塞状态; Waiting:等待状态; Timed waiting:超时等待状态; Terminated:终止状态; 2. 线程同步 1. 加锁与条件变量 Lock/
阅读全文
摘要:1. 什么是线程安全? 可变资源(内存)间线程共享。 2. 如何实现线程安全? 不共享资源; 共享不可变资源; 共享可变资源: 可见性; 操作原子性; 禁止重排序; 1. 不共享资源 1. 可重入函数:函数体内部不涉及任何外部变量; // 可重入函数 public static int addTwo
阅读全文
摘要:1. 如何停止一个线程? 官方停止线程的方法被废弃了,所以不能直接停止线程,这么做是非常不安全的。 2. 为什么不能简单停止一个线程? 因为,简单停止一个线程会出现很多异常情况,比如:多线程读取共享变量时,其中一个线程加锁了,其它线程处于等待状态,如果,将加锁线程暂停了,那么其它线程就会被堵塞在这里
阅读全文
摘要:一、JNI是什么? JNI是Java Native Interface的缩写,译为Java本地调用。JNI是一种技术。 二、JNI技术的用途? Java程序中的函数调用Native程序中的函数。Native一般指使用C/C++编写的函数。 Native程序中的函数调用Java程序中的函数。 三、注册
阅读全文
摘要:一、类加载器 ClassLoader 1. 什么是类加载器? 通过类的全限定名获取描述该类的二进制字节流这个过程通过类加载器(Class Loader)完成。 classloader类加载就是动态加载class文件到内存当中。Java虚拟机并不是一次性加载所有class文件到内存当中的,是按需加载到
阅读全文
摘要:一、Java程序运行时内存分配策略 静态存储区(方法区):主要用于存放静态数据、全局Static数据和常量的存储区。此存储区在程序编译时就已经分配好了,并且在程序整个运行期间都存在。 栈区:方法体内的局部变量都在栈上创建。 堆区:又称动态内存分配区,在程序运行中通过new关键字申请的内存。 二、栈内
阅读全文
摘要:0. Java 容器 1. HashTable、HashMap、ConcurrentHashMap 线程安全对比 HashMap:异步的,线程不安全; HashTable:同步的,synchronized针对的是整个hash表,是独占锁,同一时刻只能有一个线程访问操作,线程安全; Concurren
阅读全文
摘要:1. 什么是方法分派? 就是确定调用谁的,哪个方法。 在Java中子类覆写父类方法的方法都是虚方法,使用final、private修饰的方法不是虚方法。 2. 方法分派情况分析 在Java中子类继承父类并覆写父类方法,在调用时取决于运行时的实际类型。 // 父类 public class Super
阅读全文
摘要:1. 什么是注解? Java注解又被称为标注,是JDK 1.5 引入的一种注释机制。 Java源码的类、方法、参数、变量等前的一种特殊“注释”。 Java语言中类、方法、变量、参数和包等可以被标注。 注解就是用作标注的“元数据”。 和Javadoc不同,Java标注分为运行时和编译时两个实现。 运行
阅读全文
摘要:一、异常体系分类 异常的基类(超类)是Throwable,throwable有两个子类,分别为:Error、Exception。 Error:指程序中出现无法处理的错误。在出现Error时,JVM虚拟机会选择将出现Error的线程关闭。 Exception:异常,指程序本身可以处理的异常。异常分为:
阅读全文

浙公网安备 33010602011771号