我在下面有一段代码:
class Util {
private static final Map<String, String> MY_MAP;
static {
Map<String, String> tmpMap = new TreeMap<String, String>();
tmpMap.put("key1", "val1");
tmpMap.put("key2", "val2");
tmpMap.put("key3", "val3");
MY_MAP = Collections.unmodifiableMap(tmpMap);
}
public static String getVal(String key) {
return MY_MAP.get(key);
}
}
MY_MAP能否始终保留tmpMap?或者换句话说,GC是否可能回收使得MY_MAP无法访问的tmpMap?
答案 0 :(得分:3)
返回的地图只是一个“视图”,它包裹着传入的地图。
是的,只要#include <iostream> //(Normally formatted correctly running into error when posting
#include <cmath>
#include <fstream>
#include <string>
#include <iomanip>
#include <sstream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <algorithm>
void search(int ab[], int number_used, int target);
using namespace std;
stringstream ss;
int main()
{
int a=97;
int b=98;
int c=99;
int d=100;
int e=101;
int f=102;
int g=103;
int h=104;
int i=105;
int j=106;
int k=107;
int l=108;
int m=109;
int n=110;
int o=111;
int p=112;
int q=113;
int r=114;
int s=115;
int t=116;
int u=117;
int v=118;
int w=119;
int x=120;
int y=121;
int z=122;
char number_1[432];
cout << "Enter text:\n";
cin >> number_1;
long xb;
xb=strlen(number_1);
long ci=0;
int bruh[xb];
for (long bi=0; bi<xb; bi++)
{
bruh[bi]=number_1[bi];
}
sort(bruh, bruh+xb);
search(bruh,xb,a);
}
void search(const int ab[], int number_used, int target)
{
int a=97;
int b=98;
int c=99;
int d=100;
int e=101;
int f=102;
int g=103;
int h=104;
int i=105;
int j=106;
int k=107;
int l=108;
int m=109;
int n=110;
int o=111;
int p=112;
int q=113;
int r=114;
int s=115;
int t=116;
int u=117;
int v=118;
int w=119;
int x=120;
int y=121;
int z=122;
int index=0;
int count=0;
bool found=false;
while ((!found) && (index < number_used))
{
if(target==ab[index])
{
found=true;
count++;
index++;
}
else
{
index++;
}
}
if (count>0)
{
}
}
还活着,tmpMap
就会被保留。由于MY_MAP
是MY_MAP
字段,static final
将被保留basically forever。
返回指定地图的不可修改视图。 [...]对返回的地图上的查询操作“通读”到指定的地图[...]。
答案 1 :(得分:3)
或者换句话说,GC是否可能会回收使得MY_MAP无法访问的tmpMap?
不,永远不会。 MY_MAP
对tmpMap
有一个(强烈)引用,因此无法收集。
一般情况下,GC绝不会做这样的事情。除了特殊情况(WeakHashMap
和类似情况)之外,你永远不会看到它有效。