原创

静的フィールドは、非静的フィールドと同じメモリを消費しても、ガベージ コレクションの対象になりにくいですか?

温馨提示:
本文最后更新于 2024年04月12日,已超过 47 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

時期尚早な最適化が最善の根本であり、おそらく今日ではもう何の違いも生じていないことを私はよく知っていることを知っておいてください。知りたいと思っています。使用するメモリを最小限にする必要があるアプリの場合、例えばしきい値がある場合、静的なフィールドを使用するのが急遽要求、当面非静的なフィールドを使用するのが突然で頼む? 静的なフィールドがあるとガベージがそれらのフィールドの割り当てを解除する可能性が危うくなるが、当然のことながら、実行中に現在使用していないものが割り当てられる危険性があるでは、非静的フィールドは常に割り当てと割り当て解除が行われるため、より多くのメモリを必要とする経験則なのでよろしくお願いします。

次のフィールドとメソッドがあります。

private static final Pattern SEE_DETAILS_PATTERN = Pattern.compile(Pattern.quote("SEE DETAILS"), Pattern.CASE_INSENSITIVE);
private static final Pattern DISMISS_PATTERN = Pattern.compile(Pattern.quote("DISMISS"), Pattern.CASE_INSENSITIVE);

private static final float CONST_X = 2.0f;
private static final float CONST_Y = 1.574f;


public static Point getPoint(Point displaySize)
{
  return new Point(displaySize.x/CONST_X, displaySize.y/CONST_Y);
}
 

これらの値はクラスのすべてのインスタンスで同じであるため、値を静的にしていることは理にかなっていますが、繰り返しになりますが、この特定のケースのシナリオでは、可能な限り多くのメモリを使用可能にし、しきい値に達しないようにする必要があります。

編集:

これは、静的なフィールドを使わずにパターンを使用する方法の例です。

 public boolean example()
    {
        if(Pattern.compile(Pattern.quote("test1"), Pattern.CASE_INSENSITIVE).matcher(this.text).find())
            return true;
        if(Pattern.compile(Pattern.quote("test2"), Pattern.CASE_INSENSITIVE).matcher(this.text).find())
            return true;
        if(Pattern.compile(Pattern.quote("test3"), Pattern.CASE_INSENSITIVE).matcher(this.text).find())
            return true;

        return false;
    }

このインスタンスメソッドは実行中に複数回呼び出されます。

正文到此结束
热门推荐
本文目录