Files.isHidden(Path.of("c:\\")) 在Windows 10,JDK 13上返回true
但在JDK 12同一台机器上返回false。
有人知道为什么吗?
最近将一个大型项目从 Java 11 升级到 13。我使用 AspectJ 进行日志记录,现在在启动时收到此错误:
AspectJ Internal Error: unable to add stackmap attributes. Unsupported class file major version 57
Run Code Online (Sandbox Code Playgroud)
看起来很明显 Java 13 不受支持,并且查看 AspectJ 网站,他们提到版本 1.9.3 中添加了 Java 12 支持,但截至最新版本 1.9.4,仍然没有提到 Java 13 支持。
知道是否有办法解决这个问题,或者该项目是否会很快再次更新?最后一次发布是在五月份...
更新
根据要求,这是我的依赖声明:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是我的 Java 代理声明:
-javaagent:lib/aspectjweaver-1.9.4.jar -javaagent:lib/spring-instrument-5.2.0.RELEASE.jar
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试使用 Java-13 和 Maven 创建 Java 模块项目。我的pom.xml是:
<?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>wtf.g4s8</groupId>
<artifactId>oot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<junit-platform.version>5.3.1</junit-platform.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>13</jdk.version>
</properties>
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<target>${jdk.version}</target>
<source>${jdk.version}</source>
<release>${jdk.version}</release>
<useIncrementalCompilation>false</useIncrementalCompilation>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
版本:
$ mvn help:system | grep -i jdk
sun.boot.library.path=/opt/jdk-13.0.1/lib
jdk.debug=release
java.home=/opt/jdk-13.0.1
java.runtime.name=OpenJDK Runtime Environment …Run Code Online (Sandbox Code Playgroud) 我的 Mac 上有最新的 (13.0.1) OpenJDK,但它似乎不包括 Shenandoah。我疯了吗?我知道已经发货了 它可以在我的 Linux 机器上运行。有不同的下载吗?不同的旗帜?
~ $ java -XX:+UnlockExperimentalVMOptions -XX:+PrintCommandLineFlags -version
-XX:G1ConcRefinementThreads=4 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=134217728
-XX:MaxHeapSize=2147483648 -XX:MinHeapSize=6815736 -XX:+PrintCommandLineFlags
-XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UnlockExperimentalVMOptions
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
~ $ java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+PrintCommandLineFlags -version
Error occurred during initialization of VM
Option -XX:+UseShenandoahGC not supported
Run Code Online (Sandbox Code Playgroud) 我无法让 Java/Javascript 桥在 Java11 和 Java13 上工作。该桥接器似乎在 Java8 和 Java10 中运行良好。
这里的代码与/sf/answers/2438838671/基本相同,它在 Java8 和 Java10 上再次适用于我:
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javafx.application.Application;
import javafx.concurrent.Worker.State;
import javafx.scene.control.ButtonType;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebEvent;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
JavaBridge bridge;
WebEngine webEngine;
@Override
public void start(Stage primaryStage) throws MalformedURLException {
final URL url = new File("C:/test.html").toURI().toURL();
WebView webView = new javafx.scene.web.WebView();
webEngine = webView.getEngine(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用增强的 switch 语句初始化两个变量:
int num = //something
boolean val1;
String val2;
val1, val2 = switch(num) {
case 0 -> (true, "zero!");
case 1 -> (true, "one!");
default -> (false, "unknown :/");
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我想创建一个每周一次的时间表。
因为从一个星期到下一个星期的时间表是一样的,所以我需要存储的唯一信息是一周中的哪一天,以及它发生的时间。例如。Monday 2:30pm. 实际日期并不重要,时区也不重要。
到目前为止,我一直在编写我的代码,将日期和时间分开,使用DayOfWeek枚举和LocalTime类型来处理时间。但是我开始遇到使用两个变量来管理时间而不是像 DateTime 这样的单一方便类型来管理时间的问题。例如。如果我想在星期二晚上 11 点之后 3 小时获得时间,我可以使用该LocalTime.plus()方法获得凌晨 2 点,但这并没有考虑当天的滚动,我必须单独检查和更新。
我还想确保从周末到开始我有任何解决方案:例如。周日晚上 10 点之后的 5 小时应该是周一凌晨 3 点。
JDK 中是否存在这样的类,或者定义您自己的时间类型是否足够容易?或者使用java提供的LocalDateTime解决一些问题会更好,并以某种方式忽略日期组件?
我们正在使用 Jess,它是一个用 Java 编写的规则引擎。它已经变得相当古老,并且大部分是使用 Java 1.5 和更低版本的语言功能编写的。现在,我们已经使用它很多年了,在 Java 升级过程中从未注意到任何问题,直到现在,当我们计划从 Java 11 切换到 Java 17 时。
仅通过切换 java 版本,我们的运行时间就变慢了 30-40%。我们已经做了很多测试,但无法真正找到罪魁祸首。
例如,我们检查了不同的 Java 版本和不同的供应商(eclipse、azul 和 orcacle),13+ 的所有版本都比 Java 11 慢。
使用 VisualVM,我能够指出一些方法,但没有任何具体的内容可以说明这可能是问题所在。
看看它,似乎有多个性能回归加在一起就是一个很大的回归,但这似乎很不现实。
一些函数如下所示:
private synchronized Map findVariable(String key) {
Context c = this;
while (c != null) {
Map ht = c.getVariables();
Value v = (Value) ht.get(key);
if (v != null)
return ht;
else
c = c.m_parent;
}
return null;
}
private synchronized Map getVariables() {
if (m_variables == null)
m_variables …Run Code Online (Sandbox Code Playgroud) Java 13 即将到来,所以我开始研究它的新特性,其中之一是文本块。
我写了一个简单的程序
public final class Example {
public static void main(String[] args) {
final String greeting = """Hello
It's me, Andrew!""";
System.out.println(greeting);
}
}
Run Code Online (Sandbox Code Playgroud)
我期待看到
Hello
It's me, Andrew!
Run Code Online (Sandbox Code Playgroud)
我得到的是一个编译错误说
非法文本块打开分隔符序列,缺少行终止符
不经意间,我偶然发现了一个jdk-15我不知道的变化。假设我有一个非常简单的问题:3 个整数的数组的大小是多少?为此,我使用JOL。代码相当简单:
import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;
public class Array {
public static void main(String [] args){
int [] array = new int[3];
System.out.println(ClassLayout.parseInstance(array).toPrintable());
}
}
Run Code Online (Sandbox Code Playgroud)
我运行这个jdk-13:
java -Djdk.attach.allowAttachSelf -Djol.tryWithSudo=true -cp jol-cli.jar Array.java
Run Code Online (Sandbox Code Playgroud)
我得到输出:
[I object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) 18 0e 07 …Run Code Online (Sandbox Code Playgroud) java ×10
java-13 ×10
java-11 ×2
aspectj ×1
datetime ×1
delimiter ×1
java-15 ×1
javafx ×1
javascript ×1
jodatime ×1
jol ×1
macos ×1
maven ×1
performance ×1
regression ×1
shenandoah ×1
spring-boot ×1
string ×1