-
Bug
-
Resolution: Fixed
-
P2
-
7u45, 8
-
b92
-
os_x
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8143517 | emb-9 | Sergey Bylokhov | P2 | Resolved | Fixed | team |
JDK-8149265 | 8u101 | Sergey Bylokhov | P2 | Resolved | Fixed | b01 |
JDK-8132759 | 8u92 | Sergey Bylokhov | P2 | Closed | Fixed | b01 |
JDK-8155410 | emb-8u101 | Sergey Bylokhov | P2 | Resolved | Fixed | b01 |
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin karls-mbp 13.0.2 Darwin Kernel Version 13.0.2: Sun Sep 29 19:38:57 PDT 2013; root:xnu-2422.75.4~1/RELEASE_X86_64 x86_64
EXTRA RELEVANT SYSTEM CONFIGURATION :
MacBook Pro Late 2013 with integrated Intel Iris Pro graphics and discrete NVIDIA GeForce GT 750M graphics cards.
A DESCRIPTION OF THE PROBLEM :
When a Java application runs that presents a UI (in this case a Swing UI) it forces Mac OS X to switch to the discrete GPU, thus consuming more energy than required.
According to https://developer.apple.com/library/mac/qa/qa1734/_index.html, adding an NSSupportsAutomaticGraphicsSwitching key with a value of true to the Info.plist of the application should enable it to use the integrated graphics. However regardless, the Java application uses the discrete graphics.
Apple's Java 6 does not have this property - it operates with the integrated graphics card correctly.
Apple also provide this tech note on supporting multiple GPUs, if it is useful! https://developer.apple.com/library/mac/technotes/tn2229/_index.html
ADDITIONAL REGRESSION INFORMATION:
It does work in Apple's Java, which isn't listed in the Regression drop down. I've included the java -version output for completeness:
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run a Java application that shows a JFrame. Use Activity Monitor's Energy tab to see that it is using the "High Perf GPU".
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
That the Java application will not require the discrete / high perf GPU and will use the integrated GPU.
ACTUAL -
The Java application requires the discrete / high perf GPU and causes the system to switch to using the discrete GPU and thus use more energy / battery drain.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javax.swing.*;
public class Test {
public static void main(String[] argv) {
JFrame f = new JFrame();
f.setVisible(true);
}
}
---------- END SOURCE ----------
- backported by
-
JDK-8143517 [macosx] Java forces the use of discrete GPU
- Resolved
-
JDK-8149265 [macosx] Java forces the use of discrete GPU
- Resolved
-
JDK-8155410 [macosx] Java forces the use of discrete GPU
- Resolved
-
JDK-8132759 [macosx] Java forces the use of discrete GPU
- Closed
- blocks
-
JDK-8132775 [macosx] JavaFX forces the use of discrete GPU
- Resolved
- duplicates
-
JDK-8180174 [macosx] Java programs switch GPU from integrated to discrete
- Closed
- relates to
-
JDK-8251854 [macosx] Java forces the use of discrete GPU
- In Progress
-
JDK-8168761 Java only uses discrete graphics on macOS supporting switchable devices
- Closed