如何抑制 Octave io 包加载警告:“OpenJDK 64 位服务器 VM 警告:已存档... java.system.class.loader 属性

问题描述 投票:0回答:3

Octave 有没有办法抑制下面的 io 包加载警告消息:

OpenJDK 64 位服务器 VM 警告:由于指定了 java.system.class.loader 属性(值 =“org.octave.OctClassLoader”),已禁用存档的非系统类。要使用归档的非系统类,不得设置此属性

我无法控制 io 包加载正在执行的操作,并且我的程序的其余部分工作正常。但它使控制台输出变得混乱,这非常烦人。

我正在 Xubuntu 18.04 中运行八度脚本

谢谢!

java ubuntu io octave
3个回答
1
投票

这似乎已在 Octave bug #55174 中修复。

Hackish 解决方法(对 Octave 库进行二进制编辑):

cp -ai /usr/lib/x86_64-linux-gnu/liboctinterp.so.7.0.1 a
bbe -e 's/-Djava.system.class.loader=org.octave.OctClassLoader/-Dfoo=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/' a > b
ls -l a b  # Make sure the binary edit did not change the file length!
chmod 644 b
sudo cp -ai b /usr/lib/x86_64-linux-gnu/liboctinterp.so.7.0.1
sudo chown root.root /usr/lib/x86_64-linux-gnu/liboctinterp.so.7.0.1

0
投票

我不知道这是否与 io 包本身有关。这可能就是您设置 Octave 以在系统上使用 Java 的方式。

此外,这个警告似乎是由java生成的,而不是由octave生成的,所以我怀疑你可以从withinoctave中做任何事情来将其关闭。

实际上,这意味着,大概 io (或您正在使用的 io 包中的特定函数)依赖于 java 接口,并且以某种方式运行 java 命令并设置了 -D 属性,如中所述您的警告(即大概

java -Djava.system.class.loader="org.octave.OctClassLoader" ...
)。

以下手册摘录可能与您相关:

您可以在名为 java.opts 的文件中指定用于创建 JVM 的选项。这是一个文本文件,您可以在其中输入包含 -X 和 -D 选项的行,然后在初始化期间将其传递到 JVM。

Java选项文件所在目录由环境变量OCTAVE_JAVA_DIR指定。如果未设置,则使用 javaclasspath.m 所在的目录(通常为 OCTAVE_HOME/share/octave/OCTAVE_VERSION/m/java/)。执行即可找到该目录

which javaclasspath

0
投票

从 JDK 15 开始,我相信 ClassDataSharing 选项已经可用。 JDK 17是第一个正式启用的版本。

如果遇到此警告,您只需添加 -Xshare:off 即可禁用不可用的功能。默认值为 -Xshare:auto,它尝试使用 CDS 但失败并出现警告。

有了这个参数,警告将不再显示。

执行

java -X
时,从java使用页面可以看到以下内容

-Xshare:auto      use shared class data if possible (default)
-Xshare:off       do not attempt to use shared class data
-Xshare:on        require using shared class data, otherwise fail.
                  This is a testing option and may lead to intermittent
                  failures. It should not be used in production environments.
© www.soinside.com 2019 - 2024. All rights reserved.