【问题标题】:what will happen if our String Memory is full in Java 8 in a real life application如果我们的字符串内存在 Java 8 中已满,会发生什么?
【发布时间】:2022-08-22 21:53:31
【问题描述】:

我目前正在从事过去 4 年的 java 8 项目。在一次采访中,有人问我如果您的字符串池已满,会发生什么。从来没有遇到过。已经搜索了很多没有找到任何令人满意的现实生活应用程序的答案。

  • 简短的回答 - OutOfMemoryError。您没有指定是否有大量编译时字符串常量或字符串在运行时使用intern() 重复添加到池中?
  • 字符串常量
  • 这回答了你的问题了吗? What happens if String Pool runs out of memory?

标签: java-8 string-pool interview


【解决方案1】:

你得到 java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space from java 7 onwards 。而 java.lang.OutOfMemoryError: PermGen space in old version of java like 6.
Related Post

【讨论】:

    【解决方案2】:

    您应该回问“字符串池已满”应该是什么意思。 JVM 的运行时字符串池是一个哈希表参考对于对象,字符串对象和每个对象一样驻留在堆内存中。

    面试官的意思有两种可能:

    1. 字符串的数量超过了哈希表的大小。这是一个特定于实现的问题。广泛使用的 HotSpot JVM 确实有一个固定大小的表,但是它可以处理冲突,所以只会稍微降低性能。这只会影响intern() 的调用或第一次执行包含字符串常量的代码,因此您可能永远不会注意到。

    2. 没有足够的内存来添加字符串。这与没有足够内存的其他场景没有什么不同。例如。如果String 的分配失败,那么是否有意将其添加到池中并不重要。通常的回复是OutOfMemoryError

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 2019-09-30
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多