Tag: jvm

如何创建JVM全局Singleton?

我从这个stackoverflow问题中汲取灵感 如何创建一个保证仅对整个JVM进程可用一次的Java类实例? 然后,在该JVM上运行的每个应用程序都应该能够使用该单例实例。

如何在Java Netbeans Platform模块化项目中设置VM选项?

我有一个Netbeans Platform模块化项目,而不是常规的Java项目。 我想设置VM选项以增加内存,但在“属性”对话框中,无法对模块化Netbeans平台项目执行此操作。 这花费了我很多时间,我仍然没有找到设置VM args的好方法。 在Netbeans 7中编译和运行程序时,是否有人知道如何使用Netbeans平台模块化项目设置VM args? 鉴于麻烦,我几乎准备放弃Netbeans来创建模块化应用程序。

JVM是否有能力检测并行化的机会?

Java Hotspot可以很好地优化顺序代码。 但我猜测,随着多核计算机的出现,运行时的信息可以用于检测在运行时并行化代码的机会,例如检测软件流水线可能在循环和类似的事情中。 关于这个话题有没有做过有趣的工作? 或者是研究失败还是一些很难解决的停顿问题?

JVM什么时候决定重用旧的lambda?

请考虑以下代码片段: public static Object o = new Object(); public static Callable x1() { Object x = o; return () -> x; } public static Callable x2() { return () -> o; } 方法x2()将始终返回相同的lamba对象,而x1()将始终创建新的lamba对象: System.out.println(x1()); System.out.println(x1()); System.out.println(x2()); System.out.println(x2()); 会打印出这样的东西: TestLambda$$Lambda$1/821270929@4a574795 TestLambda$$Lambda$1/821270929@f6f4d33 TestLambda$$Lambda$2/603742814@7adf9f5f TestLambda$$Lambda$2/603742814@7adf9f5f 哪个(在JVM规范中我猜?)是描述了这个lambda重用规则? JVM如何决定重用与否?

JVM是否为每个对象创建一个互斥锁以实现’synchronized’关键字? 如果没有,怎么样?

随着C ++程序员越来越熟悉Java,我看到语言级别支持锁定任意对象而没有任何声明对象支持这种锁定,这有点奇怪。 为每个对象创建互斥锁似乎是一个自动选择的高成本。 除了内存使用,互斥体在某些平台上是OS有限的资源。 如果互斥锁不可用但你的性能特征明显不同,你可以旋转锁定,我希望这会损害可预测性。 在所有情况下,JVM是否足够智能以识别特定对象永远不会成为synchronized关键字的目标,从而避免创建互斥锁? 可以懒惰地创建互斥锁,但是这会引发一个自举需要互斥锁的自举问题,即使解决了这个问题,我也认为仍然会有一些开销用于跟踪是否已经创建了互斥锁。 所以我假设如果可以进行这样的优化,则必须在编译时或启动时完成。 在C ++中,由于编译模型这样的优化是不可能的(你不知道对象的锁是否会跨库边界使用),但是我对Java的编译和链接知道不够了解如果适用相同的限制。

将整个文件传递给JVM参数

我有几个系统都需要将相同的属性加载到JVM。 我可以使用-D标志一次加载一个属性,但我正在寻找能够一次加载整个文件中的所有属性的东西。 例如: 我可以将–options-file = blah.properties添加到我的网络中的所有jvms上,然后从那时起只更改属性文件,该文件可以是网络共享上的单个中央文件。 谢谢, 编辑:任何参数或命令也必须在Windows环境中工作。 因此,任何特定于unix的bash或脚本黑客都行不通。

字符串文字,实习和反思

我正试图找到这个问题的第三个解决方案。 我无法理解为什么这不打印false 。 public class MyClass { public MyClass() { try { Field f = String.class.getDeclaredField(“value”); f.setAccessible(true); f.set(“true”, f.get(“false”)); } catch (Exception e) { } } public static void main(String[] args) { MyClass m = new MyClass(); System.out.println(m.equals(m)); } } 当然,由于字符串实习,被修改的”true”实例与PrintStream的print方法中使用的实例完全相同? public void print(boolean b) { write(b ? “true” : “false”); } 我错过了什么? 编辑 @yshavit的一个有趣的观点是,如果你添加这条线 […]

在JVM上运行/解释C?

有没有办法在JVM上运行普通的c代码? 不通过JNI连接,运行,就像你可以通过JRuby运行ruby代码,或通过Rhino运行javascript。 如果没有当前的解决方案,您会建议我应该做什么? 显然,我想尽可能多地使用部分解决方案来实现它。 ANTLR似乎是一个很好的起点,拥有完整的“ANSI C”语法实现…… 我应该使用ANTLR生成的代码在JVM上构建一个“玩具”VM吗?

解释字节码与编译字节码?

我已经看到一些关于JVM / JIT活动的参考文献,其中似乎在编译字节码和解释字节码之间有所区别。 特定注释声明字节码被解释为前10000次运行并在此后编译。 “编译”和“解释”字节码有什么区别?

将Java控制台应用程序作为守护程序运行(后台)

我开发了一个Java控制台应用程序,在启动时打开一个控制台窗口并保持在前台,我想在后台启动该应用程序。 现在我通过此命令行启动应用程序: java -jar myapp.jar 有没有办法实现这种行为? 它足以改变命令行参数,或者我需要对我的代码进行一些更改?