Android知识点

1.混淆做了哪些事情?

  • 压缩:从应用及依赖库中删除没有使用的类、方法、字段,有助于规避64位方法数的限制
  • 优化:通过代码分析移除没有使用的代码,甚至重写代码
  • 混淆:使用没有意义的简短名称,重命名类、方法、字段,增加逆向难度。
  • 预校验:对于面向java6和java7 jvm的class文件,编译时可以把预校验信息添加到类文件中,从而加快运行时类加载效率,但是对于Android平台无效。

2.double check的单例为什么要用volatile修饰?
答:对象的创建可简化为以下三个步骤:

  • jvm分配内存空间
  • 对象初始化
  • 引用指向内存地址
    主要是为了类加载时虚拟机对对象创建步骤进行重排,先执行了第三步,然后再执行第二步。多线程时,一个线程先执行引用指向内存地址,这个时候另一个线程中获取到的引用因为已经指向了内存地址,所以不为空,但是对象并没有初始化完成,所以使用时会出现异常。使用volatile可以防止对象创建执行顺序的重排,避免出现异常。

你可能感兴趣的:(Android知识点)