Tag: openjdk

Eclipse:LD_LIBRARY_PATH,OpenJDK和libjpeg

在我的开发机器(Linux)上,我根本没有设置LD_LIBRARY_PATH ,因为我正在使用的库是在默认目录中,或者我已经将它们添加到ld.conf 。 但是当我使用Eclipse时,我的LD_LIBRARY_PATH被设置为: “/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client: /usr/lib/jvm/java-6-openjdk/jre/lib/i386: /usr/lib/xulrunner-1.9.2.17: /usr/lib/xulrunner-1.9.2.17” (为了便于阅读,添加了换行符)。 我不介意xulrunner,但OpenJDK导致我的应用程序加载 /usr/lib/jvm/java-6-openjdk/jre/lib/i386/libjpeg.so 代替 /usr/lib/libjpeg.so 这导致后续失败,因为OpenJDK中的那个是6b,而我正在使用libjpeg 8。 我知道我可以在编译C ++时覆盖LD_LIBRARY_PATH ,但是当我尝试执行链接我刚​​刚编译的共享库的Python代码时它就会失败。 如何更改此全局LD_LIBRARY_PATH ?

在前一次reflection之后,设置静态最终字段的Javareflection失败

在Java中,事实certificate,字段访问器被缓存,并且使用访问器具有副作用。 例如: class A { private static final int FOO = 5; } Field f = A.class.getDeclaredField(“FOO”); f.setAccessible(true); f.getInt(null); // succeeds Field mf = Field.class.getDeclaredField(“modifiers” ); mf.setAccessible(true); f = A.class.getDeclaredField(“FOO”); f.setAccessible(true); mf.setInt(f, f.getModifiers() & ~Modifier.FINAL); f.setInt(null, 6); // fails 而 class A { private static final int FOO = 5; } Field mf = Field.class.getDeclaredField(“modifiers” […]

解释jstack输出

我有一个java进程使用BatchInserter将大量.csv文件中的大量数据加载到Neo4j数据库中。 我用的是: OpenJDK 7 Ubuntu 12.04 Neo4j 2.0 M3 加载第一个164 GB(根据ls -lh )后,文件夹大小停止增加,但进程继续运行,没有释放内存,CPU仍然是100%(全部根据htop )。 加载过程是单线程的,只有JVM使用多个线程 – 我猜是ParallelGC 。 我不确定如何诊断这类问题,但被指示尝试jstack ,所以将其输出包含在下面。 任何人都知道出了什么问题,或者对如何进行诊断提出建议? Full thread dump OpenJDK 64-Bit Server VM (22.0-b10 mixed mode): “Attach Listener” daemon prio=10 tid=0x00007fc3a4001000 nid=0x5636 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE “Service Thread” daemon prio=10 tid=0x00007fcf58123000 nid=0x4545 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE “C2 CompilerThread1” daemon prio=10 […]

Eclipse不会在Linux Mint中打开,Java也不会在不同的目录中打开

我在Linux Mint 18.2肉桂中的/opt/eclipse中使用openjdk-9安装了Eclipse(请不要告诉我切换oracle jdk)。 每当我点击Eclipse图标时,此窗口都会显示: 这是该窗口的内容: JVM terminated. Exit code=1 /usr/bin/java -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.default=@user.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication –add-modules=ALL-SYSTEM -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m –add-modules=ALL-SYSTEM -jar /opt/eclipse//plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar -os linux -ws gtk -arch x86_64 -showsplash /opt/eclipse//plugins/org.eclipse.epp.package.common_4.7.1.20171005-1200/splash.bmp -launcher /opt/eclipse/eclipse -name Eclipse –launcher.library /opt/eclipse//plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.550.v20170928-1359/eclipse_1629.so -startup /opt/eclipse//plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar –launcher.appendVmargs -exitdata 828016 -product org.eclipse.epp.package.java.product -vm /usr/bin/java -vmargs -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.default=@user.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication –add-modules=ALL-SYSTEM -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m –add-modules=ALL-SYSTEM […]

OpenJDK与OracleJDK的字体略宽

