Java7的新特性
发布日期:2021-08-19 19:59:54 浏览次数:4 分类:技术文章

本文共 31163 字,大约阅读时间需要 103 分钟。

原文出处:

本文主要讲Java7的新特性,相对于Java6而言,Java7增加了一些重要的特性,比如NIO2,不像Java6那么鸡肋,也算是一个重要的版本。

特性列表

  • suppress异常(新语法)

  • 捕获多个异常(新语法)

  • try-with-resources(新语法)

  • JSR341-Expression Language Specification(新规范)

  • JSR203-More New I/O APIs for the Java Platform(新规范)

  • JSR292与InvokeDynamic

  • 支持JDBC4.1规范

  • Path接口、DirectoryStream、Files、WatchService

  • jcmd

  • fork/join framework

  • Java Mission Control

1、suppress异常(新语法)

1 /**  2  * 记录异常,不被淹没  3  * addSuppressed  4  */  5 class ReadFile {  6     public void read(String filename) throws BaseException {  7         FileInputStream input = null;  8         IOException readException = null;  9         try { 10             input = new FileInputStream(filename); 11         } catch (IOException ex) { 12             readException = ex; 13         } finally { 14             if (input != null) { 15                 try { 16                     input.close(); 17                 } catch (IOException ex) { 18                     if (readException == null) { 19                         readException = ex; 20                     }else{ 21                         //使用java7的 22                         readException.addSuppressed(ex); 23                     } 24                 } 25             } 26             if (readException != null) { 27                 throw new BaseException(readException); 28             } 29         } 30     } 31 }

2、捕获多个异常(新语法)

1 public void handle() {  2         ExceptionThrower thrower = new ExceptionThrower();  3         try {  4             thrower.manyExceptions();  5         } catch (ExceptionA | ExceptionB ab) {  6             System.out.println(ab.getClass());  7         } catch (ExceptionC c) {  8         }  9     }

3、try-with-resources(新语法)

1 /**  2  * try-with-resource  3  * 不需要使用finally来保证打开的流被正确关闭  4  * 这是自动完成的。  5  * @author patterncat  6  * @created 2014-07-21  7  */  8 public class ResourceBasicUsage {  9     public String readFile(String path) throws IOException { 10         try (BufferedReader reader = new BufferedReader(new FileReader(path))) { 11             StringBuilder builder = new StringBuilder(); 12             String line = null; 13             while ((line = reader.readLine()) != null) { 14                 builder.append(line); 15                 builder.append(String.format("%n")); 16             } 17             return builder.toString(); 18         } 19     } 20 }

实现AutoCloseable

1 /**  2  * @author patterncat  3  * @created 2014-07-21  4  */  5 public class CustomResource  implements AutoCloseable {  6     public void close() throws Exception {  7         System.out.println("进行资源释放。");  8     }  9     public void useCustomResource() throws Exception { 10         try (CustomResource resource = new CustomResource())  { 11             System.out.println("使用资源。"); 12         } 13     } 14     public static void main(String[] args) { 15         try { 16             new CustomResource().useCustomResource(); 17         } catch (Exception ex) { 18             ex.printStackTrace(); 19         } 20     } 21 }

4、JSR341-Expression Language Specification(新规范)

1 public static void main(String[] args){  2         ELProcessor el = new ELProcessor();  3         assert (el.eval("Math.random()") instanceof Double);  4     }

5、JSR203-More New I/O APIs for the Java Platform(新规范)

  • bytebuffer

1 public class ByteBufferUsage {  2     public void useByteBuffer() {  3         ByteBuffer buffer = ByteBuffer.allocate(32);  4         buffer.put((byte)1);  5         buffer.put(new byte[3]);  6         buffer.putChar('A');  7         buffer.putFloat(0.0f);  8         buffer.putLong(10, 100L);  9         System.out.println(buffer.getChar(4)); 10         System.out.println(buffer.remaining()); 11     } 12     public void byteOrder() { 13         ByteBuffer buffer = ByteBuffer.allocate(4); 14         buffer.putInt(1); 15         buffer.order(ByteOrder.LITTLE_ENDIAN); 16         buffer.getInt(0); //值为16777216 17     } 18     public void compact() { 19         ByteBuffer buffer = ByteBuffer.allocate(32); 20         buffer.put(new byte[16]); 21         buffer.flip(); 22         buffer.getInt(); 23         buffer.compact(); 24         int pos = buffer.position(); 25     } 26     public void viewBuffer() { 27         ByteBuffer buffer = ByteBuffer.allocate(32); 28         buffer.putInt(1); 29         IntBuffer intBuffer = buffer.asIntBuffer(); 30         intBuffer.put(2); 31         int value = buffer.getInt(); //值为2 32     } 33     /** 34      * @param args the command line arguments 35      */ 36     public static void main(String[] args) { 37         ByteBufferUsage bbu = new ByteBufferUsage(); 38         bbu.useByteBuffer(); 39         bbu.byteOrder(); 40         bbu.compact(); 41         bbu.viewBuffer(); 42     } 43 }
  • filechannel

1 public class FileChannelUsage {  2     public void openAndWrite() throws IOException {  3         FileChannel channel = FileChannel.open(Paths.get("my.txt"), StandardOpenOption.CREATE, StandardOpenOption.WRITE);  4         ByteBuffer buffer = ByteBuffer.allocate(64);  5         buffer.putChar('A').flip();  6         channel.write(buffer);  7     }  8     public void readWriteAbsolute() throws IOException {  9         FileChannel channel = FileChannel.open(Paths.get("absolute.txt"), StandardOpenOption.READ, StandardOpenOption.CREATE, StandardOpenOption.WRITE); 10         ByteBuffer writeBuffer = ByteBuffer.allocate(4).putChar('A').putChar('B'); 11         writeBuffer.flip(); 12         channel.write(writeBuffer, 1024); 13         ByteBuffer readBuffer = ByteBuffer.allocate(2); 14         channel.read(readBuffer, 1026); 15         readBuffer.flip(); 16         char result = readBuffer.getChar(); //值为'B' 17     } 18     /** 19      * @param args the command line arguments 20      */ 21     public static void main(String[] args) throws IOException { 22         FileChannelUsage fcu = new FileChannelUsage(); 23         fcu.openAndWrite(); 24         fcu.readWriteAbsolute(); 25     } 26 }

6、JSR292与InvokeDynamic

JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform,支持在JVM上运行动态类型语言。在字节码层面支持了InvokeDynamic。

  • 方法句柄MethodHandle

    1 public class ThreadPoolManager {  2     private final ScheduledExecutorService stpe = Executors  3             .newScheduledThreadPool(2);  4     private final BlockingQueue
    > lbq; 5 public ThreadPoolManager(BlockingQueue
    > lbq_) { 6 lbq = lbq_; 7 } 8 public ScheduledFuture
    run(QueueReaderTask msgReader) { 9 msgReader.setQueue(lbq); 10 return stpe.scheduleAtFixedRate(msgReader, 10, 10, TimeUnit.MILLISECONDS); 11 } 12 private void cancel(final ScheduledFuture
    hndl) { 13 stpe.schedule(new Runnable() { 14 public void run() { 15 hndl.cancel(true); 16 } 17 }, 10, TimeUnit.MILLISECONDS); 18 } 19 /** 20 * 使用传统的反射api 21 */ 22 public Method makeReflective() { 23 Method meth = null; 24 try { 25 Class
    [] argTypes = new Class[]{ScheduledFuture.class}; 26 meth = ThreadPoolManager.class.getDeclaredMethod("cancel", argTypes); 27 meth.setAccessible(true); 28 } catch (IllegalArgumentException | NoSuchMethodException 29 | SecurityException e) { 30 e.printStackTrace(); 31 } 32 return meth; 33 } 34 /** 35 * 使用代理类 36 * @return 37 */ 38 public CancelProxy makeProxy() { 39 return new CancelProxy(); 40 } 41 /** 42 * 使用Java7的新api,MethodHandle 43 * invoke virtual 动态绑定后调用 obj.xxx 44 * invoke special 静态绑定后调用 super.xxx 45 * @return 46 */ 47 public MethodHandle makeMh() { 48 MethodHandle mh; 49 MethodType desc = MethodType.methodType(void.class, ScheduledFuture.class); 50 try { 51 mh = MethodHandles.lookup().findVirtual(ThreadPoolManager.class, 52 "cancel", desc); 53 } catch (NoSuchMethodException | IllegalAccessException e) { 54 throw (AssertionError) new AssertionError().initCause(e); 55 } 56 return mh; 57 } 58 public static class CancelProxy { 59 private CancelProxy() { 60 } 61 public void invoke(ThreadPoolManager mae_, ScheduledFuture
    hndl_) { 62 mae_.cancel(hndl_); 63 } 64 } 65 }
  • 调用

    1 public class ThreadPoolMain {  2     /**  3      * 如果被继承,还能在静态上下文寻找正确的class  4      */  5     private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());  6     private ThreadPoolManager manager;  7     public static void main(String[] args) {  8         ThreadPoolMain main = new ThreadPoolMain();  9         main.run(); 10     } 11     private void cancelUsingReflection(ScheduledFuture
    hndl) { 12 Method meth = manager.makeReflective(); 13 try { 14 System.out.println("With Reflection"); 15 meth.invoke(hndl); 16 } catch (IllegalAccessException | IllegalArgumentException 17 | InvocationTargetException e) { 18 e.printStackTrace(); 19 } 20 } 21 private void cancelUsingProxy(ScheduledFuture
    hndl) { 22 CancelProxy proxy = manager.makeProxy(); 23 System.out.println("With Proxy"); 24 proxy.invoke(manager, hndl); 25 } 26 private void cancelUsingMH(ScheduledFuture
    hndl) { 27 MethodHandle mh = manager.makeMh(); 28 try { 29 System.out.println("With Method Handle"); 30 mh.invokeExact(manager, hndl); 31 } catch (Throwable e) { 32 e.printStackTrace(); 33 } 34 } 35 private void run() { 36 BlockingQueue
    > lbq = new LinkedBlockingQueue<>(); 37 manager = new ThreadPoolManager(lbq); 38 final QueueReaderTask msgReader = new QueueReaderTask(100) { 39 @Override 40 public void doAction(String msg_) { 41 if (msg_ != null) 42 System.out.println("Msg recvd: " + msg_); 43 } 44 }; 45 ScheduledFuture
    hndl = manager.run(msgReader); 46 cancelUsingMH(hndl); 47 // cancelUsingProxy(hndl); 48 // cancelUsingReflection(hndl); 49 } 50 }

7、支持JDBC4.1规范

  • abort方法

    1 public class AbortConnection {  2     public void abortConnection() throws SQLException {  3         Connection connection = DriverManager  4                 .getConnection("jdbc:derby://localhost/java7book");  5         ThreadPoolExecutor executor = new DebugExecutorService(2, 10, 60,  6                 TimeUnit.SECONDS, new LinkedBlockingQueue
    ()); 7 connection.abort(executor); 8 executor.shutdown(); 9 try { 10 executor.awaitTermination(5, TimeUnit.MINUTES); 11 System.out.println(executor.getCompletedTaskCount()); 12 } catch (InterruptedException e) { 13 e.printStackTrace(); 14 } 15 } 16 private static class DebugExecutorService extends ThreadPoolExecutor { 17 public DebugExecutorService(int corePoolSize, int maximumPoolSize, 18 long keepAliveTime, TimeUnit unit, 19 BlockingQueue
    workQueue) { 20 super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); 21 } 22 public void beforeExecute(Thread t, Runnable r) { 23 System.out.println("清理任务:" + r.getClass()); 24 super.beforeExecute(t, r); 25 } 26 } 27 public static void main(String[] args) { 28 AbortConnection ca = new AbortConnection(); 29 try { 30 ca.abortConnection(); 31 } catch (SQLException e) { 32 e.printStackTrace(); 33 } 34 } 35 }
  • 自动关闭

    1 public class SetSchema {  2     public void setSchema() throws SQLException {  3         try (Connection connection = DriverManager  4                 .getConnection("jdbc:derby://localhost/java7book")) {  5             connection.setSchema("DEMO_SCHEMA");  6             try (Statement stmt = connection.createStatement();  7                     ResultSet rs = stmt.executeQuery("SELECT * FROM author")) {  8                 while (rs.next()) {  9                     System.out.println(rs.getString("name")); 10                 } 11             } 12         } 13     } 14     public static void main(String[] args) { 15         SetSchema ss = new SetSchema(); 16         try { 17             ss.setSchema(); 18         } catch (SQLException e) { 19             e.printStackTrace(); 20         } 21     } 22 }
  • 自动映射

1 public class SetSchema {  2     public void setSchema() throws SQLException {  3         try (Connection connection = DriverManager  4                 .getConnection("jdbc:derby://localhost/java7book")) {  5             connection.setSchema("DEMO_SCHEMA");  6             try (Statement stmt = connection.createStatement();  7                     ResultSet rs = stmt.executeQuery("SELECT * FROM author")) {  8                 while (rs.next()) {  9                     System.out.println(rs.getString("name")); 10                 } 11             } 12         } 13     } 14     public static void main(String[] args) { 15         SetSchema ss = new SetSchema(); 16         try { 17             ss.setSchema(); 18         } catch (SQLException e) { 19             e.printStackTrace(); 20         } 21     } 22 }

8、Path接口(重要接口更新)

1 public class PathUsage {  2     public void usePath() {  3         Path path1 = Paths.get("folder1", "sub1");  4         Path path2 = Paths.get("folder2", "sub2");  5         path1.resolve(path2); //folder1\sub1\folder2\sub2  6         path1.resolveSibling(path2); //folder1\folder2\sub2  7         path1.relativize(path2); //..\..\folder2\sub2  8         path1.subpath(0, 1); //folder1  9         path1.startsWith(path2); //false 10         path1.endsWith(path2); //false 11         Paths.get("folder1/./../folder2/my.text").normalize(); //folder2\my.text 12     } 13     /** 14      * @param args the command line arguments 15      */ 16     public static void main(String[] args) { 17         PathUsage usage = new PathUsage(); 18         usage.usePath(); 19     } 20 }

9、DirectoryStream

1 public class ListFile {  2     public void listFiles() throws IOException {  3         Path path = Paths.get("");  4         try (DirectoryStream
stream = Files.newDirectoryStream(path, "*.*")) { 5 for (Path entry: stream) { 6 //使用entry 7 System.out.println(entry); 8 } 9 } 10 } 11 /** 12 * @param args the command line arguments 13 */ 14 public static void main(String[] args) throws IOException { 15 ListFile listFile = new ListFile(); 16 listFile.listFiles(); 17 } 18 }

10、Files

1 public class FilesUtils {  2     public void manipulateFiles() throws IOException {  3         Path newFile = Files.createFile(Paths.get("new.txt").toAbsolutePath());  4         List
content = new ArrayList
(); 5 content.add("Hello"); 6 content.add("World"); 7 Files.write(newFile, content, Charset.forName("UTF-8")); 8 Files.size(newFile); 9 byte[] bytes = Files.readAllBytes(newFile); 10 ByteArrayOutputStream output = new ByteArrayOutputStream(); 11 Files.copy(newFile, output); 12 Files.delete(newFile); 13 } 14 /** 15 * @param args the command line arguments 16 */ 17 public static void main(String[] args) throws IOException { 18 FilesUtils fu = new FilesUtils(); 19 fu.manipulateFiles(); 20 } 21 }

11、WatchService

1 public class WatchAndCalculate {  2     public void calculate() throws IOException, InterruptedException {  3         WatchService service = FileSystems.getDefault().newWatchService();  4         Path path = Paths.get("").toAbsolutePath();  5         path.register(service, StandardWatchEventKinds.ENTRY_CREATE);  6         while (true) {  7             WatchKey key = service.take();  8             for (WatchEvent
event : key.pollEvents()) { 9 Path createdPath = (Path) event.context(); 10 createdPath = path.resolve(createdPath); 11 long size = Files.size(createdPath); 12 System.out.println(createdPath + " ==> " + size); 13 } 14 key.reset(); 15 } 16 } 17 /** 18 * @param args the command line arguments 19 */ 20 public static void main(String[] args) throws Throwable { 21 WatchAndCalculate wc = new WatchAndCalculate(); 22 wc.calculate(); 23 } 24 }

12、jcmd utility

jcmd是为了替代jps出现了,包含了jps的大部分功能并新增了一些新的功能。

  • jcmd -l

    列出所有的Java虚拟机,针对每一个虚拟机可以使用help列出它们支持的命令。

1 jcmd -l  2 15308 org.eclipse.jetty.xml.XmlConfiguration /tmp/start4070493346048555702.properties /opt/educat/apps/conf/jetty8.xml  3 5624 sun.tools.jcmd.JCmd -l  4 20967 org.apache.flume.node.Application --no-reload-conf -f /opt/educat/flume_agent/conf/flume.conf -n log_agent
  • jcmd pid help

1 jcmd 15308 help  2 15308:  3 The following commands are available:  4 VM.commercial_features  5 ManagementAgent.stop  6 ManagementAgent.start_local  7 ManagementAgent.start  8 Thread.print  9 GC.class_histogram 10 GC.heap_dump 11 GC.run_finalization 12 GC.run 13 VM.uptime 14 VM.flags 15 VM.system_properties 16 VM.command_line 17 VM.version 18 help 19 For more information about a specific command use 'help '.
  • jcmd pid VM.flags查看启动参数

1 jcmd 15308 VM.flags  2 15308:  3 -XX:+DisableExplicitGC  4 -XX:ErrorFile=/var/patterncat/logs/catapp.vmerr.log.201505071655  5 -XX:+HeapDumpOnOutOfMemoryError  6 -XX:HeapDumpPath=/var/patterncat/logs/catapp.heaperr.log.201505071655 -XX:InitialHeapSize=5368709120  7 -XX:+ManagementServer  8 -XX:MaxGCPauseMillis=100  9 -XX:MaxHeapSize=5368709120 10 -XX:MaxPermSize=268435456 11 -XX:+PrintAdaptiveSizePolicy 12 -XX:+PrintCommandLineFlags 13 -XX:+PrintGC 14 -XX:+PrintGCApplicationStoppedTime 15 -XX:+PrintGCDateStamps 16 -XX:+PrintGCDetails 17 -XX:+PrintGCTimeStamps 18 -XX:+PrintHeapAtGC 19 -XX:+PrintTenuringDistribution 20 -XX:StringTableSize=49999 21 -XX:+UnlockExperimentalVMOptions 22 -XX:+UseCompressedOops 23 -XX:+UseG1GC
  • jcmd pid GC.heap_dump D:\d.dump 导出堆信息

  • jcmd pid GC.class_histogram查看系统中类的统计信息

  • jcmd pid VM.system_properties查看系统属性内容

  • jcmd pid Thread.print 打印线程栈

  • jcmd pid VM.uptime 查看虚拟机启动时间

  • jcmd pid PerfCounter.print 查看性能统计

1 jcmd 15308 PerfCounter.print  2 15308:  3 java.ci.totalTime=79326405  4 java.cls.loadedClasses=19977  5 java.cls.sharedLoadedClasses=0  6 java.cls.sharedUnloadedClasses=0  7 java.cls.unloadedClasses=1443  8 java.property.java.class.path="/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-xml-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/servlet-api-3.0.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-http-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-continuation-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-server-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-security-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-servlet-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-webapp-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-deploy-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/lib/jetty-servlets-8.1.9.v20130131.jar:/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131/l"  9 java.property.java.endorsed.dirs="/usr/local/jdk1.7.0_21/jre/lib/endorsed" 10 java.property.java.ext.dirs="/usr/local/jdk1.7.0_21/jre/lib/ext:/usr/java/packages/lib/ext" 11 java.property.java.home="/usr/local/jdk1.7.0_21/jre" 12 java.property.java.library.path="/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib" 13 java.property.java.version="1.7.0_21" 14 java.property.java.vm.info="mixed mode" 15 java.property.java.vm.name="Java HotSpot(TM) 64-Bit Server VM" 16 java.property.java.vm.specification.name="Java Virtual Machine Specification" 17 java.property.java.vm.specification.vendor="Oracle Corporation" 18 java.property.java.vm.specification.version="1.7" 19 java.property.java.vm.vendor="Oracle Corporation" 20 java.property.java.vm.version="23.21-b01" 21 java.rt.vmArgs="-javaagent:/opt/educat/apps/lib/jolokia-jvm-1.1.0-agent.jar=port=23061 -Xloggc:/var/patterncat/logs/catapp.gc.log.201505071655 -XX:ErrorFile=/var/patterncat/logs/catapp.vmerr.log.201505071655 -XX:HeapDumpPath=/var/patterncat/logs/catapp.heaperr.log.201505071655 -Xmx5g -Xms5g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintCommandLineFlags -XX:+PrintAdaptiveSizePolicy -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:StringTableSize=49999 -Djetty.home=/opt/educat/apps/server/jetty-distribution-8.1.9.v20130131 -Dapp.port=8061 -Dmedis_environment=online -Dcore.step=app -DSTOP.PORT=38061 -Djetty.port=8061 -Dcom.sun.management.jmxremote.authenticate=false -Dapp.logdir=/var/patterncat/logs -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dapp.ip=10.64.28.207 -Dapp.cont" 22 java.rt.vmFlags="" 23 java.threads.daemon=72 24 java.threads.live=128 25 java.threads.livePeak=129 26 java.threads.started=1444 27 sun.ci.compilerThread.0.compiles=2595 28 sun.ci.compilerThread.0.method="" 29 sun.ci.compilerThread.0.time=1290 30 sun.ci.compilerThread.0.type=1 31 sun.ci.compilerThread.1.compiles=2802 32 sun.ci.compilerThread.1.method="" 33 sun.ci.compilerThread.1.time=1413 34 sun.ci.compilerThread.1.type=2 35 sun.ci.lastFailedMethod="" 36 sun.ci.lastFailedType=0 37 sun.ci.lastInvalidatedMethod="" 38 sun.ci.lastInvalidatedType=0 39 sun.ci.lastMethod="org/codehaus/groovy/classgen/VariableScopeVisitor checkVariableNameForDeclaration" 40 sun.ci.lastSize=2184 41 sun.ci.lastType=1 42 sun.ci.nmethodCodeSize=12188576 43 sun.ci.nmethodSize=24492688 44 sun.ci.osrBytes=196694 45 sun.ci.osrCompiles=156 46 sun.ci.osrTime=8521713 47 sun.ci.standardBytes=2072839 48 sun.ci.standardCompiles=5241 49 sun.ci.standardTime=70804692 50 sun.ci.threads=2 51 sun.ci.totalBailouts=0 52 sun.ci.totalCompiles=5397 53 sun.ci.totalInvalidates=0 54 sun.classloader.findClassTime=358334873 55 sun.classloader.findClasses=507 56 sun.classloader.parentDelegationTime=30062667 57 sun.cls.appClassBytes=63743816 58 sun.cls.appClassLoadCount=58098 59 sun.cls.appClassLoadTime=9843833 60 sun.cls.appClassLoadTime.self=5288490 61 sun.cls.classInitTime=2617049 62 sun.cls.classInitTime.self=1088905 63 sun.cls.classLinkedTime=4605704 64 sun.cls.classLinkedTime.self=541928 65 sun.cls.classVerifyTime=4055324 66 sun.cls.classVerifyTime.self=2423448 67 sun.cls.defineAppClassTime=3206202 68 sun.cls.defineAppClassTime.self=386302 69 sun.cls.defineAppClasses=16465 70 sun.cls.initializedClasses=14546 71 sun.cls.isUnsyncloadClassSet=0 72 sun.cls.jniDefineClassNoLockCalls=94 73 sun.cls.jvmDefineClassNoLockCalls=4405 74 sun.cls.jvmFindLoadedClassNoLockCalls=32671 75 sun.cls.linkedClasses=16465 76 sun.cls.loadInstanceClassFailRate=0 77 sun.cls.loadedBytes=43314456 78 sun.cls.lookupSysClassTime=87247 79 sun.cls.methodBytes=34262690 80 sun.cls.nonSystemLoaderLockContentionRate=133 81 sun.cls.parseClassTime=3099390 82 sun.cls.parseClassTime.self=2670584 83 sun.cls.sharedClassLoadTime=9647 84 sun.cls.sharedLoadedBytes=0 85 sun.cls.sharedUnloadedBytes=0 86 sun.cls.sysClassBytes=12986737 87 sun.cls.sysClassLoadTime=503885 88 sun.cls.systemLoaderLockContentionRate=0 89 sun.cls.time=15382336 90 sun.cls.unloadedBytes=5087120 91 sun.cls.unsafeDefineClassCalls=1555 92 sun.cls.verifiedClasses=16383 93 sun.gc.cause="No GC" 94 sun.gc.collector.0.invocations=85 95 sun.gc.collector.0.lastEntryTime=24164511065 96 sun.gc.collector.0.lastExitTime=24164628388 97 sun.gc.collector.0.name="G1 incremental collections" 98 sun.gc.collector.0.time=7628099 99 sun.gc.collector.1.invocations=1100 sun.gc.collector.1.lastEntryTime=24543200515101 sun.gc.collector.1.lastExitTime=24544107869102 sun.gc.collector.1.name="G1 stop-the-world full collections"103 sun.gc.collector.1.time=907355104 sun.gc.generation.0.agetable.bytes.00=0105 sun.gc.generation.0.agetable.bytes.01=4294976106 sun.gc.generation.0.agetable.bytes.02=2014880107 sun.gc.generation.0.agetable.bytes.03=5406352108 sun.gc.generation.0.agetable.bytes.04=4875176109 sun.gc.generation.0.agetable.bytes.05=2865952110 sun.gc.generation.0.agetable.bytes.06=4374048111 sun.gc.generation.0.agetable.bytes.07=2058664112 sun.gc.generation.0.agetable.bytes.08=3574376113 sun.gc.generation.0.agetable.bytes.09=6923448114 sun.gc.generation.0.agetable.bytes.10=1541088115 sun.gc.generation.0.agetable.bytes.11=1347376116 sun.gc.generation.0.agetable.bytes.12=735888117 sun.gc.generation.0.agetable.bytes.13=402632118 sun.gc.generation.0.agetable.bytes.14=713272119 sun.gc.generation.0.agetable.bytes.15=728688120 sun.gc.generation.0.agetable.size=16121 sun.gc.generation.0.capacity=4510973976122 sun.gc.generation.0.maxCapacity=5368709144123 sun.gc.generation.0.minCapacity=24124 sun.gc.generation.0.name="young"125 sun.gc.generation.0.space.0.capacity=4510973960126 sun.gc.generation.0.space.0.initCapacity=1128267784127 sun.gc.generation.0.space.0.maxCapacity=5368709128128 sun.gc.generation.0.space.0.name="eden"129 sun.gc.generation.0.space.0.used=580911104130 sun.gc.generation.0.space.1.capacity=8131 sun.gc.generation.0.space.1.initCapacity=8132 sun.gc.generation.0.space.1.maxCapacity=8133 sun.gc.generation.0.space.1.name="s0"134 sun.gc.generation.0.space.1.used=0135 sun.gc.generation.0.space.2.capacity=8136 sun.gc.generation.0.space.2.initCapacity=8137 sun.gc.generation.0.space.2.maxCapacity=5368709128138 sun.gc.generation.0.space.2.name="s1"139 sun.gc.generation.0.space.2.used=0140 sun.gc.generation.0.spaces=3141 sun.gc.generation.1.capacity=857735176142 sun.gc.generation.1.maxCapacity=5368709128143 sun.gc.generation.1.minCapacity=8144 sun.gc.generation.1.name="old"145 sun.gc.generation.1.space.0.capacity=857735176146 sun.gc.generation.1.space.0.initCapacity=4240441352147 sun.gc.generation.1.space.0.maxCapacity=5368709128148 sun.gc.generation.1.space.0.name="space"149 sun.gc.generation.1.space.0.used=155730608150 sun.gc.generation.1.spaces=1151 sun.gc.generation.2.capacity=138412032152 sun.gc.generation.2.maxCapacity=268435456153 sun.gc.generation.2.minCapacity=20971520154 sun.gc.generation.2.name="perm"155 sun.gc.generation.2.space.0.capacity=138412032156 sun.gc.generation.2.space.0.initCapacity=20971520157 sun.gc.generation.2.space.0.maxCapacity=268435456158 sun.gc.generation.2.space.0.name="perm"159 sun.gc.generation.2.space.0.used=138212560160 sun.gc.generation.2.spaces=1161 sun.gc.lastCause="Heap Inspection Initiated GC"162 sun.gc.policy.collectors=1163 sun.gc.policy.desiredSurvivorSize=264241152164 sun.gc.policy.generations=3165 sun.gc.policy.maxTenuringThreshold=15166 sun.gc.policy.name="GarbageFirst"167 sun.gc.policy.tenuringThreshold=15168 sun.gc.tlab.alloc=0169 sun.gc.tlab.allocThreads=0170 sun.gc.tlab.fastWaste=0171 sun.gc.tlab.fills=0172 sun.gc.tlab.gcWaste=0173 sun.gc.tlab.maxFastWaste=0174 sun.gc.tlab.maxFills=0175 sun.gc.tlab.maxGcWaste=0176 sun.gc.tlab.maxSlowAlloc=0177 sun.gc.tlab.maxSlowWaste=0178 sun.gc.tlab.slowAlloc=0179 sun.gc.tlab.slowWaste=0180 sun.management.JMXConnectorServer.0.authenticate="false"181 sun.management.JMXConnectorServer.0.remoteAddress="service:jmx:rmi:///jndi/rmi://edu-cat02.lf.patterncat.com:8199/jmxrmi"182 sun.management.JMXConnectorServer.0.ssl="false"183 sun.management.JMXConnectorServer.0.sslNeedClientAuth="false"184 sun.management.JMXConnectorServer.0.sslRegistry="false"185 sun.management.JMXConnectorServer.address="service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc3AAtVbmljYXN0UmVmMgAADDEwLjY0LjI4LjIwNwAAhbjWmVwaDwiNg3l3YeUAAAFNLZX68oACAHg="186 sun.os.hrt.frequency=1000000187 sun.os.hrt.ticks=24580753795188 sun.perfdata.majorVersion=2189 sun.perfdata.minorVersion=0190 sun.perfdata.overflow=0191 sun.perfdata.size=32768192 sun.perfdata.timestamp=259316193 sun.perfdata.used=17792194 sun.property.sun.boot.class.path="/usr/local/jdk1.7.0_21/jre/lib/resources.jar:/usr/local/jdk1.7.0_21/jre/lib/rt.jar:/usr/local/jdk1.7.0_21/jre/lib/sunrsasign.jar:/usr/local/jdk1.7.0_21/jre/lib/jsse.jar:/usr/local/jdk1.7.0_21/jre/lib/jce.jar:/usr/local/jdk1.7.0_21/jre/lib/charsets.jar:/usr/local/jdk1.7.0_21/jre/lib/jfr.jar:/usr/local/jdk1.7.0_21/jre/classes"195 sun.property.sun.boot.library.path="/usr/local/jdk1.7.0_21/jre/lib/amd64"196 sun.rt._sync_ContendedLockAttempts=297851197 sun.rt._sync_Deflations=438863198 sun.rt._sync_EmptyNotifications=0199 sun.rt._sync_FailedSpins=0200 sun.rt._sync_FutileWakeups=349651201 sun.rt._sync_Inflations=438971202 sun.rt._sync_MonExtant=16256203 sun.rt._sync_MonInCirculation=0204 sun.rt._sync_MonScavenged=0205 sun.rt._sync_Notifications=1580811206 sun.rt._sync_Parks=1935145207 sun.rt._sync_PrivateA=0208 sun.rt._sync_PrivateB=0209 sun.rt._sync_SlowEnter=0210 sun.rt._sync_SlowExit=0211 sun.rt._sync_SlowNotify=0212 sun.rt._sync_SlowNotifyAll=0213 sun.rt._sync_SuccessfulSpins=0214 sun.rt.applicationTime=24559855809215 sun.rt.createVmBeginTime=1430988913170216 sun.rt.createVmEndTime=1430988913429217 sun.rt.internalVersion="Java HotSpot(TM) 64-Bit Server VM (23.21-b01) for linux-amd64 JRE (1.7.0_21-b11), built on Apr  4 2013 04:03:29 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)"218 sun.rt.interruptedBeforeIO=0219 sun.rt.interruptedDuringIO=0220 sun.rt.javaCommand="org.eclipse.jetty.xml.XmlConfiguration /tmp/start4070493346048555702.properties /opt/educat/apps/conf/jetty8.xml"221 sun.rt.jvmCapabilities="1000000000000000000000000000000000000000000000000000000000000000"222 sun.rt.jvmVersion=387252225223 sun.rt.safepointSyncTime=2333795224 sun.rt.safepointTime=15955181225 sun.rt.safepoints=18365226 sun.rt.threadInterruptSignaled=0227 sun.rt.vmInitDoneTime=1430988913232228 sun.threads.vmOperationTime=9516621229 sun.urlClassLoader.readClassBytesTime=958824201230 sun.zip.zipFile.openTime=72163038231 sun.zip.zipFiles=3838
View Code

13、fork/join

Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

14、Java Mission Control

在JDK7u40里头提供了Java Mission Control,这个是从JRockit虚拟机里头迁移过来的类似JVisualVm的东东。

15、其他

  • Binary Literals支持

  • Numeric Literals的下划线支持

  • Strings in switch Statements

参考

转载于:https://www.cnblogs.com/huangwenjie/p/7593549.html

转载地址:https://blog.csdn.net/weixin_30951743/article/details/95886332 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:二叉树的序列化和反序列化
下一篇:Android源码

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月06日 09时07分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章