Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
目前是否可以启用mac';Java应用程序中的集成图形芯片?_Java_Macos_Gpu - Fatal编程技术网

目前是否可以启用mac';Java应用程序中的集成图形芯片?

目前是否可以启用mac';Java应用程序中的集成图形芯片?,java,macos,gpu,Java,Macos,Gpu,有没有办法让Java应用程序在mac上使用集成的而不是离散的GPU (我感兴趣的是如何发布一款不会将用户的Mac笔记本电脑推入离散模式的应用程序,而不是像gfxCardStatus那样在我自己的笔记本电脑上锁定所有应用程序的集成模式。)不幸的是,使用Java 7无法实现您想要的功能 网络上的一些来源: 你已经提到了,但这似乎是唯一的办法 从理论上讲,您可以禁用它,但是这还不足以使它不触发java需要离散图形。看起来,作为是否应该使用openGL评估的一部分,它让GPU感到高兴,mac决定

有没有办法让Java应用程序在mac上使用集成的而不是离散的GPU


(我感兴趣的是如何发布一款不会将用户的Mac笔记本电脑推入离散模式的应用程序,而不是像gfxCardStatus那样在我自己的笔记本电脑上锁定所有应用程序的集成模式。)

不幸的是,使用Java 7无法实现您想要的功能

网络上的一些来源:

你已经提到了,但这似乎是唯一的办法

从理论上讲,您可以禁用它,但是这还不足以使它不触发java需要离散图形。看起来,作为是否应该使用openGL评估的一部分,它让GPU感到高兴,mac决定在该应用程序的生命周期内必须启动离散GPU


编辑:似乎甚至不能

必须在应用程序启动器的Info.plist文件中指定一个特殊选项:

<key>NSSupportsAutomaticGraphicsSwitching</key><true/>
NSSupportsAutomaticGraphicsSwitching
这使Java应用程序具有使用集成卡的能力。否则,系统默认使用离散图形。不幸的是,Oracle的标准JVM发行版中没有包含此选项


自2019-08-01起更新:目前最新的macOS+Java通用版本是: macOS 10.14.6 Mojave+Java版本8更新221版本1.8.0_221-b11

nssupportsAutomaticGraphicsSwitch
设置为
TRUE
确实可以防止强制使用离散GPU!但不是所有的Java应用程序!我测试了这些:

jdiskreport 1.4.1:
Info.plist
中添加了
NSSupportsAutomaticGraphicsSwitching=TRUE
后,它会使用内部GPU启动,并正常工作


FreeMind 1.0.1:
Info.plist
随附了
NSSupportsAutomaticGraphicsSwitching=TRUE
NSHighResolutionCapable=TRUE
。删除JVMRuntime=jdk1.7.0_45.jdk确实会启动带有iGPU的应用程序,但随后无法工作。你会看到启动对话框(“Freemind 1.0.1”:初始化这个,那个,等等),直到应用程序准备就绪。但是你只能看到主菜单(我猜是应用程序存根)。没有在窗口中打开新的/最近的文件。只要您想打开/创建一个新文件,窗口的创建就会失败:短闪存和主菜单(我猜是应用程序存根)很快重新呈现。我将在FreeMind询问可以做什么。

我在Mac OS X 10.11.6(15G1108)上遇到了类似的问题,Arduino(基于Java的)应用程序总是使用高功率(外部)图形卡

托马斯的暗示最终让我找到了Arduino的Info.plis条目
NSHighResolutionCapable
,它最初设置为
。将其设置为
,Arduino仅使用集成图形卡即可启动,从而大大降低了Macbook Pro retina的功耗


(Java 8-Update 111,Arduino 1.6.12)

请注意,gfxCardStatus没有帮助,您无法强制切换(不再),因为如果至少有一个依赖的应用程序正在运行,离散GPU将始终通电:
gfxCardStatus
仍然像以前一样工作。它从未能够将正在运行的应用程序从离散模式切换到集成模式,但如果在启动任何集成的不友好应用程序之前锁定它(或关闭所有应用程序,切换到集成模式,然后重新启动),它将继续使用集成芯片。-@Paul Wagland,我可以建议删除或更改上面的编辑吗?(注意,有一个令人困惑且长期存在的问题,您必须选择“集成”两次才能将其锁定:)如果Oracle JVM不支持,您如何利用这一优势?我们在应用程序包中附带了该选项集,但由于缺乏支持,它目前没有任何作用。我已经用标准的OS X Java应用程序包装器对此进行了测试。据我所知,如果您在Java前面使用一个特殊的启动器(包装器),它有自己的Info.plist,您就可以做到这一点。然后OSX将可以自由决定其切换。在Oracle的JDK版本中,此选项未包含在任何Info.plist中。我向Oracle提出了一个错误,但我担心它永远不会被接受/审查,因为Oracles懒惰。我搜索了你的错误报告,却发现了原来的错误报告(与我上面链接的相同)--看起来它在Java 9中得到了修复!(这会消除您的bug吗?)我在这里检查了Java:但不幸的是,我的测试应用程序(jdiskreport)运行时出现了一个错误,我现在无法调试。我所能看到的离散图形仍处于激活状态,因此对我来说,它似乎没有修复。我用“2019-08-01更新”一节补充了答案。将
nssupportsAutomaticGraphicsSwitch
设置为
TRUE
确实可以防止强制使用离散GPU。但并非所有Java应用程序都如此。详情请参阅该节。