java - 在本地方法和堆内存中创建字符串

标签 java

我在类中有一个方法,我可以在其中创建这样的字符串:

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/

相关文章:

java - 如何在swing应用程序中获取鼠标指针组件

java - 将 "multiple"JPA 事务执行到单个 "transaction"

java - 删除重复项并找到最大元素

java - Spring @Scheduled注入(inject)延迟时间

java - 用逗号作为小数点分隔符来解析Double的最佳方法?

java - Inno 安装程序 : Extending Windows default apps list

java - 使用 JAXB 根​​据属性将 XML 解码为不同的对象

java - 摆脱 <arg0>

java - 编辑文本应包含字符和数字

java - 根据元素对数组进行分组