我在类中有一个方法,我可以在其中创建这样的字符串:
private void log(HttpServletRequest request, HttpServletResponse response) {
String result = "Following request " + request.getRequestURI() + " yielded " + response.getStatus();
log.info(result);
}
我的问题是,result
字符串生成了数百万次。对堆内存有影响吗?
我目前的理解是每个方法都有自己的堆内存分配。方法完成执行后,所有局部变量从内存中消失。
我的另一种理解是,字符串存储在全局堆内存中,它们会在下一个垃圾收集周期中被清理掉。
有人可以解释一下吗,我将不胜感激。
最佳答案
该方法每次执行时,都会在堆内存中创建一个String对象,并在栈上为其分配一个本地引用。此本地引用将传递给 log.info()
,并假设该方法不会将结果保存在任何地方,一旦它返回,堆中的该对象将有资格进行垃圾回收。
只要您的结果
没有对它的永久引用,它就不会对您的程序内存产生永久影响。
关于java - 在本地方法和堆内存中创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097120/