首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >冷冻日历-为什么?

问冷冻日历-为什么?
EN

Stack Overflow用户
提问于 2012-02-25 13:01:28
回答 2查看 55关注 0票数 0

作为一个实验,我运行了以下代码片段(简化):

代码语言:javascript
复制
public class SGamePlay extends Activity implements View.OnClickListener
{
    Calendar GlobalCal = null;

    public void onCreate(Bundle savedInstanceState) 
    {
        GlobalCal = Calendar.getInstance();
    }

    long time_in_ms()
    {
        long ans = -1;
        long ans2 = -1;

        Calendar LocalCal = Calendar.getInstance();

        ans = LocalCal.getTimeInMillis();

        ans2 = GlobalCal.getTimeInMillis();

        Log.e("game","ans="+ans+" ans2="+ans2);

        return ans;
    }
    // much more code here...
}

time_in_ms()函数是从子线程调用的。问题是,虽然ans似乎是一个正确的、不断更新的值,但ans2在其初始值时似乎已冻结。这怎么可能是?

编辑:我需要解决这个问题,因为我想减少程序中垃圾收集的需求。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-25 13:03:34

Calendar被认为是日历中的“标记”。它更像是一个时间点,而不是当前时间的接口。(否则它为什么要设置函数呢?)

因此,ans2被“冻结”的原因是,GlobalCal.getTimeInMillis();将始终引用在构造函数中调用Calendar.getInstance()的时间(您曾经这样做过)。

我需要解决这个问题,因为我想减少程序中垃圾收集的需求。

垃圾收集是你程序的瓶颈吗?Calendars的数量是GC的瓶颈吗?你分析过你的程序了吗?

算了吧..。代之以呼叫System.currentTimeMillis。

票数 1
EN

Stack Overflow用户

发布于 2012-02-25 13:05:04

GlobalCal是在oncreate方法中初始化的。在那之后,它没有修改。那你想怎么改变呢?

顺便说一句,java中的变量名以小写字母开头,并遵循camel大小写。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9444224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档