到目前为止我所能找到的是这个(开放的)Sun bug/RFE条目,获得426 506票:
http://bugs.sun.com/view_bug.do?bug_id=6530906
它在RFE列表中位居第三.
很多人都表示它将被包含在Java 7中......但是有没有人有关于是否包含MiGLayout的任何明确信息?
回答
嗯,似乎Chad有一个观点 - 它不在任何地方的官方列表上,时间肯定会消失,所以除非发生重大事件,否则可以说MiGLayout显然不会包含在Java 7中,尽管有426票来自社区.太糟糕了.
我正在阅读将在Java 7中出现的闭包.
我有点困惑,因为一方面有很多很好的文章描述了新的java闭包.但另一方面,有3种不同的规格,有些文章只是过时了,因为描述的不是最新的提案.
因此,如果有人从一开始就跟踪java闭包的进度,那么请在很短的时间内描述所有3个提案及其当前状态.
关于闭包的另一件事是,是否只存在一个开发线或正在开发不同的版本(例如,来自Sun,来自Google,来自Apache等的闭包)?
所以我在IntelliJ 10.5中打开了一个现有项目作为maven项目.我首先将JDK 7添加到我的SDK列表中以试用这些功能.但是由于某种原因,我的mvn命令会失败,所以我将maven runner切换回1.6.但我得到一个奇怪的错误,其中一些maven命令仍在使用Java 7运行.
在Maven Projects视图中,当我右键单击模块中的生命周期并选择Run Maven Build时,一切正常,但是当我选择Run"clean"时,它仍然使用1.7 JDK.我已从列表中删除了JDK 7,现在我收到一条错误消息,说它无法找到JRE'1.7'.
老实说,我不知道如何解决这个问题,但如果有人有任何建议会很好.
给出了泛型教程中的这个例子.
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
Run Code Online (Sandbox Code Playgroud)
为什么最后一行不能编译,它似乎应该编译.第一行使用非常相似的构造并编译没有问题.
请详细解释.
我使用JVM参数在生产环境(rhel 5.2 x64,oracle jre 1.7_05,tomcat 7.0.28)上运行我的应用程序:
-Xms8192m -Xmx8192m -XX:MaxPermSize=1024m
-Doracle.net.tns_admin=/var/ora_net -XX:ReservedCodeCacheSize=512m -XX:+AggressiveOpts -XX:+UseFastAccessorMethods
-XX:+UseStringCache -XX:+OptimizeStringConcat -XX:+UseCompressedOops -XX:+UseG1GC -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9026 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
Run Code Online (Sandbox Code Playgroud)
经过几次,我有像这样的堆栈跟踪:
Java HotSpot(TM) 64-Bit Server VM warning: Attempt to deallocate stack guard pages failed.
Java HotSpot(TM) 64-Bit Server VM warning: Attempt to allocate stack guard pages failed.
mmap failed for CEN and END part of zip file
[...]
Caused by: java.lang.OutOfMemoryError: null
at java.util.zip.ZipFile.$$YJP$$open(Native Method) ~[na:1.7.0_05]
at java.util.zip.ZipFile.open(Unknown Source) ~[na:1.7.0_05]
at java.util.zip.ZipFile.<init>(Unknown Source) ~[na:1.7.0_05]
at java.util.zip.ZipFile.<init>(Unknown Source) ~[na:1.7.0_05]
at …Run Code Online (Sandbox Code Playgroud) 据我所知,随着Java 7中MethodHandle的引入,引入了编译器生成的方法重载.
MethodHandle的javadoc状态(我已经修剪了示例):
以下是一些用法示例:
Run Code Online (Sandbox Code Playgroud)Object x, y; String s; int i; mh = ... // (Ljava/lang/String;CC)Ljava/lang/String; // (String, char, char) -> String s = (String) mh.invokeExact("daddy",'d','n'); // (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; // (Object, Object, Object) -> Object x = mh.invokeExact((Object)1, (Object)2, (Object)3); // (Ljava/util/List;)I // (List) -> int i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3)); // (Ljava/io/PrintStream;Ljava/lang/String;)V // (PrintStream, String) -> void mh.invokeExact(System.out, "Hello, world.");上述每个调用都会生成一个invokevirtual指令,其名称为invoke,注释中指示的类型描述符.参数类型直接取自实际参数,而返回类型取自立即应用于调用的强制转换.这个演员可能是一个原始人.如果缺少,则如果在使用返回值的上下文中发生调用,则类型默认为Object.如果调用作为语句发生,则转换是不可能的,并且没有返回类型; 电话无效.
实际上,invokeExact和friends的行为就好像每个可能的参数组合和返回类型都有重载.
我听说MethodHandles正在为Java 8中的功能做准备,比如lambdas.(我知道它们对脚本语言已经很有用了.)
[/介绍]
那么,是否有更多这些编译器生成的重载隐藏在Java中?是否有提示将来会有更多这些提示(例如,使用扩展方法)?为什么首先需要它?仅速度?它如何帮助lambdas(我认为lambdas会编译成一个匿名的内部类)?
简而言之,理由是什么; 为什么它们(生成的重载)现在和将来都有用?
更新:我在这里称之为编译器生成的重载,Oracle人称之为签名多态.
我AttachNotSupportedException 在linux(ubuntu 64bit)上运行jmockit测试时得到的.Java版本是1.7.0_51.这个JDK来自Oracle.使用ant运行测试(可能不相关)
查看堆栈跟踪.
[junit]
[junit] java.lang.RuntimeException: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
[junit] at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:89)
[junit] at mockit.internal.startup.JDK6AgentLoader.loadAgent(JDK6AgentLoader.java:54)
[junit] at mockit.internal.startup.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:21)
[junit] at mockit.internal.startup.Startup.initializeIfNeeded(Startup.java:136)
[junit] at mockit.internal.startup.Startup.initializeIfPossible(Startup.java:169)
[junit] at junit.framework.TestResult.<clinit>(TestResult.java:15)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:356)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1165)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1016)
[junit] Caused by: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
[junit] at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
[junit] at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:79)
[junit] ... 8 more
[junit] Exception …Run Code Online (Sandbox Code Playgroud) Java 7引入了Objects包含" null-safe或null-tolerant"方法的类,包括compare(T, T, Comparator<T>).但我什么时候会用
Objects.compare(left, right, comparator);
Run Code Online (Sandbox Code Playgroud)
简单地打电话
comparator.compare(left, right);
Run Code Online (Sandbox Code Playgroud)
?
Objects.compare只有null-safe如果comparator也是如此,为什么我会包装比较调用?首先检查对象标识的优化似乎应该在比较器本身中完成.我能看到的行为中唯一真正的区别在于comparator.compare(left, right)抛出一个NullPointerException如果所有的comparator,left而且right是null,而Objects.compare不是; 这似乎并不是一个重要的考虑因素,可以保证新的标准库方法.
我错过了一些明显的东西吗?
我正在通过JNI使用C++库开发一个成像处理Java 7u80应用程序.
由于我愿意与Java 8u60 并行执行流,我刚刚切换到JDK 8并重新启动了我的所有单元测试.
Java 8u60 Overall duration: **35'408 [ms]**
Java 7u80 Overall duration: **29'581 [ms]**
在我看来,Java 7比Java 8快17%(相同的代码,代码级别分别为7和8).
如果不能做任何事情,我宁愿用Java 7而不是8来实现多线程代码,以保持我已经拥有的Java 7性能.