在下面的代码中,什么决定了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;
}
答案 0 :(得分:0)
您已将aMap声明为WeakHashMap
类型。
此外,您正在呼叫System.gc()
。
一个WeakHashMap
。
第一:调用System.gc()并不能保证垃圾收集会立即发生。这只是垃圾收集者的一个建议,你会喜欢&#39; gc跑。
其次:来自WeakHashMap的文档:
基于哈希表的Map接口实现,带有弱键。当其密钥不再正常使用时,WeakHashMap中的条目将自动被删除。更准确地说,给定密钥的映射的存在不会阻止密钥被垃圾收集器丢弃,即,可以最终化,最终化,然后回收。当一个键被丢弃时,它的条目将被有效地从地图中删除,因此该类的行为与其他Map实现的行为略有不同。
因此,在将emp添加到aMap后立即将emp设置为null。 因此,不再引用emp和地图中的条目,并且可以是gc&#d; d。 但是,请记住,当gc发生时,确定性并不确定。