问题标签 [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 投票
4 回答
3601 浏览

java - Java中盒装原语的存储成本是多少?

java.lang.Integer像 Java或Java中的盒装原语有多大(以字节为单位)java.lang.Character

anint是 4 个字节,一个典型的指针也是 4 个字节(如果没有被 JVM 压缩)。整数(没有缓存)的成本是这样的4 bytes + 4 bytes = 8 bytes吗?盒子对象中是否有更多隐藏字段或与对象相关的额外开销(即我不知道的对象是否有一般成本?)。

我对缓存问题不感兴趣。我知道JVM会缓存一定范围内的整数。

可以重新表述这个问题:用于装箱值与原始值的内存量相乘的最大因子是多少?

编辑:我确实了解 JVM 的多个实现存在。典型的 32 位 HotSpot 实现的典型成本是多少?

0 投票
1 回答
64 浏览

java - JVM 是否可以优化引用 null(null 类型的实例)所需的内存?

大家下午好

我有一个看起来像这样的类:

从下面 bdonlan 提供的链接中了解到通常一个 Grapheme 对象需要 8 个字节的对象头,4 个字节的变量(其类型是reference)和 4 个字节的填充。code_points

因此,如果我使用代码创建 Grapheme 实例,则new Grapheme(null)该 Grapheme 实例通常总共需要 16 个字节。由于它是否为 16 字节是特定于实现的,从这里开始,我将把这个数字称为x字节。

基本上我想知道我是否创建了n个 Graphemes,将它们传递null给构造函数,并将这些 Graphemes 存储到长度为nGrapheme(int[])的数组中,

运行时(存储 Grapheme 实例)所需的总内存是否严格 为 n * x字节?

或者 JVM 有没有机会尝试做一些神奇的优化,使得所需的内存低于n * x字节?

0 投票
4 回答
18857 浏览

java - 方法区和 PermGen

我试图了解 HotSpot JVM 的内存结构,但对“方法区域”“PermGen”空间这两个术语感到困惑。我提到的文档说方法区包含类和方法的定义,包括字节码。其他一些文档说它们存储在 PermGen 空间中。

那么我可以断定这两个内存区域是相同的吗?

0 投票
1 回答
344 浏览

java - Java Hotspot命令行参数增加Java方法的最大大小

是否有命令行参数来增加 Hotspot 将编译的 Java 方法的最大大小(从 8000 个字节码)?

0 投票
2 回答
429 浏览

jvm - 在生成 output.cfg 文件的地方使用 -XX:+PrintCFGToFile jvm 选项?

我安装了 JDK 6 的 fastdebug 版本,并运行了以下命令:

java -XX:+PrintCFGToFile Test

但没有找到带有打印信息的文件...我在 Linux 和 Windows 操作系统上都试过了,但没有任何成功。放弃后,我从源代码(OpenJDK 7 源代码,Ubuntu)构建了 JDK,但没有成功,同样,它打印"VM option '+PrintCFGToFile'"但没有在执行类的目录中创建文件,也没有在 JDK bin 目录中......我寻找“输出.cfg”在文件系统上,什么也没找到...我检查了来源,似乎该文件确实有名称“output.cfg”(如果我没记错的话是CFGPrinter)

怎么了?是否应指定任何其他选项?如何以及在何处获取包含控制流图信息的此文件?

0 投票
2 回答
1010 浏览

java - 避免需要设置 jmxremote 端口(远程使用 VisualVM)?

我们共享一个用于开发各种 Java 应用程序的远程 Linux 机器,并且我们使用 VisualVM over ssh 来配置应用程序,如此处所述。有什么方法可以在我们的 Java 进程上启用 JMX/分析,而无需在我们的进程/用户之间分配/提供端口号?必须始终确保您指定(唯一)端口号只是为了启用分析,这很烦人。

为了使这一切更加具体:对端口进行硬编码显然不起作用并且会发生冲突:

我们可以要求您在运行进程时始终指定一个唯一端口,但这很乏味——您必须确保您的端口不与其他进程冲突,也不与其他用户冲突:

目前我们使用:

但是我们仍然偶尔会碰到被占用的端口号。

我们可以继续使用更高级的脚本(例如查询netstat占用的端口号并希望没有竞争),但我们想知道是否有更好的方法/我们是否做错了。

0 投票
2 回答
2301 浏览

java - Hotspot7 hsdis PrintAssembly 英特尔语法

每次我使用-XX:+PrintAssemblyHotspot 并且必须阅读可怕的 AT&T 语法时,它都会让我烦恼。

有没有办法告诉它使用英特尔语法?

0 投票
4 回答
2766 浏览

java - 为什么 HotSpot 会使用提升来优化以下内容?

在《Effective Java》中,作者提到了

可以通过 HotSpot 优化成


我对此感到非常困惑。该变量done通常不是const,为什么编译器可以这样优化?

0 投票
2 回答
1120 浏览

java - massive performance difference for an empty loop between java 32 and 64 bit

In my free time i recently made a framework for multi-threaded math operations, and to test it i calculated the first couble of thousand prime numbers.

But i needed it to take more time, so i inserted this code into the prime calculation:

For a long time, i write and compiled the code on a 64bit machine, and tested it on a number of 32 bit machines.

Then i ran it on a 64 bit machine, and noticed a massive performance difference.

With the same code, a completely similar 64 machine takes <100ms to do, what a 32 machine uses ~52000ms to do (2 virtual machine on the same host).

I've tested on Windows and Ubuntu on different computers, and using the same .class file, i still get this massive 32bit vs 64bit difference.

Here is a quick code that you can use the replicate the performance difference.

And here is the .class file i compiled it to.

Now my question.

I know that there is a performance gain by using a 64bit machine, but that doesn't explain this massive difference. So does anybody have any idea why this is happening?

0 投票
3 回答
4444 浏览

java - Java:增加 YoungGen 大小以提高 GC 性能

我正在阅读以下文章: http: //java.sun.com/docs/hotspot/gc1.4.2/example.html并且无法理解以下几行:

我的问题是,在这种情况下,增加 YoungGen 的大小对我们有什么帮助。应用程序在 YoungGen 中分配的对象总数是恒定的。