• Java7的新特性


    原文出处:xixicat


    本文主要讲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<WorkUnit<String>> lbq;
        5     public ThreadPoolManager(BlockingQueue<WorkUnit<String>> 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<WorkUnit<String>> 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<Runnable>());
        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<Runnable> 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); //folder1sub1folder2sub2
      6         path1.resolveSibling(path2); //folder1folder2sub2
      7         path1.relativize(path2); //....folder2sub2
      8         path1.subpath(0, 1); //folder1
      9         path1.startsWith(path2); //false
     10         path1.endsWith(path2); //false
     11         Paths.get("folder1/./../folder2/my.text").normalize(); //folder2my.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<Path> 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<String> content = new ArrayList<String>();
      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 <command>'.
    • 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=1
    100 sun.gc.collector.1.lastEntryTime=24543200515
    101 sun.gc.collector.1.lastExitTime=24544107869
    102 sun.gc.collector.1.name="G1 stop-the-world full collections"
    103 sun.gc.collector.1.time=907355
    104 sun.gc.generation.0.agetable.bytes.00=0
    105 sun.gc.generation.0.agetable.bytes.01=4294976
    106 sun.gc.generation.0.agetable.bytes.02=2014880
    107 sun.gc.generation.0.agetable.bytes.03=5406352
    108 sun.gc.generation.0.agetable.bytes.04=4875176
    109 sun.gc.generation.0.agetable.bytes.05=2865952
    110 sun.gc.generation.0.agetable.bytes.06=4374048
    111 sun.gc.generation.0.agetable.bytes.07=2058664
    112 sun.gc.generation.0.agetable.bytes.08=3574376
    113 sun.gc.generation.0.agetable.bytes.09=6923448
    114 sun.gc.generation.0.agetable.bytes.10=1541088
    115 sun.gc.generation.0.agetable.bytes.11=1347376
    116 sun.gc.generation.0.agetable.bytes.12=735888
    117 sun.gc.generation.0.agetable.bytes.13=402632
    118 sun.gc.generation.0.agetable.bytes.14=713272
    119 sun.gc.generation.0.agetable.bytes.15=728688
    120 sun.gc.generation.0.agetable.size=16
    121 sun.gc.generation.0.capacity=4510973976
    122 sun.gc.generation.0.maxCapacity=5368709144
    123 sun.gc.generation.0.minCapacity=24
    124 sun.gc.generation.0.name="young"
    125 sun.gc.generation.0.space.0.capacity=4510973960
    126 sun.gc.generation.0.space.0.initCapacity=1128267784
    127 sun.gc.generation.0.space.0.maxCapacity=5368709128
    128 sun.gc.generation.0.space.0.name="eden"
    129 sun.gc.generation.0.space.0.used=580911104
    130 sun.gc.generation.0.space.1.capacity=8
    131 sun.gc.generation.0.space.1.initCapacity=8
    132 sun.gc.generation.0.space.1.maxCapacity=8
    133 sun.gc.generation.0.space.1.name="s0"
    134 sun.gc.generation.0.space.1.used=0
    135 sun.gc.generation.0.space.2.capacity=8
    136 sun.gc.generation.0.space.2.initCapacity=8
    137 sun.gc.generation.0.space.2.maxCapacity=5368709128
    138 sun.gc.generation.0.space.2.name="s1"
    139 sun.gc.generation.0.space.2.used=0
    140 sun.gc.generation.0.spaces=3
    141 sun.gc.generation.1.capacity=857735176
    142 sun.gc.generation.1.maxCapacity=5368709128
    143 sun.gc.generation.1.minCapacity=8
    144 sun.gc.generation.1.name="old"
    145 sun.gc.generation.1.space.0.capacity=857735176
    146 sun.gc.generation.1.space.0.initCapacity=4240441352
    147 sun.gc.generation.1.space.0.maxCapacity=5368709128
    148 sun.gc.generation.1.space.0.name="space"
    149 sun.gc.generation.1.space.0.used=155730608
    150 sun.gc.generation.1.spaces=1
    151 sun.gc.generation.2.capacity=138412032
    152 sun.gc.generation.2.maxCapacity=268435456
    153 sun.gc.generation.2.minCapacity=20971520
    154 sun.gc.generation.2.name="perm"
    155 sun.gc.generation.2.space.0.capacity=138412032
    156 sun.gc.generation.2.space.0.initCapacity=20971520
    157 sun.gc.generation.2.space.0.maxCapacity=268435456
    158 sun.gc.generation.2.space.0.name="perm"
    159 sun.gc.generation.2.space.0.used=138212560
    160 sun.gc.generation.2.spaces=1
    161 sun.gc.lastCause="Heap Inspection Initiated GC"
    162 sun.gc.policy.collectors=1
    163 sun.gc.policy.desiredSurvivorSize=264241152
    164 sun.gc.policy.generations=3
    165 sun.gc.policy.maxTenuringThreshold=15
    166 sun.gc.policy.name="GarbageFirst"
    167 sun.gc.policy.tenuringThreshold=15
    168 sun.gc.tlab.alloc=0
    169 sun.gc.tlab.allocThreads=0
    170 sun.gc.tlab.fastWaste=0
    171 sun.gc.tlab.fills=0
    172 sun.gc.tlab.gcWaste=0
    173 sun.gc.tlab.maxFastWaste=0
    174 sun.gc.tlab.maxFills=0
    175 sun.gc.tlab.maxGcWaste=0
    176 sun.gc.tlab.maxSlowAlloc=0
    177 sun.gc.tlab.maxSlowWaste=0
    178 sun.gc.tlab.slowAlloc=0
    179 sun.gc.tlab.slowWaste=0
    180 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=1000000
    187 sun.os.hrt.ticks=24580753795
    188 sun.perfdata.majorVersion=2
    189 sun.perfdata.minorVersion=0
    190 sun.perfdata.overflow=0
    191 sun.perfdata.size=32768
    192 sun.perfdata.timestamp=259316
    193 sun.perfdata.used=17792
    194 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=297851
    197 sun.rt._sync_Deflations=438863
    198 sun.rt._sync_EmptyNotifications=0
    199 sun.rt._sync_FailedSpins=0
    200 sun.rt._sync_FutileWakeups=349651
    201 sun.rt._sync_Inflations=438971
    202 sun.rt._sync_MonExtant=16256
    203 sun.rt._sync_MonInCirculation=0
    204 sun.rt._sync_MonScavenged=0
    205 sun.rt._sync_Notifications=1580811
    206 sun.rt._sync_Parks=1935145
    207 sun.rt._sync_PrivateA=0
    208 sun.rt._sync_PrivateB=0
    209 sun.rt._sync_SlowEnter=0
    210 sun.rt._sync_SlowExit=0
    211 sun.rt._sync_SlowNotify=0
    212 sun.rt._sync_SlowNotifyAll=0
    213 sun.rt._sync_SuccessfulSpins=0
    214 sun.rt.applicationTime=24559855809
    215 sun.rt.createVmBeginTime=1430988913170
    216 sun.rt.createVmEndTime=1430988913429
    217 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=0
    219 sun.rt.interruptedDuringIO=0
    220 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=387252225
    223 sun.rt.safepointSyncTime=2333795
    224 sun.rt.safepointTime=15955181
    225 sun.rt.safepoints=18365
    226 sun.rt.threadInterruptSignaled=0
    227 sun.rt.vmInitDoneTime=1430988913232
    228 sun.threads.vmOperationTime=9516621
    229 sun.urlClassLoader.readClassBytesTime=958824201
    230 sun.zip.zipFile.openTime=72163038
    231 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

    参考

  • 相关阅读:
    django+xadmin在线教育平台慕学网(一)
    django.db.migrations.exceptions.InconsistentMigrationHistory django报错
    mac系统 MySQL 8.0.11版本,安装成功,使用Navicat连接失败
    MySQL-表操作
    MySQL的数据类型
    存储引擎
    库操作
    MySQL学习目录
    初识MySQL数据库
    静态方法和类方法
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/7593549.html
Copyright © 2020-2023  润新知