< prev index next >

src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template

Print this page
rev 49550 : 8201179: Regression due loading java.nio.charset.StandardCharsets during bootstrap
Reviewed-by: sherman


  66     private Map<String,String> aliasMap() {
  67         Map<String,String> map = aliasMap;
  68         if (map == null) {
  69             aliasMap = map = new Aliases();
  70         }
  71         return map;
  72     }
  73 
  74     private Map<String,String> classMap() {
  75         Map<String,String> map = classMap;
  76         if (map == null) {
  77             classMap = map = new Classes();
  78         }
  79         return map;
  80     }
  81 
  82     private Map<String,Charset> cache() {
  83         Map<String,Charset> map = cache;
  84         if (map == null) {
  85             map = new Cache();
  86             map.put("utf-8", java.nio.charset.StandardCharsets.UTF_8);
  87             map.put("iso-8859-1", java.nio.charset.StandardCharsets.ISO_8859_1);
  88             map.put("us-ascii", java.nio.charset.StandardCharsets.US_ASCII);
  89             map.put("utf-16", java.nio.charset.StandardCharsets.UTF_16);
  90             map.put("utf-16be", java.nio.charset.StandardCharsets.UTF_16BE);
  91             map.put("utf-16le", java.nio.charset.StandardCharsets.UTF_16LE);
  92             cache = map;
  93         }
  94         return map;
  95     }
  96 
  97     // Private ASCII-only version, optimized for interpretation during startup
  98     //
  99     private static String toLower(String s) {
 100         int n = s.length();
 101         boolean allLower = true;
 102         for (int i = 0; i < n; i++) {
 103             int c = s.charAt(i);
 104             if (((c - 'A') | ('Z' - c)) >= 0) {
 105                 allLower = false;
 106                 break;
 107             }
 108         }
 109         if (allLower)
 110             return s;
 111         StringBuilder sb = new StringBuilder(n);
 112         for (int i = 0; i < n; i++) {
 113             int c = s.charAt(i);
 114             if (((c - 'A') | ('Z' - c)) >= 0)
 115                 sb.append((char)(c + 0x20));
 116             else
 117                 sb.append((char)c);
 118         }
 119         return sb.toString();
 120     }
 121 
 122     private Charset lookup(String charsetName) {
 123         init();
 124 
 125         // By checking these built-ins we can avoid initializing Aliases and
 126         // Classes eagerly during bootstrap




 127         String csn;
 128         if (charsetName.equals("UTF-8")) {
 129             return java.nio.charset.StandardCharsets.UTF_8;
 130         } else if (charsetName.equals("US-ASCII")) {
 131             return java.nio.charset.StandardCharsets.US_ASCII;
 132         } else if (charsetName.equals("ISO-8859-1")) {
 133             return java.nio.charset.StandardCharsets.ISO_8859_1;
 134         } else {
 135             csn = canonicalize(toLower(charsetName));
 136         }
 137 
 138         // Check cache first
 139         Charset cs = cache().get(csn);
 140         if (cs != null)
 141             return cs;
 142 
 143         // Do we even support this charset?
 144         String cln = classMap().get(csn);
 145         if (cln == null)
 146             return null;
 147 
 148         // Instantiate the charset and cache it
 149         try {
 150             @SuppressWarnings("deprecation")
 151             Object o = Class.forName(packagePrefix + cln,
 152                                      true,
 153                                      this.getClass().getClassLoader()).newInstance();




  66     private Map<String,String> aliasMap() {
  67         Map<String,String> map = aliasMap;
  68         if (map == null) {
  69             aliasMap = map = new Aliases();
  70         }
  71         return map;
  72     }
  73 
  74     private Map<String,String> classMap() {
  75         Map<String,String> map = classMap;
  76         if (map == null) {
  77             classMap = map = new Classes();
  78         }
  79         return map;
  80     }
  81 
  82     private Map<String,Charset> cache() {
  83         Map<String,Charset> map = cache;
  84         if (map == null) {
  85             map = new Cache();
  86             map.put("utf-8", UTF_8.INSTANCE);
  87             map.put("iso-8859-1", ISO_8859_1.INSTANCE);
  88             map.put("us-ascii", US_ASCII.INSTANCE);
  89             map.put("utf-16", UTF_16.INSTANCE);
  90             map.put("utf-16be", UTF_16BE.INSTANCE);
  91             map.put("utf-16le", UTF_16LE.INSTANCE);
  92             cache = map;
  93         }
  94         return map;
  95     }
  96 
  97     // Private ASCII-only version, optimized for interpretation during startup
  98     //
  99     private static String toLower(String s) {
 100         int n = s.length();
 101         boolean allLower = true;
 102         for (int i = 0; i < n; i++) {
 103             int c = s.charAt(i);
 104             if (((c - 'A') | ('Z' - c)) >= 0) {
 105                 allLower = false;
 106                 break;
 107             }
 108         }
 109         if (allLower)
 110             return s;
 111         StringBuilder sb = new StringBuilder(n);
 112         for (int i = 0; i < n; i++) {
 113             int c = s.charAt(i);
 114             if (((c - 'A') | ('Z' - c)) >= 0)
 115                 sb.append((char)(c + 0x20));
 116             else
 117                 sb.append((char)c);
 118         }
 119         return sb.toString();
 120     }
 121 
 122     private Charset lookup(String charsetName) {
 123         init();
 124 
 125         // By checking these built-ins we can avoid initializing Aliases,
 126         // Classes and Cache eagerly during bootstrap.
 127         //
 128         // Initialization of java.nio.charset.StandardCharsets should be
 129         // avoided here to minimize time spent in System.initPhase1, as it
 130         // may delay initialization of performance critical VM subsystems.
 131         String csn;
 132         if (charsetName.equals("UTF-8")) {
 133             return UTF_8.INSTANCE;
 134         } else if (charsetName.equals("US-ASCII")) {
 135             return US_ASCII.INSTANCE;
 136         } else if (charsetName.equals("ISO-8859-1")) {
 137             return ISO_8859_1.INSTANCE;
 138         } else {
 139             csn = canonicalize(toLower(charsetName));
 140         }
 141 
 142         // Check cache first
 143         Charset cs = cache().get(csn);
 144         if (cs != null)
 145             return cs;
 146 
 147         // Do we even support this charset?
 148         String cln = classMap().get(csn);
 149         if (cln == null)
 150             return null;
 151 
 152         // Instantiate the charset and cache it
 153         try {
 154             @SuppressWarnings("deprecation")
 155             Object o = Class.forName(packagePrefix + cln,
 156                                      true,
 157                                      this.getClass().getClassLoader()).newInstance();


< prev index next >