请考虑以下代码
public class JDK10Test {
public static void main(String[] args) {
Double d = false ? 1.0 : new HashMap<String, Double>().get("1");
System.out.println(d);
}
}
Run Code Online (Sandbox Code Playgroud)
在JDK8上运行时,此代码会打印,null而在JDK10上会生成此代码NullPointerException
Exception in thread "main" java.lang.NullPointerException
at JDK10Test.main(JDK10Test.java:5)
Run Code Online (Sandbox Code Playgroud)
除了JDK10编译器生成的两个与自动装箱相关的附加指令外,编译器生成的字节码几乎完全相同,并且似乎负责NPE.
15: invokevirtual #7 // Method java/lang/Double.doubleValue:()D
18: invokestatic #8 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
Run Code Online (Sandbox Code Playgroud)
这种行为是JDK10中的错误还是故意更改以使行为更严格?
JDK8: java version "1.8.0_172"
JDK10: java version "10.0.1" 2018-04-17
Run Code Online (Sandbox Code Playgroud) 我有两台带有docker的服务器和一台带有私有注册表的服务器.
我在第一台机器上建了Dockerfile; 然后我将图像推送到注册表.
是否可以使用我的注册表中的缓存立即在第二台机器上构建Dockerfile?如果不是,有没有办法加速构建"几乎"相同的Dockerfiles而不编写我自己的缓存?
它试图设置,--registry-mirror但它没有帮助.
我正在尝试编写git pre-commit钩子脚本,它应该在修改文件的开头写入提交日期.我的问题是我无法将修改过的文件添加到以前的提交中.当我再次尝试调用git commit时,它会运行递归.如何编写脚本,在修改后的文件末尾添加修改时间?
我的代码:
#!/bin/bash
files_modified=`git diff-index --name-only HEAD`
for f in $files_modified; do
if [[ $f == *.groovy ]]; then
$line = $(head -1 f)
if [[ $line == "/%%*" ]];
then
sed -i 1d
fi
echo "/%% " + $(date +"%m_%d_%Y") + " %%\\" >> f
git add f
fi
done
git commit --amend #recursive
exit
Run Code Online (Sandbox Code Playgroud) 考虑maven项目中的以下代码:
import org.w3c.dom.css.CSSStyleDeclaration;
public class Test {
public static void main(String[] args) {
CSSStyleDeclaration styleDeclaration = null;
}
}
Run Code Online (Sandbox Code Playgroud)
哪里pom.xml包含maven-compiler-plugin插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.serce.jdk10mvntest</groupId>
<artifactId>jdk10mvntest</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
可以使用maven编译该项目,没有错误.但是,当它使用带有JDK10 SDK的IntelliJ编译时,会Error:(1, 27) java: package org.w3c.dom.css does not exist出错.如果源更改为<source>10</source>错误消失.我希望问题可能与拼图相关,但我无法使用--add-modules ...因为javac错误option --add-modules not allowed with target 1.8.
是否有任何变通方法允许我使用IntelliJ与JDK10 SDK以及 …
java compilation intellij-idea java-platform-module-system java-10
据我所知,验证给定 BCP-47 语言标签是否有效的唯一方法是使用以下习惯用法:
private static boolean isValid(String tag) {
try {
new Locale.Builder().setLanguageTag(tag).build();
return true;
} catch (IllformedLocaleException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这种方法的缺点是会setLanguageTag引发异常,该异常在经常检查区域设置的工作负载中具有明显的(在配置文件中)性能开销。
该setLanguageTag函数是使用sun.util.localeAPI 实现的,据我所知,这是唯一sun.util.locale.ParseStatus进行检查的地方。
我希望能够做的是使用具有以下语义的方法:
import sun.util.locale.LanguageTag;
import sun.util.locale.ParseStatus;
private static boolean isValid(String tag) {
ParseStatus sts = new ParseStatus();
LanguageTag.parse(tag, sts);
return !sts.isError();
}
Run Code Online (Sandbox Code Playgroud)
但是,无法以上述方式检查区域设置,因为它直接使用类,因为它需要额外的 JDK 选项才能从模块sun.*导出。sun.util.localejava.base
有没有一种方法可以在不使用私有sun.*API 的情况下验证语言标签,同时与 的实现保持一致sun.util.locale.LanguageTag#parse?
目前,gRPC 服务定义只能有一个参数,即使它\xe2\x80\x99 是一个流服务,这使得表示\xe2\x80\x9cinitial\xe2\x80\x9d 请求具有挑战性。例如,考虑一个用户可以加入聊天室的聊天应用程序。
\n\n在这种情况下,域可以建模如下。
\n\nmessage JoinRoomRequest {\n required string room = 1;\n}\n\nmessage ChatMessage {\n required string content = 2;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n聊天应用程序的使用者将发送加入请求并启动双向消息流,因此可以通过这种方式描述服务。
\n\nservice SimpleChat {\n rpc joinChatRoom (JoinRoomRequest, stream ChatMessage) returns (stream ChatMessage);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是,在 gRPC 中,上述语法无效。表示所描述的聊天服务的唯一方法是
\n\nservice SimpleChat {\n rpc joinChatRoom (stream ChatMessage) returns (stream ChatMessage);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这个决定背后的原因是什么?如何在 gRPC 中对类似的域进行建模?
\nJava在 Linux上System.nanoTime()的单调实现依赖于操作系统上CLOCK_MONOTONIC可用的事实。如果它不可用,它会回退到gettimeofday这可能导致在使用nanoTime. 例如,以下测试可能会失败。
long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1
Run Code Online (Sandbox Code Playgroud)
在哪些情况下CLOCK_MONOTONIC可能在服务器上不可用?假设CLOCK_MONOTONIC时钟在所有现代 Linux 服务器上都可用是否合理?
当用户在IE10中的应用程序中工作时,大约每10分钟IE崩溃一次,我启用了故障转储.(使用GWT框架编写的Web应用程序,在IE9中,它完美运行)
来自崩溃转储的信息:
Microsoft (R) Windows Debugger Version 6.12.0002.633 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\LocalDumps\iexplore.exe.9448.dmp]
User Mini Dump File: Only registers, stack and portions of memory are available
Symbol search path is: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows 7 Version 7601 (Service Pack 1) UP Free x86 compatible
Product: LanManNt, suite: TerminalServer SingleUserTS
Machine Name:
Debug session time: Thu Nov 28 05:57:44.000 2013 (UTC + 6:00)
System Uptime: not available
Process Uptime: 0 days 0:00:22.000 …Run Code Online (Sandbox Code Playgroud) javascript crash debugging internet-explorer internet-explorer-10
有没有办法从源映射导航到原始的JS文件?
我在断点处暂停了我的应用程序; Chrome正在向我展示source-map-file,它是"从index.js映射的源".那时我想导航到那个index.js文件,但我找不到办法.
我试图了解更改/proc/sys/kernel/perf_event_mlock_kb.
让我感到困惑的是,两个来源都使用两个不同的单位 - 页数和内存 Kb。同时,_kb名称的后缀暗示该文件定义了 Kb 的数量。
我的理解是否正确,该措辞意味着该数字应该可以通过页面大小来判断,如果我在具有两个 vCPU 的机器上将文件设置为 8046,那么 perf 将能够为事件缓冲区占用多达 16Mb 的内存?
java ×4
java-10 ×2
javascript ×2
linux ×2
performance ×2
bash ×1
caching ×1
clock ×1
commit ×1
compilation ×1
crash ×1
debugging ×1
docker ×1
gettimeofday ×1
git ×1
grpc ×1
hook ×1
java-8 ×1
java-platform-module-system ×1
javac ×1
linux-kernel ×1
localization ×1
perf ×1
source-maps ×1
stream ×1
time ×1
unboxing ×1