我想看看两天前发布的java 11的一些新功能. JEP 330声明我可以在不编译的情况下启动Java-Source-Code-Program.它还应该支持Shebang-Files的使用.
因此我写了这个小的Hello-World程序Test.java:
#!/opt/java/jdk-11/bin/java --source 11
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
我下载了JDK 11并将其解压缩到/opt/java.因此,Shebang本身正在发挥作用.即执行/opt/java/jdk-11/bin/java --version给了我
openjdk 11 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Run Code Online (Sandbox Code Playgroud)
在进行Test.java可执行(使用chmod +x Test.java)后,执行失败.即./Test.java我给了我:
./Test.java:1: error: illegal character: '#'
#!/opt/java/jdk-11/bin/java --source 11
^
./Test.java:1: error: class, interface, or enum expected
#!/opt/java/jdk-11/bin/java --source 11 …Run Code Online (Sandbox Code Playgroud) When I run groovy 2.5.3 on JDK 11 its giving warning message. Is there an option to disable this warning message?
groovy -e 'print "hi"'
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/home/user/.sdkman/candidates/groovy/current/lib/groovy-2.5.3.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)
Thanks
我正在尝试将调试器连接到在Open JDK 11上运行的Wildlfy。
尽管Wildfly说:
Listening for transport dt_socket at address: 8787
我的IDE(IntelliJ IDEA CE 2018.1)声称没有任何连接:
Unable to open debugger port (localhost:8787): java.io.IOException "handshake failed - connection prematurally closed"。
我通过standalone.sh --debug以下方式启动Wildfly JAVA_OPTS:
-server
-Xms64m
-Xmx512m
-XX:MetaspaceSize=96M
-XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djava.awt.headless=true
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED
--add-modules=java.se
Run Code Online (Sandbox Code Playgroud)
Java 9/10/11有什么变化吗?使用Oracle JDK 8时,使用完全相同的设置进行远程调试可以很好地工作。
我可以使用telnet确认该端口8787确实无法访问。
阅读@ehsavoie的评论后进行更新:netstat -ln在运行Wildfly的服务器上显示:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8787 0.0.0.0:* LISTEN
Run Code Online (Sandbox Code Playgroud)
因此,显然在OpenJDK 11中,默认情况下,调试端口现已绑定到localhost。
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 936 file(s) to forward-jetify. Using 12 workers...
info JS server already running.
info Installing the app...
> Task :react-native-gradle-plugin:compileKotlin FAILED
'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility should be set to the same Java version.
1 actionable task: 1 executed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task …Run Code Online (Sandbox Code Playgroud) 我希望JMC能够与OpenJDK,JDK11二进制文件一起使用,因为它已经由Oracle 11从Java 11开源,但无法在Oracle文件夹中找到Oracle和AdoptOpenJDK Java-11二进制文件.我也试过这个https://jdk.java.net/jmc/,因为有些文章说它是单独发布的.有谁知道如何获得OpenJDK-11的JMC.
在使用Java 11在Intellij IDEA中提取变量(ctrl + alt + v)时,我希望默认情况下将其提取为a var而不是详细类型.
var home = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)
代替
String home = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)
有没有办法配置Intellij IDEA来做到这一点?
我使用的是新 java.net.http.HttpClient与sendAsync方法.该HttpClient是Singelton内创建一次像这样:
HttpClient.newBuilder().build()所以真的没什么特别的.
这些请求可以是POST,GET但我不知道是哪个引起了麻烦.
每天只有几个请求,但有时一个线程使用100%的cpu核心.并不是迫在眉睫,而是在请求完成一段时间后.
所以我做了一个线程转储,甚至有两个无限循环发生,以下2个线程突出:
"HttpClient-4-Worker-5" #144 daemon prio=5 os_prio=0 cpu=511298.10ms elapsed=520.71s tid=0x00007f684403e800 nid=0x2d6b runnable [0x00007f68ac162000]
java.lang.Thread.State: RUNNABLE
at jdk.internal.net.http.common.SSLFlowDelegate$Writer.processData(java.net.http@11.0.2/SSLFlowDelegate.java:771)
at jdk.internal.net.http.common.SSLFlowDelegate$Writer$WriterDownstreamPusher.run(java.net.http@11.0.2/SSLFlowDelegate.java:645)
at jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(java.net.http@11.0.2/SequentialScheduler.java:147)
at jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(java.net.http@11.0.2/SequentialScheduler.java:198)
at jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(java.net.http@11.0.2/SequentialScheduler.java:271)
at jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(java.net.http@11.0.2/SequentialScheduler.java:224)
at jdk.internal.net.http.common.SSLFlowDelegate$Writer.triggerWrite(java.net.http@11.0.2/SSLFlowDelegate.java:722)
at jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(java.net.http@11.0.2/SSLFlowDelegate.java:1024)
at jdk.internal.net.http.common.SSLFlowDelegate.doClosure(java.net.http@11.0.2/SSLFlowDelegate.java:1094)
at jdk.internal.net.http.common.SSLFlowDelegate$Reader.unwrapBuffer(java.net.http@11.0.2/SSLFlowDelegate.java:500)
at jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(java.net.http@11.0.2/SSLFlowDelegate.java:389)
- locked <0x00000000fba68950> (a java.lang.Object)
at jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(java.net.http@11.0.2/SSLFlowDelegate.java:263)
at jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(java.net.http@11.0.2/SequentialScheduler.java:175)
- locked <0x00000000fbbca3e8> (a java.lang.Object)
at jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(java.net.http@11.0.2/SequentialScheduler.java:147)
at jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(java.net.http@11.0.2/SequentialScheduler.java:198)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.2/ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.2/ThreadPoolExecutor.java:628)
at java.lang.Thread.run(java.base@11.0.2/Thread.java:834)
Locked ownable …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
public static void main(String[] args) {
Stream.iterate(1, i -> i + 1)
.flatMap(i -> Stream.of(i, i, i))
.peek(System.out::println)
.limit(4)
.forEach(i -> {});
}
Run Code Online (Sandbox Code Playgroud)
Java 8的输出:
1
1
1
2
2
2
Run Code Online (Sandbox Code Playgroud)
在Java 11中:
1
1
1
2
Run Code Online (Sandbox Code Playgroud)
这是Java 8中的错误或预期的行为,在11中进行了更改吗?
上面的代码只是演示不同行为的示例,但是更重要的含义是,以下代码在Java 11中显示1,2,3,但在Java 8中进入了无限循环:
Stream.iterate(0, i -> i + 10)
.flatMap(i -> Stream.iterate(i + 1, j -> j + 1))
.limit(3)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud) 我正在从 Java 8 迁移到 Java 11 并遇到了这个问题。我应该使用:
但是在启动时不断出现错误:
合并bean定义后处理失败;嵌套异常是 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
我找到了多种方法来修复它。尝试添加依赖项:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
尝试添加扩展名:
<extensions>
<extension>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</extension>
</extensions>
Run Code Online (Sandbox Code Playgroud)
这些都没有帮助。
这是 maven-compiler-plugin 配置:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
请帮忙寻找解决办法!!
我正在阅读 JDK 11 中的 LinkedHashMap 源代码,我发现了一段死代码(我不确定)
众所周知,LinkedHashMap 使用双向链表来保存所有元素的顺序。它有一个成员叫做 accessOrder
final boolean accessOrder;
Run Code Online (Sandbox Code Playgroud)
默认情况下它是 false,但如果它被设置为 true,每次运行时get,它都会将它到达的元素移动到链表的末尾。这就是函数afterNodeAccess所做的。
//if accessOrder were set as true, after you visit node e, if e is not the end node of the linked list,
//it will move the node to the end of the linkedlist.
void afterNodeAccess(Node<K, V> e) {
LinkedHashMap.Entry<K, V> last;
if(accessOrder && (last = tail) != e) {
//if enter `if` ?it indicates that e is not the end of …Run Code Online (Sandbox Code Playgroud)