[ https://issues.apache.org/jira/browse/CASSANDRA-3605?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Zoltan Farkas reopened CASSANDRA-3605: -------------------------------------- Hi current implementation might work, but I propose the following: private static final Logger LOG= LoggerFactory.getLogger(Hex.class); private static final Constructor<String> stringConstructor; static { Constructor<String> cons = null; try { // test use of protected constructor cons = getProtectedConstructor(String.class, int.class, int.class, char[].class); char [] c = new char [] {}; cons.newInstance(0, c.length, c); } catch (Exception ex) { // TODO improve this in java7 LOG.warn("Not Using String instantiation optimization", ex); } stringConstructor = cons; } ..... /** * Create a String from a char array with zero-copy (if available), using reflection to access a package-protected constructor of String. * */ public static String wrapCharArray(char[] c) { if (c == null) return null; String s = null; if (stringConstructor != null) { try { s = stringConstructor.newInstance(0, c.length, c); } catch (Exception e) { throw new RuntimeException(e); } } return s == null ? new String(c) : s; } /** * Used to get access to protected/private constructor of the specified class * @param klass - name of the class * @param paramTypes - types of the constructor parameters * @return Constructor if successful, null if the constructor cannot be * accessed */ public static Constructor getProtectedConstructor(Class klass, Class... paramTypes) throws NoSuchMethodException { Constructor c; c = klass.getDeclaredConstructor(paramTypes); c.setAccessible(true); return c; } This implementation has 2 advantages: 1. Exception is not lost, and we know the fact that the optimization does not work. 2. In case the optimization does not work performance will be an order of magnitude better due to the fact that Exceptions will not be created at every string allocation attempt. let me know if you have any questions > Exception swallowing in Hex.java > -------------------------------- > > Key: CASSANDRA-3605 > URL: https://issues.apache.org/jira/browse/CASSANDRA-3605 > Project: Cassandra > Issue Type: Improvement > Affects Versions: 1.0.5 > Environment: all > Reporter: Zoltan Farkas > Priority: Minor > > org.apache.cassandra.utils.Hex line 94: > try > { > s = stringConstructor.newInstance(0, c.length, c); > } > catch (Exception e) > { > // Swallowing as we'll just use a copying constructor > } > this code does not comply with coding standard, caught exception needs to be > rethrown as RuntimeException -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira