我正在尝试将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 17 中的最终类和记录有什么区别?
什么情况下应该使用记录?
我必须将项目从 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 中有没有正确的方法来处理这个问题?
我有一个在 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 17 记录类创建添加字段级注释?
record Rectangle(double length, double width) { }
Run Code Online (Sandbox Code Playgroud) 这里有一些解决方案
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 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) 我上过一堂课:
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 17 引入了一个RandomGeneratorFactory用于实例化随机数生成器的新类。该create(long)方法描述为
创建一个
RandomGenerator基于所选算法的实例,提供起始长种子。如果算法不支持长种子,则使用无参数形式的 create。
然而,似乎没有一种方法RandomGeneratorFactory可以用来确定是否long支持种子。如何使用新 API 来获取RandomGenerator保证使用提供的种子创建的实例long?
例如,在 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 ×10
java-17 ×10
apache-spark ×2
reflection ×2
arraylist ×1
constructor ×1
eval ×1
final-class ×1
glowroot ×1
java-record ×1
json ×1
openjdk-17 ×1
random ×1
record ×1
scriptengine ×1