无法理解split
的java.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;
}
以及如何解决该问题?
[很少有人问清楚问题,所以简而言之-
我从没碰到split()
本身引起内存泄漏的说法。
[如果他们指的是substring()
,指的是原始的char[]
(因为split()
内部使用了substring
),则在Java 7u6中进行了更改,因此,除非您在旧版Java上运行,否则不应该”也不成问题。