原创

静态字段即使消耗与非静态字段相同的内存,也不太容易被垃圾收集?

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

请知道,我很清楚过早的优化是万恶之源,现在可能已经不再有任何区别了。但出于教育目的,我仍然想知道。对于必须使用少量内存的应用程序,假设有一个阈值,最好使用静态字段还是非静态字段?因为如果拥有静态字段使得垃圾不可能重新分配它们,那么当然在执行过程中我们可能会面临分配一些我们当前不使用的东西的风险。那么,拥有非静态字段是获得更多内存的经验法则,因为它们会不断分配和释放?

假设我有这些字段和方法:

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;
    }

该实例方法在执行过程中被多次调用。

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