从http请求获得的字符串是否会保存在常量池中?

时间:2013-03-09 11:11:53

标签: java string permgen

我理解声明为以下内容的String将保存在常量池中:

例如

String a = "test'; 

然后测试将保存在池中

我想知道从一个方法中获取String,例如从Web表单发布的请求参数,或从文件中读取。 例如

String name = request.getRequestParameter("name");

名称中的值是否会保存在常量池中?我认为不是吗?因为否则你很快就会出现内存不足的错误?

任何人都可以开导我吗?

由于

1 个答案:

答案 0 :(得分:3)

没有。 String#intern documentation和JLS Section 3.10.5中描述了intern编辑字符串的时间和方式。基本上,文字和(其他)字符串常量是自动实现的,但除非你明确地这样做,否则没有其他内容。

作为一个侧面,你似乎假设被拦截的字符串永远不会被垃圾收集。我没有在Java文档中看到任何实际的内容,并且at least one person声称他的测试表明他们实际上是GC'd,这表明实习池使用了一些形式的弱参考。