摘要:语言特性系列的新特性的新特性的新特性的新特性的新特性的新特性的新特性的新特性的新特性序本文主要讲的新特性,相对于而言,增加了一些重要的特性,比如,不像那么鸡肋,也算是一个重要的版本。其他支持的下划线支持参考
Java语言特性系列
Java5的新特性
Java6的新特性
Java7的新特性
Java8的新特性
Java9的新特性
Java10的新特性
Java11的新特性
Java12的新特性
Java13的新特性
序本文主要讲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异常(新语法)/**
* 记录异常,不被淹没
* addSuppressed
*/
class ReadFile {
public void read(String filename) throws BaseException {
FileInputStream input = null;
IOException readException = null;
try {
input = new FileInputStream(filename);
} catch (IOException ex) {
readException = ex;
} finally {
if (input != null) {
try {
input.close();
} catch (IOException ex) {
if (readException == null) {
readException = ex;
}else{
//使用java7的
readException.addSuppressed(ex);
}
}
}
if (readException != null) {
throw new BaseException(readException);
}
}
}
}
2、捕获多个异常(新语法)
public void handle() {
ExceptionThrower thrower = new ExceptionThrower();
try {
thrower.manyExceptions();
} catch (ExceptionA | ExceptionB ab) {
System.out.println(ab.getClass());
} catch (ExceptionC c) {
}
}
3、try-with-resources(新语法)
/**
* try-with-resource
* 不需要使用finally来保证打开的流被正确关闭
* 这是自动完成的。
* @created 2014-07-21
*/
public class ResourceBasicUsage {
public String readFile(String path) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
builder.append(line);
builder.append(String.format("%n"));
}
return builder.toString();
}
}
}
实现AutoCloseable
/**
* @created 2014-07-21
*/
public class CustomResource implements AutoCloseable {
public void close() throws Exception {
System.out.println("进行资源释放。");
}
public void useCustomResource() throws Exception {
try (CustomResource resource = new CustomResource()) {
System.out.println("使用资源。");
}
}
public static void main(String[] args) {
try {
new CustomResource().useCustomResource();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
4、JSR341-Expression Language Specification(新规范)
public static void main(String[] args){
ELProcessor el = new ELProcessor();
assert (el.eval("Math.random()") instanceof Double);
}
5、JSR203-More New I/O APIs for the Java Platform(新规范)
bytebuffer
public class ByteBufferUsage {
public void useByteBuffer() {
ByteBuffer buffer = ByteBuffer.allocate(32);
buffer.put((byte)1);
buffer.put(new byte[3]);
buffer.putChar("A");
buffer.putFloat(0.0f);
buffer.putLong(10, 100L);
System.out.println(buffer.getChar(4));
System.out.println(buffer.remaining());
}
public void byteOrder() {
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt(1);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.getInt(0); //值为16777216
}
public void compact() {
ByteBuffer buffer = ByteBuffer.allocate(32);
buffer.put(new byte[16]);
buffer.flip();
buffer.getInt();
buffer.compact();
int pos = buffer.position();
}
public void viewBuffer() {
ByteBuffer buffer = ByteBuffer.allocate(32);
buffer.putInt(1);
IntBuffer intBuffer = buffer.asIntBuffer();
intBuffer.put(2);
int value = buffer.getInt(); //值为2
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ByteBufferUsage bbu = new ByteBufferUsage();
bbu.useByteBuffer();
bbu.byteOrder();
bbu.compact();
bbu.viewBuffer();
}
}
filechannel
public class FileChannelUsage {
public void openAndWrite() throws IOException {
FileChannel channel = FileChannel.open(Paths.get("my.txt"), StandardOpenOption.CREATE, StandardOpenOption.WRITE);
ByteBuffer buffer = ByteBuffer.allocate(64);
buffer.putChar("A").flip();
channel.write(buffer);
}
public void readWriteAbsolute() throws IOException {
FileChannel channel = FileChannel.open(Paths.get("absolute.txt"), StandardOpenOption.READ, StandardOpenOption.CREATE, StandardOpenOption.WRITE);
ByteBuffer writeBuffer = ByteBuffer.allocate(4).putChar("A").putChar("B");
writeBuffer.flip();
channel.write(writeBuffer, 1024);
ByteBuffer readBuffer = ByteBuffer.allocate(2);
channel.read(readBuffer, 1026);
readBuffer.flip();
char result = readBuffer.getChar(); //值为"B"
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
FileChannelUsage fcu = new FileChannelUsage();
fcu.openAndWrite();
fcu.readWriteAbsolute();
}
}
6、JSR292与InvokeDynamic
JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform,支持在JVM上运行动态类型语言。在字节码层面支持了InvokeDynamic。
方法句柄MethodHandle
public class ThreadPoolManager {
private final ScheduledExecutorService stpe = Executors
.newScheduledThreadPool(2);
private final BlockingQueue> lbq;
public ThreadPoolManager(BlockingQueue> lbq_) {
lbq = lbq_;
}
public ScheduledFuture> run(QueueReaderTask msgReader) {
msgReader.setQueue(lbq);
return stpe.scheduleAtFixedRate(msgReader, 10, 10, TimeUnit.MILLISECONDS);
}
private void cancel(final ScheduledFuture> hndl) {
stpe.schedule(new Runnable() {
public void run() {
hndl.cancel(true);
}
}, 10, TimeUnit.MILLISECONDS);
}
/**
* 使用传统的反射api
*/
public Method makeReflective() {
Method meth = null;
try {
Class>[] argTypes = new Class[]{ScheduledFuture.class};
meth = ThreadPoolManager.class.getDeclaredMethod("cancel", argTypes);
meth.setAccessible(true);
} catch (IllegalArgumentException | NoSuchMethodException
| SecurityException e) {
e.printStackTrace();
}
return meth;
}
/**
* 使用代理类
* @return
*/
public CancelProxy makeProxy() {
return new CancelProxy();
}
/**
* 使用Java7的新api,MethodHandle
* invoke virtual 动态绑定后调用 obj.xxx
* invoke special 静态绑定后调用 super.xxx
* @return
*/
public MethodHandle makeMh() {
MethodHandle mh;
MethodType desc = MethodType.methodType(void.class, ScheduledFuture.class);
try {
mh = MethodHandles.lookup().findVirtual(ThreadPoolManager.class,
"cancel", desc);
} catch (NoSuchMethodException | IllegalAccessException e) {
throw (AssertionError) new AssertionError().initCause(e);
}
return mh;
}
public static class CancelProxy {
private CancelProxy() {
}
public void invoke(ThreadPoolManager mae_, ScheduledFuture> hndl_) {
mae_.cancel(hndl_);
}
}
}
调用
public class ThreadPoolMain {
/**
* 如果被继承,还能在静态上下文寻找正确的class
*/
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private ThreadPoolManager manager;
public static void main(String[] args) {
ThreadPoolMain main = new ThreadPoolMain();
main.run();
}
private void cancelUsingReflection(ScheduledFuture> hndl) {
Method meth = manager.makeReflective();
try {
System.out.println("With Reflection");
meth.invoke(hndl);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
e.printStackTrace();
}
}
private void cancelUsingProxy(ScheduledFuture> hndl) {
CancelProxy proxy = manager.makeProxy();
System.out.println("With Proxy");
proxy.invoke(manager, hndl);
}
private void cancelUsingMH(ScheduledFuture> hndl) {
MethodHandle mh = manager.makeMh();
try {
System.out.println("With Method Handle");
mh.invokeExact(manager, hndl);
} catch (Throwable e) {
e.printStackTrace();
}
}
private void run() {
BlockingQueue> lbq = new LinkedBlockingQueue<>();
manager = new ThreadPoolManager(lbq);
final QueueReaderTask msgReader = new QueueReaderTask(100) {
@Override
public void doAction(String msg_) {
if (msg_ != null)
System.out.println("Msg recvd: " + msg_);
}
};
ScheduledFuture> hndl = manager.run(msgReader);
cancelUsingMH(hndl);
// cancelUsingProxy(hndl);
// cancelUsingReflection(hndl);
}
}
7、支持JDBC4.1规范
abort方法
public class AbortConnection {
public void abortConnection() throws SQLException {
Connection connection = DriverManager
.getConnection("jdbc:derby://localhost/java7book");
ThreadPoolExecutor executor = new DebugExecutorService(2, 10, 60,
TimeUnit.SECONDS, new LinkedBlockingQueue());
connection.abort(executor);
executor.shutdown();
try {
executor.awaitTermination(5, TimeUnit.MINUTES);
System.out.println(executor.getCompletedTaskCount());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static class DebugExecutorService extends ThreadPoolExecutor {
public DebugExecutorService(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,
BlockingQueue workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
}
public void beforeExecute(Thread t, Runnable r) {
System.out.println("清理任务:" + r.getClass());
super.beforeExecute(t, r);
}
}
public static void main(String[] args) {
AbortConnection ca = new AbortConnection();
try {
ca.abortConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
自动关闭
public class SetSchema {
public void setSchema() throws SQLException {
try (Connection connection = DriverManager
.getConnection("jdbc:derby://localhost/java7book")) {
connection.setSchema("DEMO_SCHEMA");
try (Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM author")) {
while (rs.next()) {
System.out.println(rs.getString("name"));
}
}
}
}
public static void main(String[] args) {
SetSchema ss = new SetSchema();
try {
ss.setSchema();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
自动映射
public class UseSQLData {
public void useSQLData() throws SQLException {
try (Connection connection = DriverManager
.getConnection("jdbc:derby://localhost/java7book")) {
Map> typeMap = new HashMap>();
typeMap.put("java7book.Book", Book.class);
try (Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM book")) {
while (rs.next()) {
System.out.println(rs.getObject(1, Book.class));
}
}
}
}
public static void main(String[] args) {
UseSQLData usd = new UseSQLData();
try {
usd.useSQLData();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
8、Path接口(重要接口更新)
public class PathUsage {
public void usePath() {
Path path1 = Paths.get("folder1", "sub1");
Path path2 = Paths.get("folder2", "sub2");
path1.resolve(path2); //folder1sub1folder2sub2
path1.resolveSibling(path2); //folder1folder2sub2
path1.relativize(path2); //....folder2sub2
path1.subpath(0, 1); //folder1
path1.startsWith(path2); //false
path1.endsWith(path2); //false
Paths.get("folder1/./../folder2/my.text").normalize(); //folder2my.text
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
PathUsage usage = new PathUsage();
usage.usePath();
}
}
9、DirectoryStream
public class ListFile {
public void listFiles() throws IOException {
Path path = Paths.get("");
try (DirectoryStream stream = Files.newDirectoryStream(path, "*.*")) {
for (Path entry: stream) {
//使用entry
System.out.println(entry);
}
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
ListFile listFile = new ListFile();
listFile.listFiles();
}
}
10、Files
public class FilesUtils {
public void manipulateFiles() throws IOException {
Path newFile = Files.createFile(Paths.get("new.txt").toAbsolutePath());
List content = new ArrayList();
content.add("Hello");
content.add("World");
Files.write(newFile, content, Charset.forName("UTF-8"));
Files.size(newFile);
byte[] bytes = Files.readAllBytes(newFile);
ByteArrayOutputStream output = new ByteArrayOutputStream();
Files.copy(newFile, output);
Files.delete(newFile);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
FilesUtils fu = new FilesUtils();
fu.manipulateFiles();
}
}
11、WatchService
public class WatchAndCalculate {
public void calculate() throws IOException, InterruptedException {
WatchService service = FileSystems.getDefault().newWatchService();
Path path = Paths.get("").toAbsolutePath();
path.register(service, StandardWatchEventKinds.ENTRY_CREATE);
while (true) {
WatchKey key = service.take();
for (WatchEvent> event : key.pollEvents()) {
Path createdPath = (Path) event.context();
createdPath = path.resolve(createdPath);
long size = Files.size(createdPath);
System.out.println(createdPath + " ==> " + size);
}
key.reset();
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Throwable {
WatchAndCalculate wc = new WatchAndCalculate();
wc.calculate();
}
}
12、jcmd utility
jcmd是为了替代jps出现了,包含了jps的大部分功能并新增了一些新的功能。
jcmd -l
列出所有的Java虚拟机,针对每一个虚拟机可以使用help列出它们支持的命令。
jcmd -l 15308 org.eclipse.jetty.xml.XmlConfiguration /tmp/start4070493346048555702.properties /opt/educat/apps/conf/jetty8.xml 5624 sun.tools.jcmd.JCmd -l 20967 org.apache.flume.node.Application --no-reload-conf -f /opt/educat/flume_agent/conf/flume.conf -n log_agent
jcmd pid help
jcmd 15308 help 15308: The following commands are available: VM.commercial_features ManagementAgent.stop ManagementAgent.start_local ManagementAgent.start Thread.print GC.class_histogram GC.heap_dump GC.run_finalization GC.run VM.uptime VM.flags VM.system_properties VM.command_line VM.version help For more information about a specific command use "help".
jcmd pid VM.flags查看启动参数
jcmd 15308 VM.flags 15308: -XX:+DisableExplicitGC -XX:ErrorFile=/var/codecraft/logs/catapp.vmerr.log.201505071655 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/codecraft/logs/catapp.heaperr.log.201505071655 -XX:InitialHeapSize=5368709120 -XX:+ManagementServer -XX:MaxGCPauseMillis=100 -XX:MaxHeapSize=5368709120 -XX:MaxPermSize=268435456 -XX:+PrintAdaptiveSizePolicy -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:StringTableSize=49999 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -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 查看性能统计
jcmd 15308 PerfCounter.print 15308: java.ci.totalTime=79326405 java.cls.loadedClasses=19977 java.cls.sharedLoadedClasses=0 java.cls.sharedUnloadedClasses=0 java.cls.unloadedClasses=1443 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" java.property.java.endorsed.dirs="/usr/local/jdk1.7.0_21/jre/lib/endorsed" java.property.java.ext.dirs="/usr/local/jdk1.7.0_21/jre/lib/ext:/usr/java/packages/lib/ext" java.property.java.home="/usr/local/jdk1.7.0_21/jre" java.property.java.library.path="/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib" java.property.java.version="1.7.0_21" java.property.java.vm.info="mixed mode" java.property.java.vm.name="Java HotSpot(TM) 64-Bit Server VM" java.property.java.vm.specification.name="Java Virtual Machine Specification" java.property.java.vm.specification.vendor="Oracle Corporation" java.property.java.vm.specification.version="1.7" java.property.java.vm.vendor="Oracle Corporation" java.property.java.vm.version="23.21-b01" java.rt.vmArgs="-javaagent:/opt/educat/apps/lib/jolokia-jvm-1.1.0-agent.jar=port=23061 -Xloggc:/var/codecraft/logs/catapp.gc.log.201505071655 -XX:ErrorFile=/var/codecraft/logs/catapp.vmerr.log.201505071655 -XX:HeapDumpPath=/var/codecraft/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/codecraft/logs -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dapp.ip=10.64.28.207 -Dapp.cont" java.rt.vmFlags="" java.threads.daemon=72 java.threads.live=128 java.threads.livePeak=129 java.threads.started=1444 sun.ci.compilerThread.0.compiles=2595 sun.ci.compilerThread.0.method="" sun.ci.compilerThread.0.time=1290 sun.ci.compilerThread.0.type=1 sun.ci.compilerThread.1.compiles=2802 sun.ci.compilerThread.1.method="" sun.ci.compilerThread.1.time=1413 sun.ci.compilerThread.1.type=2 sun.ci.lastFailedMethod="" sun.ci.lastFailedType=0 sun.ci.lastInvalidatedMethod="" sun.ci.lastInvalidatedType=0 sun.ci.lastMethod="org/codehaus/groovy/classgen/VariableScopeVisitor checkVariableNameForDeclaration" sun.ci.lastSize=2184 sun.ci.lastType=1 sun.ci.nmethodCodeSize=12188576 sun.ci.nmethodSize=24492688 sun.ci.osrBytes=196694 sun.ci.osrCompiles=156 sun.ci.osrTime=8521713 sun.ci.standardBytes=2072839 sun.ci.standardCompiles=5241 sun.ci.standardTime=70804692 sun.ci.threads=2 sun.ci.totalBailouts=0 sun.ci.totalCompiles=5397 sun.ci.totalInvalidates=0 sun.classloader.findClassTime=358334873 sun.classloader.findClasses=507 sun.classloader.parentDelegationTime=30062667 sun.cls.appClassBytes=63743816 sun.cls.appClassLoadCount=58098 sun.cls.appClassLoadTime=9843833 sun.cls.appClassLoadTime.self=5288490 sun.cls.classInitTime=2617049 sun.cls.classInitTime.self=1088905 sun.cls.classLinkedTime=4605704 sun.cls.classLinkedTime.self=541928 sun.cls.classVerifyTime=4055324 sun.cls.classVerifyTime.self=2423448 sun.cls.defineAppClassTime=3206202 sun.cls.defineAppClassTime.self=386302 sun.cls.defineAppClasses=16465 sun.cls.initializedClasses=14546 sun.cls.isUnsyncloadClassSet=0 sun.cls.jniDefineClassNoLockCalls=94 sun.cls.jvmDefineClassNoLockCalls=4405 sun.cls.jvmFindLoadedClassNoLockCalls=32671 sun.cls.linkedClasses=16465 sun.cls.loadInstanceClassFailRate=0 sun.cls.loadedBytes=43314456 sun.cls.lookupSysClassTime=87247 sun.cls.methodBytes=34262690 sun.cls.nonSystemLoaderLockContentionRate=133 sun.cls.parseClassTime=3099390 sun.cls.parseClassTime.self=2670584 sun.cls.sharedClassLoadTime=9647 sun.cls.sharedLoadedBytes=0 sun.cls.sharedUnloadedBytes=0 sun.cls.sysClassBytes=12986737 sun.cls.sysClassLoadTime=503885 sun.cls.systemLoaderLockContentionRate=0 sun.cls.time=15382336 sun.cls.unloadedBytes=5087120 sun.cls.unsafeDefineClassCalls=1555 sun.cls.verifiedClasses=16383 sun.gc.cause="No GC" sun.gc.collector.0.invocations=85 sun.gc.collector.0.lastEntryTime=24164511065 sun.gc.collector.0.lastExitTime=24164628388 sun.gc.collector.0.name="G1 incremental collections" sun.gc.collector.0.time=7628099 sun.gc.collector.1.invocations=1 sun.gc.collector.1.lastEntryTime=24543200515 sun.gc.collector.1.lastExitTime=24544107869 sun.gc.collector.1.name="G1 stop-the-world full collections" sun.gc.collector.1.time=907355 sun.gc.generation.0.agetable.bytes.00=0 sun.gc.generation.0.agetable.bytes.01=4294976 sun.gc.generation.0.agetable.bytes.02=2014880 sun.gc.generation.0.agetable.bytes.03=5406352 sun.gc.generation.0.agetable.bytes.04=4875176 sun.gc.generation.0.agetable.bytes.05=2865952 sun.gc.generation.0.agetable.bytes.06=4374048 sun.gc.generation.0.agetable.bytes.07=2058664 sun.gc.generation.0.agetable.bytes.08=3574376 sun.gc.generation.0.agetable.bytes.09=6923448 sun.gc.generation.0.agetable.bytes.10=1541088 sun.gc.generation.0.agetable.bytes.11=1347376 sun.gc.generation.0.agetable.bytes.12=735888 sun.gc.generation.0.agetable.bytes.13=402632 sun.gc.generation.0.agetable.bytes.14=713272 sun.gc.generation.0.agetable.bytes.15=728688 sun.gc.generation.0.agetable.size=16 sun.gc.generation.0.capacity=4510973976 sun.gc.generation.0.maxCapacity=5368709144 sun.gc.generation.0.minCapacity=24 sun.gc.generation.0.name="young" sun.gc.generation.0.space.0.capacity=4510973960 sun.gc.generation.0.space.0.initCapacity=1128267784 sun.gc.generation.0.space.0.maxCapacity=5368709128 sun.gc.generation.0.space.0.name="eden" sun.gc.generation.0.space.0.used=580911104 sun.gc.generation.0.space.1.capacity=8 sun.gc.generation.0.space.1.initCapacity=8 sun.gc.generation.0.space.1.maxCapacity=8 sun.gc.generation.0.space.1.name="s0" sun.gc.generation.0.space.1.used=0 sun.gc.generation.0.space.2.capacity=8 sun.gc.generation.0.space.2.initCapacity=8 sun.gc.generation.0.space.2.maxCapacity=5368709128 sun.gc.generation.0.space.2.name="s1" sun.gc.generation.0.space.2.used=0 sun.gc.generation.0.spaces=3 sun.gc.generation.1.capacity=857735176 sun.gc.generation.1.maxCapacity=5368709128 sun.gc.generation.1.minCapacity=8 sun.gc.generation.1.name="old" sun.gc.generation.1.space.0.capacity=857735176 sun.gc.generation.1.space.0.initCapacity=4240441352 sun.gc.generation.1.space.0.maxCapacity=5368709128 sun.gc.generation.1.space.0.name="space" sun.gc.generation.1.space.0.used=155730608 sun.gc.generation.1.spaces=1 sun.gc.generation.2.capacity=138412032 sun.gc.generation.2.maxCapacity=268435456 sun.gc.generation.2.minCapacity=20971520 sun.gc.generation.2.name="perm" sun.gc.generation.2.space.0.capacity=138412032 sun.gc.generation.2.space.0.initCapacity=20971520 sun.gc.generation.2.space.0.maxCapacity=268435456 sun.gc.generation.2.space.0.name="perm" sun.gc.generation.2.space.0.used=138212560 sun.gc.generation.2.spaces=1 sun.gc.lastCause="Heap Inspection Initiated GC" sun.gc.policy.collectors=1 sun.gc.policy.desiredSurvivorSize=264241152 sun.gc.policy.generations=3 sun.gc.policy.maxTenuringThreshold=15 sun.gc.policy.name="GarbageFirst" sun.gc.policy.tenuringThreshold=15 sun.gc.tlab.alloc=0 sun.gc.tlab.allocThreads=0 sun.gc.tlab.fastWaste=0 sun.gc.tlab.fills=0 sun.gc.tlab.gcWaste=0 sun.gc.tlab.maxFastWaste=0 sun.gc.tlab.maxFills=0 sun.gc.tlab.maxGcWaste=0 sun.gc.tlab.maxSlowAlloc=0 sun.gc.tlab.maxSlowWaste=0 sun.gc.tlab.slowAlloc=0 sun.gc.tlab.slowWaste=0 sun.management.JMXConnectorServer.0.authenticate="false" sun.management.JMXConnectorServer.0.remoteAddress="service:jmx:rmi:///jndi/rmi://edu-cat02.lf.codecraft.com:8199/jmxrmi" sun.management.JMXConnectorServer.0.ssl="false" sun.management.JMXConnectorServer.0.sslNeedClientAuth="false" sun.management.JMXConnectorServer.0.sslRegistry="false" sun.management.JMXConnectorServer.address="service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc3AAtVbmljYXN0UmVmMgAADDEwLjY0LjI4LjIwNwAAhbjWmVwaDwiNg3l3YeUAAAFNLZX68oACAHg=" sun.os.hrt.frequency=1000000 sun.os.hrt.ticks=24580753795 sun.perfdata.majorVersion=2 sun.perfdata.minorVersion=0 sun.perfdata.overflow=0 sun.perfdata.size=32768 sun.perfdata.timestamp=259316 sun.perfdata.used=17792 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" sun.property.sun.boot.library.path="/usr/local/jdk1.7.0_21/jre/lib/amd64" sun.rt._sync_ContendedLockAttempts=297851 sun.rt._sync_Deflations=438863 sun.rt._sync_EmptyNotifications=0 sun.rt._sync_FailedSpins=0 sun.rt._sync_FutileWakeups=349651 sun.rt._sync_Inflations=438971 sun.rt._sync_MonExtant=16256 sun.rt._sync_MonInCirculation=0 sun.rt._sync_MonScavenged=0 sun.rt._sync_Notifications=1580811 sun.rt._sync_Parks=1935145 sun.rt._sync_PrivateA=0 sun.rt._sync_PrivateB=0 sun.rt._sync_SlowEnter=0 sun.rt._sync_SlowExit=0 sun.rt._sync_SlowNotify=0 sun.rt._sync_SlowNotifyAll=0 sun.rt._sync_SuccessfulSpins=0 sun.rt.applicationTime=24559855809 sun.rt.createVmBeginTime=1430988913170 sun.rt.createVmEndTime=1430988913429 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)" sun.rt.interruptedBeforeIO=0 sun.rt.interruptedDuringIO=0 sun.rt.javaCommand="org.eclipse.jetty.xml.XmlConfiguration /tmp/start4070493346048555702.properties /opt/educat/apps/conf/jetty8.xml" sun.rt.jvmCapabilities="1000000000000000000000000000000000000000000000000000000000000000" sun.rt.jvmVersion=387252225 sun.rt.safepointSyncTime=2333795 sun.rt.safepointTime=15955181 sun.rt.safepoints=18365 sun.rt.threadInterruptSignaled=0 sun.rt.vmInitDoneTime=1430988913232 sun.threads.vmOperationTime=9516621 sun.urlClassLoader.readClassBytesTime=958824201 sun.zip.zipFile.openTime=72163038 sun.zip.zipFiles=383813、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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65444.html
摘要:在语言上并没有添加太多的新特性,但在使用性能上做了很改进。二多版本包支持即在不同版本下,执行相应版本的代码。在发布新版本的后,用户可能不会升级到新环境,但是项目可能会开始逐步升级到新版本,来提前适应即将到来的环境。 Java9在语言上并没有添加太多的新特性,但在使用、性能上做了很改进。 一、模块间引用 Java9添加了模块化的概念,使得之前的控制访问权限有了改变。 之前: publ...
摘要:新特性概述系列一安装及使用系列二运行系列三模块系统精要系列四更新系列五系列六系列七系列八系列九与的区别迁移注意事项参数迁移相关选项解析使用构建实例使用示例带你提前了解中的新特性 Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:从版本开始,不再单独发布或者版本了,有需要的可以自己通过去定制官方解读官方细项解读稳步推进系列六的小试牛刀一文读懂的为何如此高效弃用引擎 Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要讲述一下Java11的新...
阅读 2798·2023-04-25 17:37
阅读 1380·2021-11-24 10:29
阅读 3983·2021-09-09 11:57
阅读 938·2021-08-10 09:41
阅读 2460·2019-08-30 15:55
阅读 2992·2019-08-30 15:54
阅读 2177·2019-08-30 15:53
阅读 1270·2019-08-30 15:43