|
|
|
|
|
by bill3478
1066 days ago
|
|
Is not that OpenJDK developers can't prevent these, but there's a forbidding cost for doing so. The simplest "safe" way of doing this involves defensively copying the input argument. However, the `compress` function will likely make yet another smaller copy, making the constructor very allocation and CPU intensive. In fact, due to the fixed array size in Java, all thread-safe implementations must either allocate two arrays to hold the two possible encodings, which guarantees one piece of garbage, or iterating the input array twice. For such a core class like String, this is probably unacceptable cost. And the constructor is not documented to be thread-safe, so no one should expect it to. In reality, there are much more impactful data structures to abuse in Java. |
|