标签: java-17

不支持的类文件主要版本 61

我正在尝试将Glowroot集成到我的 Java 应用程序中。不幸的是,我收到以下错误:

2022-05-13 09:25:57.777 ERROR o.g.a.w.PointcutClassFileTransformer - Unsupported class file major version 61
java.lang.IllegalArgumentException: Unsupported class file major version 61
    at org.glowroot.agent.shaded.org.objectweb.asm.ClassReader.<init>(ClassReader.java:196)
Run Code Online (Sandbox Code Playgroud)

Glowroot 和我的应用程序似乎都不使用 gradle,所以我不知道这种不兼容性从何而来。

您知道如何找到不兼容的根源以及如何修复它吗?

谢谢你!

编辑:我在版本 0.13.6 中使用 Glowroot 。

第二次编辑:似乎glowroot的版本是问题所在......

java incompatibility java-17 glowroot

18
推荐指数
3
解决办法
6万
查看次数

最终班级和记录有什么区别?

简而言之,Java 17 中的最终类记录有什么区别?

什么情况下应该使用记录?

java record final-class java-17

17
推荐指数
2
解决办法
1万
查看次数

在 Java 17 中使用 Javascript 脚本引擎

我必须将项目从 Java 8 迁移到 Java 17。

我可以解决大多数问题,但它包含一个方法,在该方法中我使用 ScriptEngineManager 来评估数学术语。

 ScriptEngineManager mgr = new ScriptEngineManager();
 ScriptEngine e = mgr.getEngineByName("JavaScript");
 
 String t = "5*7";
 if (isMathTerm(t)) {
    System.out.println(e.eval(t).toString());
 }
Run Code Online (Sandbox Code Playgroud)

在 Java 8 中它按要求工作,但在 Java 17 中e始终为 null。

据谷歌称,Java 17 不再支持 JavaScript 引擎。

由于项目限制,我不允许使用第三方库。

Java 17 中有没有正确的方法来处理这个问题?

java eval scriptengine java-17

17
推荐指数
1
解决办法
2万
查看次数

什么是本机内存跟踪的“可维护性内存类别”?

我有一个在 docker 容器中运行的 java 应用程序 (JDK13)。最近我将应用程序移至JDK17(OpenJDK17),发现docker容器的内存使用量逐渐增加。

在调查过程中,我发现“可维护性内存类别”NMT 不断增长(每小时 15mb)。我检查了页面https://docs.oracle.com/en/java/javase/17/troubleshoot/diagnostic-tools.html#GUID-5EF7BB07-C903-4EBD-A9C2-EC0E44048D37,但那里没有提到这个类别。

谁能解释一下这个可维护性类别意味着什么以及什么会导致这种逐渐增加?与 JDK13 相比,还有一些额外的新内存类别。也许有人知道我可以在哪里阅读有关他们的详细信息。

这是命令的结果jcmd 1 VM.native_memory summary

Native Memory Tracking:

(Omitting categories weighting less than 1KB)

Total: reserved=4431401KB, committed=1191617KB
-                 Java Heap (reserved=2097152KB, committed=479232KB)
                            (mmap: reserved=2097152KB, committed=479232KB) 
 
