1. hashmap hashtable
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢
Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。
Iterator与Enumeration的区别
Iterator是一个接口,包含三个方法:
hasNext()
next()
remove()
Enumeration也是一个接口,它是一个遗留类,集合类中只有Vector和HashTable实现了该接口。它包含了两个方法:
1. hasMoreElements()
2. nextElement()
由接口定义可知,Iterator在遍历时可以对元素进行删除操作;在多线程环境下,当遍历过程中有其他线程对集合类的结构进行修改(删除或添加元素,不包括修改某个元素的值),载单线程环境下,在遍历过程中通过集合自己的方法(put或是remove)修改集合结构,则会抛出ConcurrentModification异常。而Enumeration是一种Read-only。
2. GC原理
GC root, 递归, mark-swipe, GC-alloc: stop the world
3. 性能指标:
app启动速度,加载某activity速度, 游戏帧率, drop frame, 界面切换,卡顿? 显示GPU条形图
大内存使用/内存泄漏,GC -》 https://mp.weixin.qq.com/s/CUU3Ml394H_fkabhNNX32Q?
kGcCauseForAlloc ,当要分配内存的时候发现内存不够的情况下引起的GC,这种情况下的GC会stop world
kGcCauseBackground,当内存达到一定的阀值的时候会去出发GC,这个时候是一个后台gc,不会引起stop world
kGcCauseExplicit,显示调用的时候进行的gc,如果art打开了这个选项的情况下,在system.gc的时候会进行gc
不恰当持锁导致系统无法正常休眠
工作线程优先级未设置为Process.THREAD_PRIORITY_BACKGROUND,导致后台线程抢占UI线程cpu时间片,阻塞渲染操作;
1. traceview systrace 过度绘制 HierarchyView , Tracer for OpenGL ES
2. 内存泄漏分析
leakcanary
被杀唤醒: jobscheduler, 厂商push,接受push信息广播
android P
tensorflow lite
lmk kernel->native
priate api
1)应用待机分组:Android P 新增应用待机分组功能,让系统根据用户的使用情况而限制应用调用 CPU 或网络等设备资源; -- - app分组 bucket, 对不常用的限制
2)应用后台限制:Android P新增后台限制功能,若应用出现 Android Vitals 内所描述的不良行为,系统将提醒用户限制该应用访问设备资源;如
Core vitals:
ANR rates
Crash rates
Excessive wakeups
Stuck partial wake locks
All other vitals:
Excessive background Wi-Fi scans
Excessive background network usage
App startup time
Slow rendering
Frozen frames
Permission denials
3)省电模式优化:Android P 优化了现有的省电助手功能,在启用该功能后,系统将对所有应用的后台运行实施加以限制;
4)低耗电模式:当用户一段时间没有使用设备时,设备将进入低耗电模式,所有应用都将受到影响。 Android P 并未针对低电耗模式作出任何更改。