问题标签 [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.
java - Java中盒装原语的存储成本是多少?
java.lang.Integer
像 Java或Java中的盒装原语有多大(以字节为单位)java.lang.Character
?
anint
是 4 个字节,一个典型的指针也是 4 个字节(如果没有被 JVM 压缩)。整数(没有缓存)的成本是这样的4 bytes + 4 bytes = 8 bytes
吗?盒子对象中是否有更多隐藏字段或与对象相关的额外开销(即我不知道的对象是否有一般成本?)。
我对缓存问题不感兴趣。我知道JVM会缓存一定范围内的整数。
可以重新表述这个问题:用于装箱值与原始值的内存量相乘的最大因子是多少?
编辑:我确实了解 JVM 的多个实现存在。典型的 32 位 HotSpot 实现的典型成本是多少?
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字节?
java - 方法区和 PermGen
我试图了解 HotSpot JVM 的内存结构,但对“方法区域”和“PermGen”空间这两个术语感到困惑。我提到的文档说方法区包含类和方法的定义,包括字节码。其他一些文档说它们存储在 PermGen 空间中。
那么我可以断定这两个内存区域是相同的吗?
java - Java Hotspot命令行参数增加Java方法的最大大小
是否有命令行参数来增加 Hotspot 将编译的 Java 方法的最大大小(从 8000 个字节码)?
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)
怎么了?是否应指定任何其他选项?如何以及在何处获取包含控制流图信息的此文件?
java - 避免需要设置 jmxremote 端口(远程使用 VisualVM)?
我们共享一个用于开发各种 Java 应用程序的远程 Linux 机器,并且我们使用 VisualVM over ssh 来配置应用程序,如此处所述。有什么方法可以在我们的 Java 进程上启用 JMX/分析,而无需在我们的进程/用户之间分配/提供端口号?必须始终确保您指定(唯一)端口号只是为了启用分析,这很烦人。
为了使这一切更加具体:对端口进行硬编码显然不起作用并且会发生冲突:
我们可以要求您在运行进程时始终指定一个唯一端口,但这很乏味——您必须确保您的端口不与其他进程冲突,也不与其他用户冲突:
目前我们使用:
但是我们仍然偶尔会碰到被占用的端口号。
我们可以继续使用更高级的脚本(例如查询netstat
占用的端口号并希望没有竞争),但我们想知道是否有更好的方法/我们是否做错了。
java - Hotspot7 hsdis PrintAssembly 英特尔语法
每次我使用-XX:+PrintAssembly
Hotspot 并且必须阅读可怕的 AT&T 语法时,它都会让我烦恼。
有没有办法告诉它使用英特尔语法?
java - 为什么 HotSpot 会使用提升来优化以下内容?
在《Effective Java》中,作者提到了
可以通过 HotSpot 优化成
我对此感到非常困惑。该变量done
通常不是const,为什么编译器可以这样优化?
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?
java - Java:增加 YoungGen 大小以提高 GC 性能
我正在阅读以下文章: http: //java.sun.com/docs/hotspot/gc1.4.2/example.html并且无法理解以下几行:
我的问题是,在这种情况下,增加 YoungGen 的大小对我们有什么帮助。应用程序在 YoungGen 中分配的对象总数是恒定的。