我注意到使用OpenJDK与OracleJDK相比字体间距的差异。 我把它缩小到了字体。 它们由OpenJDK呈现得稍微宽一点……仔细目视检查上面的截图显示字符宽度是相同的,唯一的区别是间距。 我还通过对所有字符A-Za-z0-9的字体度量的编程检查来确认这一点。 例如,12pt的字符串“Dialog – plain”是 OpenJDK中125px宽 – 我的8u131-b11版本 OpenJDK宽125px – 来自redhat磁盘的库存RPM – 1.8u45-b13 OracleJDK中的120px宽度 – 来自Oracle网站的8u131-b11版本 我已经广泛搜索了这方面的信息,并从Java_Runtime_Environment_fonts找到了各种选项,包括-Dawt.useSystemAAFontSettings , -Dswing.useSystemFontSettings , -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel 。 我试过改变所有这些,但结果保持不变。 进一步调查发现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”); } 这是我一直在使用的测试程序 public class FontTester { public static void main(String[] args) throws Exception { […]

OpenJDK JVM不会在多个核心上调度线程

当我在随Ubuntu 12.04一起分发的OpenJDK 6 JVM上运行我的multithreadingJava程序时,所有线程都安排在一个内核上。 但是当我从Oracle最新的1.7 JDK在JVM上运行完全相同的程序时,它很好地围绕所有24个可用内核旋转了我的20个线程。 OpenJDK文档解释了Java线程将被分配给本机线程,但它似乎不起作用。 我的OpenJDK安装中是否存在配置错误,或者它是否真的不支持多核硬件? OpenJDK的: java version “1.6.0_27” OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) Oracle JDK: java version “1.7.0_40” Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

任何人都可以将这个C ++代码(从OpenJDK6)解释为普通英语吗?

这是OpenJDK6的hotspot/src/share/vm/prims/unsafe.cpp的代码片段(从第1082行开始): // JSR166 —————————————————————— UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) UnsafeWrapper(“Unsafe_CompareAndSwapObject”); oop x = JNIHandles::resolve(x_h); oop e = JNIHandles::resolve(e_h); oop p = JNIHandles::resolve(obj); HeapWord* addr = (HeapWord *)index_oop_from_field_offset_long(p, offset); if (UseCompressedOops) { update_barrier_set_pre((narrowOop*)addr, e); } else { update_barrier_set_pre((oop*)addr, e); } oop res = oopDesc::atomic_compare_exchange_oop(x, addr, e); jboolean success […]

为什么java.util.Arraylist#clear以OpenJDK的方式实现?

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#473 public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = null; size = 0; } 我的问题是,为什么他们必须通过支持数组{O(n)}进行循环才能使每个元素有资格进行垃圾收集,因为它们可以重新初始化后备数组,从而丢弃对整个数组的引用{ O(1)}并使其有资格进行垃圾收集? clear() O(n)表现对我来说似乎不太好,或者我错过了什么?

用Java编码文件名

我在嵌入式Linux平台上运行一个小型Java应用程序。 用OpenJDK替换Java VM JamVM后,无法正确存储带有特殊字符的文件名。 像变音符号这样的特殊字符被问号所取代。 这是我的测试代码: import java.io.File; import java.io.IOException; public class FilenameEncoding { public static void main (String[] args) { String name = “umlaute-äöü”; System.out.println(“\nname = ” + name); System.out.print(“name in Bytes: “); for (byte b : name.getBytes()) { System.out.print(Integer.toHexString(b & 255) + ” “); } System.out.println(); try { File f = new File(name); […]

为什么我的Eclipse会一直崩溃?

不知怎的,我不得不承认这个问题 – 希望它不会让我付出太多分。 说清楚:如果你能帮助我找到崩溃的原因,我也会很高兴。 我不希望得到准确的答案。 但是,我不明白为什么我的Eclipse会一直崩溃(冻结)。 主要是当我保存文件时。 出于某种原因,最近崩溃似乎有所增加…… 我使用Eclipse Helios (Version: 3.6.1)和Java版本1.6.0_20 (OpenJDK运行时环境(IcedTea6 1.9.2)(6b20-1.9.2-0ubuntu2)OpenJDK 64位服务器VM(内置19.0-b09,混合模式) ))在Ubuntu 10.10(64位)上。 谢谢!