是什么决定了此代码中的调用量

时间:2016-02-21 02:41:09

标签: java

在下面的代码中,什么决定了aMap大小为0所需的调用量?我已经运行了几次,有时只需要几次电话,有时则需要几百次。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
    int n, i, input_cases,x;
    scanf("%d", &input_cases);
    float *results = malloc(input_cases*sizeof(float));
    int increment=0;

    for (x=0; x<input_cases; x++)
    {
        float num[100], sum[2] = {0.0}, average[2] = {0.0};
        printf("Enter the total amount of numbers: ");
        if (scanf("%d", &n) != 1)    /* validates input */
        {
            fprintf (stderr, "error: invalid input.\n");
            return 1;
        }
        for (i = 0; i < n; i++)
        {
            if (scanf("%f", &num[i]) != 1)   /* validate input */
            {
                fprintf (stderr, "error: invalid input.\n");
                return 1;
            }
        }
        /* sum/average 1st-half */
        for (i = 0; i < n/2; ++i)
        {
            sum[0] += num[i];
            average[0] = sum[0] * 2 / n;
        }
        /* sum/average 2nd-half */
        for (i = n/2; i < n; ++i)
        {
            sum[1] += num[i];
            average[1] = sum[1] * 2 / n;
        }
        if (average[0]>average[1])
        {
            results[increment++]=average[0];
            printf("%.6f\n", average[0]);
        }
        else
        {
            results[increment++]=average[1];
            printf("%.6f\n", average[1]);
        }
    }
    for (x=0; x<input_cases; x++)
    {
        printf("%.6f\n", results[x]);
        //free(results);
    }

    free(results);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您已将aMap声明为WeakHashMap类型。

此外,您正在呼叫System.gc()。 一个WeakHashMap

第一:调用System.gc()并不能保证垃圾收集会立即发生。这只是垃圾收集者的一个建议,你会喜欢&#39; gc跑。

其次:来自WeakHashMap的文档:

  

基于哈希表的Map接口实现,带有弱键。当其密钥不再正常使用时,WeakHashMap中的条目将自动被删除。更准确地说,给定密钥的映射的存在不会阻止密钥被垃圾收集器丢弃,即,可以最终化,最终化,然后回收。当一个键被丢弃时,它的条目将被有效地从地图中删除,因此该类的行为与其他Map实现的行为略有不同。

因此,在将emp添加到aMap后立即将emp设置为null。 因此,不再引用emp和地图中的条目,并且可以是gc&#d; d。 但是,请记住,当gc发生时,确定性并不确定。