我想知道2种不同的启动runnables方法的性能和cpu / ram要求
我有一些代码每10ms收集一次传感器数据,并将值插入后台线程的数据库中(使用单个线程执行程序). Executor服务创建如下:
executor = Executors.newSingleThreadExecutor();
一种方法是这样的……
public void onSensorChanged(SensorEvent event) {
//get sensor values
//insert into database
executor.execute(new Runnable(){
//database insert code here
});
}
我在教程中经常看到这个方法,但因为我每隔10ms就这样做,所以感觉资源密集,因为每次检测到传感器值更改时我都会创建一个新对象.这个新对象是否每10毫秒被覆盖一次?或者在创建新对象时它是否会占用越来越多的RAM?
我已经重构了我的代码看起来更像这样:
executor = Executors.newSingleThreadExecutor();
myRunnable = new MyRunnable();
class MyRunnable implements Runnable {
public void run() {
//database insert code here
}
}
public void onSensorChanged(SensorEvent event) {
//get sensor values
//insert into database
executor.execute(myRunnable);
}
我的想法是,我只实例化一个对象一次,而不是每次传感器改变时都这样做.我是否认为RAM的使用率低于之前的方法?有没有更有效/更好的方法来完成这项任务?
最佳答案 每10毫秒创建一个新的Runnable实例肯定会导致垃圾收集器更频繁地启动并可能影响您的应用程序性能.我认为你的第二种方法要好得多.