Java String#split()-创建内存泄漏[处于保留状态]

问题描述 投票:-2回答:1

无法理解splitjava.lang.String方法如何导致内存泄漏?示例-

private boolean isValidHostName(String hostName)
{
    ValidationHandler handler = ValidationHandler.INSTANCE;
    boolean isValid =
            hostName != null && (hostName.toLowerCase(ENGLISH).startsWith("ws://") || hostName
                    .toLowerCase(ENGLISH).startsWith("wss://"));
    if (isValid)
    {
        @SuppressWarnings("null")
        String[] splits = hostName.split("//");
        if (splits.length == 2)
        {
            if (splits[1].indexOf(":") != -1)
            {
                splits = splits[1].split(":");
                try
                {
                    int portNum = Integer.parseInt(splits[1]);
                    isValid = (handler.validateIpAddress(splits[0]) || handler
                            .validateDomain(splits[0], false)) && (portNum >= 0
                            && portNum <= 65535);
                }
                catch (NumberFormatException e)
                {
                    isValid = false;
                }

            }
            else
            {
                isValid = handler.validateIpAddress(splits[1]) || handler
                        .validateDomain(splits[1], false);
            }
        }
        else
        {
            isValid = false;
        }
    }
    if (!isValid)
    {
        errorStrBuilder.append("\nInvalid hostname specified.");
    }

    return isValid;
}

以及如何解决该问题?

[很少有人问清楚问题,所以简而言之-

  1. String#split()会导致内存泄漏吗?
  2. 如果是?那帽子怎么解决?特别是在上面的示例中。
java memory-management
1个回答
0
投票

我从没碰到split()本身引起内存泄漏的说法。

[如果他们指的是substring(),指的是原始的char[](因为split()内部使用了substring),则在Java 7u6中进行了更改,因此,除非您在旧版Java上运行,否则不应该”也不成问题。

© www.soinside.com 2019 - 2024. All rights reserved.