简介: 目前手机SOC的性能越来越少 , 很多程序员在终端程序的开发过程中也不太注意性能方面的优化 , 尤其是不注意对齐和分支优化 , 但是这两种问题一旦出现所引发的问题 , 是非常非常隐蔽难查的 , 不过好在项目中用到了移动端的性能排查神器友盟U-APM工具的支持下 , 最终几个问题得到了圆满解决 。
【data|终端卡顿优化的全记录】我们先来看对齐的问题 , 对齐在没有并发竞争的情况下不会有什么问题 , 编译器一般都会帮助程序员按照CPU字长进行对齐 , 但这在终端多线程同时工作的情况下可能会隐藏着巨大的性能问题 , 在多线程并发的情况下 , 即使没有共享变量 , 也可能会造成伪共享 , 由于具体的代码涉密 , 因此我们来看以下抽象后的代码 。
public class Main {
public static void main(String[] args) {
final MyData data = https://www.sohu.com/a/new MyData();
new Thread(new Runnable() {
public void run() {
data.add(0);
}
}).start();
new Thread(new Runnable() {
public void run() {
data.add(0);
}
}).start();
try{
Thread.sleep(100);
} catch (InterruptedException e){
e.printStackTrace();
}
long[][] arr=data.Getitem();
System.out.println("arr0 is "+arr[0]+"arr1 is"+arr[1]);
}
}
class MyData {
private long[] arr={0,0};
public long[] Getitem(){
return arr;
}
public void add(int j){
for (;true;){
arr[j]++;
}
}
}
在这段代码中 , 两个子线程执行类似任务 , 分别操作arr数组当中的两个成员 , 由于两个子线程的操作对象分别是arr[0]和arr[1]并不存在交叉的问题 , 因此当时判断判断不会造成并发竞争问题 , 也没有加synchronized关键字 。
但是这段程序却经常莫名的卡顿 , 后来经过多方的查找 , 并最终通过友盟的卡顿分析功能我们最终定位到了上述代码段 , 发现这是一个由于没有按照缓存行进行对齐而产生的问题 , 这里先将修改完成后的伪代码向大家说明一下:
public class Main {
public static void main(String[] args) {
final MyData data = https://www.sohu.com/a/new MyData();
new Thread(new Runnable() {
public void run() {
data.add(0);
}
}).start();
new Thread(new Runnable() {
public void run() {
data.add(0);
}
}).start();
try{
Thread.sleep(10);
} catch (InterruptedException e){
e.printStackTrace();
}
long[][] arr=data.Getitem();
System.out.println("arr0 is "+arr[0][0]+"arr1 is"+arr[1][0]);
}
}
class MyData {
private long[][] arr={{0,0,0,0,0,0,0,0,0},{0,0}};
public long[][] Getitem(){
return arr;
}
public void add(int j){
推荐阅读
- 产品|产品科研和品牌输出为基准点,雷炎科技建造品牌服务终端能力
- 峰会|TalkingData T11 2021 数据智能峰会线上举办,探寻赋能增长之道
- CBNData|超四成消费者追求家的安全感,家居向全屋智能进阶 |CBNData报告
- 华为|华为墨水屏平板曝光:支持智慧识屏一键接续,超级终端流转文章
- 控制|Azure Database for MySQL Flexible Server上线
- 手机|展锐第二代5G芯片平台实现终端量产,搭载手机明年上市
- 哈曼卡顿|联想 17 英寸 ThinkBook Plus 更多渲染图曝光,运行 Win11
- 哈曼卡顿|明晚发 小米12/Pro带你提前看 | 一加10Pro开启预约
- 智能汽车|22个月,数据驱动“新型终端”驶上新赛道
- 硬件|全国首家终端快充行业协会正式成立