【问题标题】:Log4j Maximum String Length OR Java String Concatenation Error?Log4j 最大字符串长度或 Java 字符串连接错误?
【发布时间】:2010-01-24 00:54:01
【问题描述】:

在 Solaris 10 上运行,当我使用 Apache Log4j 记录器点击 LOG.debug 语句时遇到问题。下面的代码块演示了基本场景:

public class MyClass {
   private static final Logger LOG = Logger.getLogger(MyClass.class.getName());
   private LinkedHashMap<String, String> myMap = 
         new LinkedHashMap<String, String>();

   public static void main(String[] args) {

      // A really long String, but certainly not exceeding 2^31 - 1 characters 
      //long
      String reallyLongString = "A really, really, really...long String";
      String key = "keyToReallyLongString";

      // When this line is executed, Solaris instantly and completely logs me off 
      // of the system
      LOG.debug("Adding to myMap[" + key + "]: " + reallyLongString);
   }
}

有什么想法吗?

【问题讨论】:

  • 我很难相信您会被注销。进程崩溃了,当然,但已注销?您将不得不提供一个实际失败的测试用例,而不是一个基本场景......
  • 不幸的是,我无法在测试应用程序中复制它,也无法发布实际代码。我们确实在其他情况下偶尔会看到这种行为,但这是唯一一次保持一致。奇怪,真的……我不知道这值得花更多的时间。那一行调试输出不值得花这么多时间……

标签: java string log4j solaris


【解决方案1】:

如果您有任何类型的进程限制,您可能会遇到它们。通过执行该字符串连接,您将使用 至少 (reallyLongString.length() + key.length()) * 2 字节。如果这足以让你超越极限……

【讨论】:

  • 虽然我仍然认为字符串长度不是问题(根据您给出的计算,它大约是 27,000 个字符),但我认为您正在做一些事情。在进一步调查中,我似乎只能在 Eclipse IDE 中运行时复制此问题。您是否建议查看特定的内存设置?或者,是否有我不知道的特定于 Eclipse 富客户端平台应用程序的设置?
  • @Adam:恐怕没有……我实际上从未见过这个问题,只是抛出一些想法看看它是否有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多