小编Ser*_*rCe的帖子

JDK8和JDK10上三元运算符的行为差异

请考虑以下代码

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)

java unboxing javac java-8 java-10

57
推荐指数
2
解决办法
3514
查看次数

如何设置docker在每个构建步骤中使用来自注册表的缓存

我有两台带有docker的服务器和一台带有私有注册表的服务器.

我在第一台机器上建了Dockerfile; 然后我将图像推送到注册表.

是否可以使用我的注册表中的缓存立即在第二台机器上构建Dockerfile?如果不是,有没有办法加速构建"几乎"相同的Dockerfiles而不编写我自己的缓存?

它试图设置,--registry-mirror但它没有帮助.

caching docker docker-registry

16
推荐指数
3
解决办法
6890
查看次数

Git钩子,修改提交文件

我正在尝试编写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)

git bash hook commit pre-commit-hook

8
推荐指数
1
解决办法
3835
查看次数

使用JDK10 SDK的IntelliJ无法编译1.8目标的maven项目

考虑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

8
推荐指数
1
解决办法
926
查看次数

使用 Java API 验证 BCP-47 语言标签

据我所知,验证给定 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

java performance localization

8
推荐指数
1
解决办法
1653
查看次数

gRPC流服务只能有单个参数的原因

目前,gRPC 服务定义只能有一个参数,即使它\xe2\x80\x99 是一个流服务,这使得表示\xe2\x80\x9cinitial\xe2\x80\x9d 请求具有挑战性。例如,考虑一个用户可以加入聊天室的聊天应用程序。

\n\n

在这种情况下,域可以建模如下。

\n\n
message JoinRoomRequest {\n  required string room = 1;\n}\n\nmessage ChatMessage {\n  required string content = 2;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

聊天应用程序的使用者将发送加入请求并启动双向消息流,因此可以通过这种方式描述服务。

\n\n
service SimpleChat {\n  rpc joinChatRoom (JoinRoomRequest, stream ChatMessage) returns (stream ChatMessage);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,在 gRPC 中,上述语法无效。表示所描述的聊天服务的唯一方法是

\n\n
service SimpleChat {\n  rpc joinChatRoom (stream ChatMessage) returns (stream ChatMessage);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个决定背后的原因是什么?如何在 gRPC 中对类似的域进行建模?

\n

stream protocol-buffers grpc

7
推荐指数
1
解决办法
2516
查看次数

在什么情况下 CLOCK_MONOTONIC 可能不可用

Java在 LinuxSystem.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 服务器上都可用是否合理?

java linux time clock gettimeofday

6
推荐指数
1
解决办法
1826
查看次数

IE 10在Web应用程序中崩溃

当用户在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

5
推荐指数
1
解决办法
1804
查看次数

从Chrome中的源地图导航到JS代码

有没有办法从源映射导航到原始的JS文件?

我在断点处暂停了我的应用程序; Chrome正在向我展示source-map-file,它是"从index.js映射的源".那时我想导航到那个index.js文件,但我找不到办法.

javascript google-chrome source-maps

5
推荐指数
0
解决办法
108
查看次数

改变 perf_event_mlock_kb 的后果

我试图了解更改/proc/sys/kernel/perf_event_mlock_kb.

  • perf的手册页

    非特权用户可以 mlock(2) 的最大页面数。默认值为 516 (kB)。

  • 内核文档

    每 CPU 环形缓冲区的控制大小不计入 mlock 限制。默认值为 512 + 1 页

让我感到困惑的是,两个来源都使用两个不同的单位 - 页数和内存 Kb。同时,_kb名称的后缀暗示该文件定义了 Kb 的数量。

我的理解是否正确,该措辞意味着该数字应该可以通过页面大小来判断,如果我在具有两个 vCPU 的机器上将文件设置为 8046,那么 perf 将能够为事件缓冲区占用多达 16Mb 的内存?

linux performance linux-kernel perf

3
推荐指数
1
解决办法
600
查看次数