-                     Class (reserved=1052227KB, committed=22403KB)
                            (classes #29547)
                            (  instance classes #27790, array classes #1757)
                            (malloc=3651KB #79345) 
                            (mmap: reserved=1048576KB, committed=18752KB) 
                            (  Metadata:   )
                            (    reserved=139264KB, committed=130816KB)
                            (    used=130309KB)
                            (    waste=507KB =0.39%)
                            (  Class space:)
                            (    reserved=1048576KB, committed=18752KB)
                            (    used=18149KB)
                            (    waste=603KB =3.21%)
 
- …
Run Code Online (Sandbox Code Playgroud)

java java-17 openjdk-17

16
推荐指数
1
解决办法
1359
查看次数

我们如何为java 17记录类提供Jackson注释

我们如何为 java 17 记录类创建添加字段级注释?

record Rectangle(double length, double width) { }
Run Code Online (Sandbox Code Playgroud)

java json java-17

16
推荐指数
1
解决办法
1万
查看次数

Spark 的 Java 17 解决方案 - java.lang.NoClassDefFoundError:无法初始化类 org.apache.spark.storage.StorageUtils

这里有一些解决方案

Windows Spark 错误 java.lang.NoClassDefFoundError:无法初始化类 org.apache.spark.storage.StorageUtils

上述错误可能对应于以下异常:

java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x12a94400) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module
Run Code Online (Sandbox Code Playgroud)

切换回 Java 11 或更低版本对我来说不是一个解决方案。Java 17 如何解决这个问题?

java apache-spark java-17

14
推荐指数
1
解决办法
8275
查看次数

在 Java 17 上使用 Spark 3.3.0 运行单元测试失败,并出现 IllegalAccessError: class StorageUtils 无法访问 class sun.nio.ch.DirectBuffer

根据发行说明,特别是在 Java 17 上构建和运行 Spark ( SPARK-33772 ),Spark 现在支持在 Java 17 上运行。

但是,将 Java 17 (Temurin-17.0.3+7) 与 Maven (3.8.6) 和 maven-surefire-plugin (3.0.0-M7) 一起使用,在运行使用 Spark (3.3.0) 的单元测试时会失败和:

java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x1e7ba8d9) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x1e7ba8d9

堆栈是:

java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x1e7ba8d9) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module …
Run Code Online (Sandbox Code Playgroud)

java apache-spark java-17

14
推荐指数
2
解决办法
1万
查看次数

如何在 Java 17 中通过反射获取所有记录字段及其值?

我上过一堂课:

class A {
   public final Integer orgId;
}
Run Code Online (Sandbox Code Playgroud)

我将其替换为Java 17中的记录:

record A (Integer orgId) {
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个通过反射进行验证的代码,该代码适用于常规类,但不适用于记录:

Field[] fields = obj.getClass().getFields(); //getting empty array here for the record
for (Field field : fields) {
}
Run Code Online (Sandbox Code Playgroud)

在 Java 17 中通过反射获取 Record 对象字段及其值的正确方法是什么?

java reflection java-record java-17

13
推荐指数
1
解决办法
7679
查看次数

Java 17 中的种子随机生成器

Java 17 引入了一个RandomGeneratorFactory用于实例化随机数生成器的新类。该create(long)方法描述为

创建一个RandomGenerator基于所选算法的实例,提供起始长种子。如果算法不支持长种子,则使用无参数形式的 create。

然而,似乎没有一种方法RandomGeneratorFactory可以用来确定是否long支持种子。如何使用新 API 来获取RandomGenerator保证使用提供的种子创建的实例long

java random java-17

13
推荐指数
1
解决办法
572
查看次数

是否有充分的理由将 OpenJDK 代码中的以下 ArrayList 构造函数分为两种不同的情况?

例如,在 JDK17 中阅读 ArrayList 类的 OpenJDK 代码时

https://github.com/openjdk/jdk17/blob/master/src/java.base/share/classes/java/util/ArrayList.java

我偶然发现了以下构造函数:

public ArrayList(Collection<? extends E> c) {
    Object[] a = c.toArray();
    if ((size = a.length) != 0) {
        if (c.getClass() == ArrayList.class) {
            elementData = a;
        } else {
            elementData = Arrays.copyOf(a, size, Object[].class);
        }
    } else {
        // replace with empty array.
        elementData = EMPTY_ELEMENTDATA;
    }
}
Run Code Online (Sandbox Code Playgroud)

c.getClass()区分是或不是的原因是什么ArrayList.class?这个案子有必要分拆吗?

(我只是想理解 OpenJDK 类 ArrayList 发行版中的 Java 代码。)

java reflection constructor arraylist java-17

12
推荐指数
2
解决办法
290
查看次数