use*_*246 18 java performance jvm jvm-arguments
我经历过
无处解释使用此标志的好处.
这是性能优势吗?如果是的话,是否会有一个粗略的定义,将会有多少性能优势?(我知道性能问题的答案完全取决于具体情况,但是如果有人报告这样做会带来好处,那就太好了).
rus*_*tyx 13
java.awt.headless=true如果您不使用 AWT 功能,则设置没有性能优势。AWT 功能是按需加载的。
如链接文章中所述,无头模式对于访问一些通常委托给图形主机的 Java 图形功能很有用:
设置无头模式并创建无头工具包的实例后,您的应用程序可以执行以下操作:
- 创建轻量级组件,例如
Canvas,Panel和Swing组件,除了最高层- 获取有关可用字体、字体规格和字体设置的信息
- 设置渲染文本和图形的颜色
- 创建和获取图像并准备用于渲染的图像
- 打印使用
java.awt.PrintJob,java.awt.print.*以及javax.print.*类- 发出声音提示音
例如,在无头模式下,您可以创建和写入图像文件:
BufferedImage img = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
g.drawLine(80, 30, 120, 70);
g.drawLine(80, 70, 120, 30);
ImageIO.write(img, "png", new File("image.png"));
Run Code Online (Sandbox Code Playgroud)
使用 运行时-Djava.awt.headless=true,将生成一个图像文件:
当使用-Djava.awt.headless=false(和不使用 X 窗口服务器)运行时将抛出异常:
java.awt.AWTError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
请注意,JVM 包含确定java.awt.headless未显式设置的值的启发式方法。例如,在 Linux 上如果DISPLAY未设置环境变量,则java.awt.headless自动变为true.
小智 11
无头和非无头模式是不同的,它们具有不同的功能集.如果你只需要做一些简单的事情,比如字体渲染,那么你可以在无头模式下进行.
您可以随时查看JDK源的内容,并亲自查看哪些方法依赖于非无头模式.但在我看来,即使性能提升可以忽略不计,最好还是传递java.awt.headless(如果你不需要"完整"的GUI模式).
任何供应商都可以使用此属性.如果你有完整的GUI,你永远不知道他们是否会做某事.因此,我的经验法则是:始终对控制台应用程序和服务器使用java.awt.headless.它不会伤害.