问题标签 [jvm-hotspot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
599 浏览

java - 修改 rt.jar 的限制

修改 rt.jar 中的类时有哪些限制。我意识到这通常特定于 JRE 的版本和供应商。例如,我发现 Sun 1.6 VM 中的 Hotspot 不喜欢向 java.lang.Object 添加字段,因为它对 Object 的大小进行了硬编码假设。但是,如果我修改 rt.jar 中的类的重要部分,对于肯定在我的 jar 中的类,我会在运行时得到虚假的 ClassNotFoundErrors。我已经尝试修改 rt.jar 并用各种 -Xbootclasspath 参数取代它。

我真的不知道在哪里可以找到关于这类事情的文档,例如,我在 OpenJDK 文档中找不到任何内容。

0 投票
2 回答
33224 浏览

java - 读取 Java JVM 启动参数(例如 -Xmx)

我试图弄清楚是否有一种方法可以从正在运行的 java 进程中确定 JVM 启动属性。具体来说,我试图找出 -Xmx(最大堆大小)和 -XX:MaxPermSize 等参数的存储位置。我正在运行 Sun 的 1.6 jvm。

如果您想知道我为什么要这样做,我有许多 JVM 网络服务器,它们可能配置正确也可能不正确,我想将其添加到启动代码检查中。与手动查找和检查所有 jvm 启动文件相比,签入一段部署在各处的 java 代码对我来说要容易得多。现在,无论好坏,jvm 配置文件都不是我们构建过程的一部分,也没有检查到源代码控制中。

0 投票
2 回答
1479 浏览

java - HotSpot优化后生成的代码如何查看?

我想更好地了解 HotSpot 可能在运行时为我的 Java 代码生成哪些优化。

有没有办法查看 HotSpot 在运行一段时间后使用的优化代码?

0 投票
2 回答
401 浏览

java - 优化循环内对象的创建

以下哪项在 Java 6 HotSpot VM 上更理想?

或者

我认为它们的意图都很清楚,所以我不认为风格/增加的复杂性是这里的问题。

直觉上看起来第一个会更好,因为只有一个“新”。但是,鉴于没有保留对映射的引用,HotSpot 是否能够确定为每个循环创建了相同大小的映射(内部的Entry[someNotSoLargeNumber]),然后使用相同的内存块(即不是做很多内存分配,只是归零可能比为每个循环调用 clear() 更快)?

一个可接受的答案是一个文档的链接,该文档描述了 HotSpot VM 可以实际执行的不同类型的优化,以及如何编写代码来辅助 HotSpot(而不是天真地尝试手动优化代码)。

0 投票
5 回答
601 浏览

java - 分配延迟似乎很高,为什么?

我有一个在低延迟环境中运行的(java)应用程序,它通常处理约 600 微秒(+/- 100)的指令。自然地,随着我们进一步进入微秒空间,您会看到成本延迟发生变化的事情,现在我们注意到 2/3 的时间花在了 2 个核心域对象的分配上。

基准测试已将有问题的代码部分从现有引用中分离出来,即从字面上构建对象,即基本上是大量引用(每个类中约 15 个)和几个新列表,尽管请参阅下面的注释以了解准确测量的内容这里。

每个人始终需要〜100micros,这对我来说是莫名其妙的,我正试图找出原因。一个快速的基准测试表明,一个类似大小的充满字符串的对象大约需要 2-3 微秒才能新建,显然这种基准测试充满了困难,但认为它可能作为基准有用。

这里有2个Q

  • 如何调查这种行为?
  • 分配缓慢有什么解释?

请注意,所涉及的硬件是 Sun X4600 上的 Solaris 10 x86,具有 8 个双核 opterons @ 3.2GHz

我们看过的东西包括

  • 检查 PrintTLAB 统计信息,显示 v 几个缓慢的分配,所以那里不应该有争用。
  • PrintCompilation 表明其中一段代码不是 JIT 友好的,尽管 Solaris 在这里似乎有一些不寻常的行为(即与现代 linux 相比,现在没有与 solaris10 类似的老式 linux 可供使用)
  • 日志编译...至少可以说有点难以解析,所以这是一项持续的工作,到目前为止还没有什么明显的
  • JVM 版本... 6u6 和 6u14 一致,尚未尝试 6u18 或最新 7

任何和所有想法表示赞赏

对各种帖子的评论摘要,以尝试使事情更清晰

  • 我正在测量的成本是创建通过 Builder(如其中之一)构建的对象的总成本,私有构造函数调用 new ArrayList 几次以及设置对现有对象的引用。测量的成本包括设置构建器和将构建器转换为域对象的成本
  • 编译(通过热点)有显着的影响,但它仍然相对较慢(在这种情况下,编译将其从 100 微秒降至约 60 微秒)
  • 在我的幼稚基准上编译(通过热点)将分配时间从 ~2micros 减少到 ~300ns
  • 延迟不随年轻一代收集算法(ParNew 或并行清除)而变化
0 投票
2 回答
5368 浏览

java - Java 热点错误

好奇是否有人可以就 Java HotSpot 转储提供帮助...看到一些关于前往 Sun 论坛的参考,我想我会先在这里尝试...下面是转储...

0 投票
2 回答
50326 浏览

java - -XX:-PrintGC 和 XX:-PrintGCDetails 标志有什么作用?

我在这里找到了 JVM 标志。有没有更详细的解释他们到底做了什么?

0 投票
2 回答
2506 浏览

java - 在现有 jvm 进程中执行新的 java 代码

我有一个当前在 Windows shell 下运行的 java 进程。

负责序列化的线程之一被无限期地阻塞,因此存储在内存中的重要信息不再被写入磁盘。

如果我关闭该过程,信息将丢失。

如果我可以编写和编译一些新代码并让它在同一个内存空间中执行,这样在我关闭进程之前可以再次序列化所述信息,那将是很方便的。

该过程是使用java -jar命令启动的。

有了热点虚拟机功能,有没有办法实现这一点?

0 投票
1 回答
3693 浏览

java - Java和.Net之间的JIT有什么区别

我知道 Microsoft .NET 使用 CLR 作为 JIT 编译器,而 Java 有 Hotspot。它们之间有什么区别?

0 投票
1 回答
655 浏览

java - 创建一个热点并将没有背景的图像(如地球图标)设置到我的面板

我尝试通过扩展画布创建热点,并尝试将其添加到由图像绘制的面板上。所以我必须绘制一个图标(图像)而不是屏幕的清晰矩形。为此,我重写了paint 方法来绘制我想要使用的图标。到目前为止没有问题;热点工作正常,图标被绘制成我想要的真实尺寸(32 x 24 像素)。

在我的面板上绘制图像后,我尝试添加这个热点mypanel.paint(g)

问题是我使用了一个没有背景的汽车图标!(我希望你能理解我)只是汽车图标必须显示在画有我的图像的面板上。但是在图标周围会创建一个不需要的矩形,并且会造成不好的视图。如何在没有该背景的情况下在面板上绘制我的图标?请帮我。