学习
2016-09-06 14:51
288 查看
11111111111111111111http://www.cnblogs.com/jiayy/p/4282123.html----android hook
Linux系统的ptrace机制-------进程跟踪机制
MSIL(Microsoft Intermediate language)微软中间语言----反汇编
22222222222222222 http://blog.csdn.net/sahadev_/article/details/52416345 android 官方开发文档training系列课程中文版:性能优化建议
--android官方文档:性能优化建议
合理复用已有的对象
JIT(即时编译器)----(just-in-time compiler)即时编译器
----------------------
返回的字符串的方法,该方法返回的字符串总是被接在一个stringbuffer对象后面、
更改为直接跟在stringbuffer的后面返回
Stringbuffer sbf = new string buffer();
System.out.printin(sbf.capacity())-----16--------系统自动分配容量,默认是16个字符。
System.out.println(dbf.llength())--------0---因为没有赋值,缓冲对象的长度是0
------------------------
如果不需要访问对象的属性,就可以将方法设置为静态方法。这样调用会增加15%-20%的速度
static int a = 42;
static final int a =42;
----------------------------------------------------------------
C++用get/set 因为编译器通常会进行内联访问
android最好是可以直接访问对象的字段
内联扩展是用来消除函数调用时的时间开销
(内联函数是指inline关键字修饰的函数。在类内定义的函数被默认成内联函数)
(内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质)
/*
最后我来总结一下inline的注意事项:
1、内联函数类似宏替换的方式来实现,我们可以看出这其实是用空间换时间的一种做法,仅仅省去了函数调用的开销,所以提高了函数执行效率。所以执行函数体内代码的时间相比教育函数调用的时间开始较大的时候,我们不宜用内联函数。
所以,再有if语句或switch语句或者递归语句时,我们通常不使用内联函数。内联函数只适合于只有1~5行的小函数。
2、内联函数的定义必须出现在内联函数第一次调用之前。
3、关键词inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前并没有用。
*/
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内敛函数,需要看编译器对该函数定义的具体处理。
对于能否形成内联函数,在C++ primer 中有说过 :内敛说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。
使用本地方法要当心,如果你需要使用本地代码,读一读JNI tips
Java native interface。
JNI定义了2个数据结构,java虚拟机和JNIEnv,这两个本质上都是指向函数表的指针
(在c++版本中,他们是2个类,包含了成员函数,这些成员函数都是jni的函数)
JNI定义了2个数据结构, java虚拟机和JNIEnv, 这两个本质上都是指向函数表的指针. (在C++版本中, 他们是2个类, 包含了成员函数, 这些成员函数都是JNI的函数.) java虚拟机提供"调用接口"函数, 它允许你创建和销毁java虚拟机, 理论上你可以在一个进程里有多个java虚拟机. 但Android只允许1个.
JNIEnv提供了大部分的JNI函数, 在C语言里, 你所有的native函数都要接收JNIEnv作为第一个参数.
JNIEnv用在线程本身的存储, 这样会导致你不能在多个线程里共享JNIEnv, 如果部分代码没有办法获得JNIEnv, 那么可以把java虚拟机共享, 通过java虚拟机来获得这个线程的JNIEnv.
C语言声明的JavaVM和JNIEnv与C++声明的不同, "jni.h"头文件里使用宏定义把C和C++的声明作了区别. 基于这原因, 把JNIEnv作为参数放在头文件里是不好的方式, 这导致在C和C++都用这个头文件时会有很大的麻烦.(也可以这么说: 如果你的头文件需要定义#ifdef __cplusplus, 那么你必须对这个指向JNIEnv的头文件作一些改动来同时适应C和C++语言.
在没有JIT的设备上,通过缓存访问属性要比反复访问属性要快将近20%的速度。在JIT的设备中,属性访问的花销与本地访问的花销基本一致,所以这不是一项有多少价值的优化手段,除非你觉得这样做的话代码更易读(这对static,final,常量同样适用)。
============================================
333333333333333333333333333333JNIJNIJNIJNIJNIJNI
完全看不懂
JNI编程经验(JNI Tips)http://blog.csdn.net/nicebooks/article/details/17925521
=============================================
44444444444444444444444444444444444444444444
搜狗输入法iOS------http://blog.csdn.net/tangxiaoyin/article/details/52415135
1,键盘调起速度,内存,CPU以及swift3
2,JSPatch和React Native的调研---》dispatch(热修复)
3,FBRetainCycleDetector(Facebook开源的一个内存泄漏检测解决方案)
FastImageCache(Path
团队开发的一个开源库,用于提升图片的加载和渲染速度)的调研
4,从iOS8开始被系统一旦加载,并不能立即释放,而是由系统决定在什么时机释放,且不能完全释放
=========================================================
Linux系统的ptrace机制-------进程跟踪机制
MSIL(Microsoft Intermediate language)微软中间语言----反汇编
22222222222222222 http://blog.csdn.net/sahadev_/article/details/52416345 android 官方开发文档training系列课程中文版:性能优化建议
--android官方文档:性能优化建议
合理复用已有的对象
JIT(即时编译器)----(just-in-time compiler)即时编译器
----------------------
返回的字符串的方法,该方法返回的字符串总是被接在一个stringbuffer对象后面、
更改为直接跟在stringbuffer的后面返回
Stringbuffer sbf = new string buffer();
System.out.printin(sbf.capacity())-----16--------系统自动分配容量,默认是16个字符。
System.out.println(dbf.llength())--------0---因为没有赋值,缓冲对象的长度是0
------------------------
如果不需要访问对象的属性,就可以将方法设置为静态方法。这样调用会增加15%-20%的速度
static int a = 42;
static final int a =42;
----------------------------------------------------------------
C++用get/set 因为编译器通常会进行内联访问
android最好是可以直接访问对象的字段
内联扩展是用来消除函数调用时的时间开销
(内联函数是指inline关键字修饰的函数。在类内定义的函数被默认成内联函数)
(内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质)
/*
最后我来总结一下inline的注意事项:
1、内联函数类似宏替换的方式来实现,我们可以看出这其实是用空间换时间的一种做法,仅仅省去了函数调用的开销,所以提高了函数执行效率。所以执行函数体内代码的时间相比教育函数调用的时间开始较大的时候,我们不宜用内联函数。
所以,再有if语句或switch语句或者递归语句时,我们通常不使用内联函数。内联函数只适合于只有1~5行的小函数。
2、内联函数的定义必须出现在内联函数第一次调用之前。
3、关键词inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前并没有用。
*/
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内敛函数,需要看编译器对该函数定义的具体处理。
对于能否形成内联函数,在C++ primer 中有说过 :内敛说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。
使用本地方法要当心,如果你需要使用本地代码,读一读JNI tips
Java native interface。
JNI定义了2个数据结构,java虚拟机和JNIEnv,这两个本质上都是指向函数表的指针
(在c++版本中,他们是2个类,包含了成员函数,这些成员函数都是jni的函数)
JNI定义了2个数据结构, java虚拟机和JNIEnv, 这两个本质上都是指向函数表的指针. (在C++版本中, 他们是2个类, 包含了成员函数, 这些成员函数都是JNI的函数.) java虚拟机提供"调用接口"函数, 它允许你创建和销毁java虚拟机, 理论上你可以在一个进程里有多个java虚拟机. 但Android只允许1个.
JNIEnv提供了大部分的JNI函数, 在C语言里, 你所有的native函数都要接收JNIEnv作为第一个参数.
JNIEnv用在线程本身的存储, 这样会导致你不能在多个线程里共享JNIEnv, 如果部分代码没有办法获得JNIEnv, 那么可以把java虚拟机共享, 通过java虚拟机来获得这个线程的JNIEnv.
C语言声明的JavaVM和JNIEnv与C++声明的不同, "jni.h"头文件里使用宏定义把C和C++的声明作了区别. 基于这原因, 把JNIEnv作为参数放在头文件里是不好的方式, 这导致在C和C++都用这个头文件时会有很大的麻烦.(也可以这么说: 如果你的头文件需要定义#ifdef __cplusplus, 那么你必须对这个指向JNIEnv的头文件作一些改动来同时适应C和C++语言.
在没有JIT的设备上,通过缓存访问属性要比反复访问属性要快将近20%的速度。在JIT的设备中,属性访问的花销与本地访问的花销基本一致,所以这不是一项有多少价值的优化手段,除非你觉得这样做的话代码更易读(这对static,final,常量同样适用)。
============================================
333333333333333333333333333333JNIJNIJNIJNIJNIJNI
完全看不懂
JNI编程经验(JNI Tips)http://blog.csdn.net/nicebooks/article/details/17925521
=============================================
44444444444444444444444444444444444444444444
搜狗输入法iOS------http://blog.csdn.net/tangxiaoyin/article/details/52415135
1,键盘调起速度,内存,CPU以及swift3
2,JSPatch和React Native的调研---》dispatch(热修复)
3,FBRetainCycleDetector(Facebook开源的一个内存泄漏检测解决方案)
FastImageCache(Path
团队开发的一个开源库,用于提升图片的加载和渲染速度)的调研
4,从iOS8开始被系统一旦加载,并不能立即释放,而是由系统决定在什么时机释放,且不能完全释放
=========================================================
相关文章推荐
- android Thread HandlerThread Looper Message MessageQueue Handler的关系
- 进位和借位问题的研究
- H5—新特性
- 建造者模式——标准化生产
- Android一整套图片解决方案
- QWindowsWindow::setGeometryDp: Unable to set geometry
- 【华为OJ】计算字符串的相似度
- SQL只能提示插件——SQLPrompt
- UIStackView before iOS 9.0
- PHP的运行模式
- HTML5本地存储——Web SQL Database
- [小技巧] Excel 里快速跳到表格的首行或最后一行
- js 文件的上传 分段读取文件 FileReader
- 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
- Android RecyclerView 使用完全解析 体验艺术般的控件
- jquery中attr和prop的区别(转)
- Java 编码 字符集
- Web测试中常见分享问题
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十三)之附加功能-自定义皮肤
- 二十五、本地缓存和网络加载