想知道是否有人从Sun/Oracle JDK切换到OpenJDK?
生产准备好了吗?版本7发行版与Oracle版本有何不同?
我一直在阅读sun.misc.Unsafe类(openjdk6),因为我很好奇它实际引用了多少本机方法.可以理解的是,类中有大量本机方法,但我似乎无法找到它们的实现位置.
我已经通过openjdk6 repo grep了,虽然我可以找到其他类的本机方法的实现,但我找不到Unsafe的.我猜他们不是openjdk代码,而是编译为热点的一部分?
我在openjdk中查找错误的位置还是确实在热点中实现了?我们将非常感谢您对其所在地的参考.
我试图让我的应用程序中使用使用的字体从特定位置在OpenJDK的安装appendedfontpath属性,但它不是为我工作.
../jre1.8.0_121+1/bin/java -Dappendedfontpath=/usr/lib/fonts/ -jar lib/songkong-4.7.jar -m /mnt/disk1/share
Run Code Online (Sandbox Code Playgroud)
报告没有安装字体,但/ usr/lib/fonts文件夹确实包含字体 ipag.ttf
请注意:
fc-list
什么都不返回fc-cache -f
如果我可以通过指定包含字体的字体文件夹来使其工作,那对我来说它将是一个有效的解决方案.
我注意到使用OpenJDK与OracleJDK相比,字体间距的差异.我把它缩小到了字体.它们由OpenJDK渲染得更宽......上面截图的仔细目视检查显示字符宽度相同,唯一的区别是间距.我还通过对所有字符A-Za-z0-9的字体度量的编程检查来确认这一点.
例如,12pt的字符串"Dialog - plain"是
我已经广泛地搜索信息就这个问题和发现的各种选项,包括-Dawt.useSystemAAFontSettings
,-Dswing.useSystemFontSettings
,-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
从Java_Runtime_Environment_fonts.我试过改变所有这些,但结果保持不变.
进一步的调查发现sun.font.FontScaler
,这使用了不同的底层fontscaler.这看起来部分可配置,sun.font.FontUtilities
其中检查系统属性-Dsun.java2d.font.scaler=t2k
,但设置这没有区别.
我的问题:可以FreetypeFontScaler
配置为以类似或更接近T2KFontScaler的方式运行吗?
if (FontUtilities.isOpenJDK) {
scalerClass = Class.forName("sun.font.FreetypeFontScaler");
} else {
scalerClass = Class.forName("sun.font.T2KFontScaler");
}
Run Code Online (Sandbox Code Playgroud)
这是我一直在使用的测试程序
public class FontTester {
public static void main(String[] args) throws Exception {
System.out.println(String.format("java.home=%s", System.getProperty("java.home")));
String family = Font.DIALOG;
int style = Font.PLAIN;
describeFont(new Font(family, style, 12));
JFrame frame = new JFrame();
frame.setSize(800, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试解决文件夹树中所有文件的规范路径,但由于某种原因它无法解决它们(并且间歇性地JVM安全代码将在FilePermission中正确解析符号链接并导致安全性错误).
ENV:
$ java -version
java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
Run Code Online (Sandbox Code Playgroud)
系统中已知的符号链接是/usr/share/java/gnome-java-bridge.jar:
$ ls -l /usr/lib/jvm/java-6-openjdk/jre/lib/ext/gnome-java-bridge.jar
lrwxrwxrwx 1 root root 50 2012-02-24 13:39 /usr/lib/jvm/java-6-openjdk/jre/lib/ext/gnome-java-bridge.jar -> ../../../../../../share/java/gnome-java-bridge.jar
Run Code Online (Sandbox Code Playgroud)
以下代码应解析此已知符号链接:
String symlinkedFilePath =
"/usr/lib/jvm/java-6-openjdk/jre/lib/ext/gnome-java-bridge.jar";
File symlinkedFile = new File(symlinkedFilePath);
System.out.println(symlinkedFile.getAbsolutePath());
System.out.println(symlinkedFile.getCanonicalPath());
Run Code Online (Sandbox Code Playgroud)
但产生:
/usr/lib/jvm/java-6-openjdk/jre/lib/ext/gnome-java-bridge.jar
/usr/lib/jvm/java-6-openjdk/jre/lib/ext/gnome-java-bridge.jar
Run Code Online (Sandbox Code Playgroud)
使用以下代码进行的进一步测试有时会返回true以进行权限检查,但有时会返回false:
String symlinkedFilePath =
"/usr/lib/jvm/java-6-openjdk/jre/lib/ext/gnome-java-bridge.jar";
File symlinkedFile = new File(symlinkedFilePath);
FilePermission recursivePermission = new FilePermission(
symlinkedFile.getParentFile().getParent() + "/-", "read");
FilePermission filePermission = new FilePermission(
symlinkedFile.getAbsolutePath(), "read");
System.out.println(recursivePermission);
System.out.println(filePermission); …
Run Code Online (Sandbox Code Playgroud) 我已经openproj_1.4-2.deb
在我的ubuntu上安装了.而且我在打开同样的时候会遇到以下错误.
Your Java vendor is "Oracle Corporation". To run OpenProj, you need the Sun Java implementation.
The auto-detected Java Runtime used is..
Run Code Online (Sandbox Code Playgroud)
我试图$HOME/.openproj/run.conf
通过更新JAVA_EXE
变量来编辑文件来修复.但它没有用.如何在Linux上运行openproj?请帮助,提前致谢.
(抱歉无法创建新标签,openproj
)
当我安装netbeans它给了我选择java环境的选项,我有3个选项,oracle java和这两个(java-1.7.0-openjdk-i386和java-7-openjdk-i386).这两个有什么区别?如果是ubuntu的os.
我想尽快将我们的生产设置转移到openjdk 1.8.目前我们在centos 6.5上运行openjdk 1.7u55.
麻烦的是,我似乎无法直接从谷歌那里找到一个1.8的yum存储库.是否已在某处释放可用的rpm?如果是的话,在哪里?如果没有,那么可能会发生粗略的ETA(例如,centos 7或epel?).我可能要等几个星期但不会太久.
我至少能找到一些fedora软件包:https://apps.fedoraproject.org/packages/java-1.8.0-openjdk/builds
所以,这表明人们至少在研究这个问题,但我不知道这些软件包是否与centos一样稳定(或根本不工作).
为清楚起见,我知道这是jdk 1.8的早期阶段,并且我很清楚这些权衡.我不是在寻找有关如何从Oracle下载Oracle Java的构建说明或指令,因为它们缺少yum repo和许可证点击是令人讨厌的.
我正在浏览openjdk并注意到String.equalsIgnoreCase中的一个奇怪的代码路径,特别是方法regionMatches:
if (ignoreCase) {
// If characters don't match but case may be ignored,
// try converting both characters to uppercase.
// If the results match, then the comparison scan should
// continue.
char u1 = Character.toUpperCase(c1);
char u2 = Character.toUpperCase(c2);
if (u1 == u2) {
continue;
}
// Unfortunately, conversion to uppercase does not work properly
// for the Georgian alphabet, which has strange rules about case
// conversion. So we need to make one last check …
Run Code Online (Sandbox Code Playgroud) 我有Oracle JDK7(JavaSE Hotspot Embedded JRE)和OpenJDK7(Cacao,JamVM,ZeroVM).平台是:PPC32嵌入式平台(e550)
我用两个java运行简单的素数java应用程序.由于coclusion Oracle JRE比使用cacao或jamvm或零VM的open jdk快得多.
我希望用openjdk提高执行速度.需要与oracle JRE相同的执行时间.如何提高java应用程序(单线程或多线程)的执行速度.
哪些是Oracle和Open JDK中不同的组件.
openjdk ×10
java ×9
jvm ×2
linux ×2
centos6 ×1
equals ×1
fonts ×1
jvm-hotspot ×1
performance ×1
permissions ×1
string ×1