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

Java 从http请求获得的字符串是否会保存在常量池中?,java,string,permgen,Java,String,Permgen,我理解声明为以下内容的字符串将保存在常量池中: 例如 然后测试将保存在池中 我想知道字符串是从方法中获取的,例如从web表单发布的请求参数中获取的,还是从文件中读取的。 例如 名称中的值是否保存在常量池中?我想不是吧?因为否则很快就会出现内存不足的perm gen错误 谁能给我点化一下吗 谢谢否。字符串的插入时间和方式在和JLS中有描述。基本上,文本和(其他)字符串常量是自动插入的,但除非您显式地这样做,否则其他任何东西都不可能自动插入 作为一个补充,您似乎假设内部字符串永远不会被垃圾收集。我在

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

例如

然后测试将保存在池中

我想知道字符串是从方法中获取的,例如从web表单发布的请求参数中获取的,还是从文件中读取的。 例如

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

谁能给我点化一下吗


谢谢

否。字符串的插入时间和方式在和JLS中有描述。基本上,文本和(其他)字符串常量是自动插入的,但除非您显式地这样做,否则其他任何东西都不可能自动插入


作为一个补充,您似乎假设内部字符串永远不会被垃圾收集。我在Java文档中没有看到任何东西真正这样说,并声称他的测试表明它们实际上是GC'd,这表明intern池使用某种形式的弱引用。

常量池中只有字符串文本。其他任何东西都需要显式调用
intern
才能到达。所以“name”中的值不会保存在常量池中,很快就会被垃圾收集?感谢语以一句“不”开头。这毕竟是最基本的答案。谢谢,是的,我假设被拘留的字符串永远不会被垃圾收集,但我自己做了一些测试,结果它没有给我永久性内存不足错误。@grumpynerd:很高兴这有帮助+1我测试了来自那个博客的代码,可以确认这个发现。谢谢TJ,这意味着我们不需要担心字符串的内存问题,例如,如果有人从webform发布一个巨大的字符串,应用程序用本地方法处理它,那么它最终会被垃圾回收。
String a = "test'; 
String name = request.getRequestParameter("name");