在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java7的新特性

2017-3-7 12:53| 发布者: zhangjf| 查看: 1557| 评论: 0

摘要: 来自: https://segmentfault.com/a/1190000004417830 java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 () () 序 本文主要讲Java7 ...

来自: https://segmentfault.com/a/1190000004417830

java语言特性系列

Java5的新特性

Java6的新特性

Java7的新特性

[Java8的新特性]()

[Java9的新特性]()

本文主要讲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. * [url=home.php?mod=space&uid=19302]@CREATED[/url] 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 UseSQLData {
  2. public void useSQLData() throws SQLException {
  3. try (Connection connection = DriverManager
  4. .getConnection("jdbc:derby://localhost/java7book")) {
  5. Map<String,Class<?>> typeMap = new HashMap<String,Class<?>>();
  6. typeMap.put("java7book.Book", Book.class);
  7. try (Statement stmt = connection.createStatement();
  8. ResultSet rs = stmt.executeQuery("SELECT * FROM book")) {
  9. while (rs.next()) {
  10. System.out.println(rs.getObject(1, Book.class));
  11. }
  12. }
  13. }
  14. }
  15. public static void main(String[] args) {
  16. UseSQLData usd = new UseSQLData();
  17. try {
  18. usd.useSQLData();
  19. } catch (SQLException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }
复制代码
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
复制代码
13、fork/join

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

14、Java Mission Control

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

15、其他

Binary Literals支持

Numeric Literals的下划线支持

Strings in switch Statements

参考

Java SE 7 Features and Enhancements

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-3 14:00

Copyright 2015-2025 djqfx

返回顶部