onDraw()メソッドの呼び出しスタックに3レベル下のメソッドがあります。これは、再描画ごとに数百回、場合によっては数千回と呼ばれます。onDraw()メソッドの詳細なプロファイリングを実行しましたが、次のメソッドが全体の14%を占めていることがわかりますので、一見の価値があります。ピンチズームとドラッグ操作中にフレームレートを上げる必要があります。
private void getVisiblePointsFromPath(){
double longRads = longitude * (Math.PI / 180);
double latRads = latitude * (Math.PI / 180);
...
}
メソッドが終了し、doubleがスコープ外になると、GCの対象になると思いますが、これがいつ発生するかは非決定的です。
これを行うことで得られるものはありますか?
public class GisView extends ImageView{
private double longRads;
private double latRads;
private void getVisiblePointsFromPath(){
longRads = longitude * (Math.PI / 180);
latRads = latitude * (Math.PI / 180);
...
}
}
このイディオムにより、doubleがヌルになり、パスごとに再割り当てされると思いますが、追加のガベージが発生しないため、発生するGCの量が減少します。それとも、VMはそれよりも賢いですか?
私の質問はそれ自体が「どちらが速いか」ではなく、どちらがGCの減少につながる可能性があるかについてであることに注意してください。速度の違いを測定することはできますが、DalvikVMとAndroidGCについて十分に理解していないため、ゴミが少なくなる原因を予測できません。