1、JVM的工作原理
JVM的内部体系结构分为三部分,
- (1)类装载器(ClassLoader)子系统
作用: 用来装载.class文件 - (2)执行引擎
作用:执行字节码,或者执行本地方法 - (3)运行时数据区
方法区,堆,java栈,PC寄存器,本地方法栈
2、Java 的内存管理
Java GC机制主要完成3件事:确定哪些内存需要回收,确定什么时候需要执行GC,如何执行GC。
Java内存分配和回收的机制概括的说,就是:分代分配,分代回收。对象将根据存活的时间被分为:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)
- 年轻代:使用“停止-复制”算法进行清理
- 老年代:老年代用的算法是标记-整理算法,即:标记出仍然存活的对象(存在引用的),将所有存活的对象向一端移动,以保证内存的连续。
- 方法区(永久代):永久代的回收有两种:常量池中的常量,无用的类信息,常量的回收很简单,没有引用了就可以被回收。对于无用的类进行回收,必须保证3点:
(1)类的所有实例都已经被回收
(2)加载类的ClassLoader已经被回收
(3)类对象的Class对象没有被引用(即没有通过反射引用该类的地方)
3、Dalvik和ART虚拟机的区别
1、平台支持差别:
Dalvik Android 4.4 及其以下平台使用的虚拟机;
ART Android4.4以上平台使用的虚拟机技术;
2、工作原理差别:
在应用程序启动时,JIT(just-in-time,即时编译技术)通过进行连续的性能分析来优化程序代码的执行,在程序运行的过程中,Dalvik虚拟机在不断的进行将字节码编译成机器码的工作。
ART引入了AOT(Ahead-Of-Time)这种预编译技术,在应用程序安装的过程中,ART就已经将所有的字节码重新编译成了机器码。应用程序运行过程中无需进行实时的编译工作,只需要进行直接调用.因此,ART极大的提高了应用程序的运行效率,同时也减少了手机的电量消耗,提高了移动设备的续航能力,在垃圾回收等机制上也有了较大的提升。
相对于Dalvik虚拟机模式,ART模式下Android应用程序的安装需要消耗更多的时间,同时也会占用更大的储存空间(指内部储存,用于储存编译后的代码),但节省了很多Dalvik虚拟机用于实时编译的时间
4、多线程和安全问题
多线程编程中的三个核心概念
- 原子性:即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效)。
- 可见性:当多个线程并发访问共享变量时,一个线程对共享变量的修改,其它线程能够立即看到。可见性问题是好多人忽略或者理解错误的一点。
- 顺序性:顺序性指的是,程序执行的顺序按照代码的先后顺序执行。
activity启动过程
java泛型
java反射
activity事件分发
volley原理
进程间传输方式
热修复相关的问题
一个listview很卡顿,让分析一下其中可能的原因和你碰见这个问题如何动手解决。
怎么停止一个线程,waitxxx有用吗?
静态内部类引用外部类怎么解决引用问题
for循环…的线程同步问题
Java虚拟机什么时候进行GC,Android虚拟机呢?
弱引用和软引用的区别?各自的使用场景是什么
RxJava和EventBus的区别?好奇怪
一个类中声明private static Bitmap会引起什么问题,主要考察的是内存泄露
ScrollView和Listview的区别?
listview加载图片会有什么问题,如果引起图片错位是什么原因导致的?怎么解决?
多线程和安全问题
事件冲突
一些常用的 list,map 原理,以及子类之间的差别
bitmap局部加载
IntentService、HandlerThread