Questions tagged «jvm»

Java虚拟机(JVM)使一组计算机软件程序和数据结构能够使用虚拟机模型来执行其他计算机程序和脚本。使用此标记可解决有关JVM提供的工具或其在特定情况下如何工作的问题。


8
Java中的静态方法和静态变量存储在哪里?
例如: class A { static int i=0; static int j; static void method() { // static k=0; can't use static for local variables only final is permitted // static int L; } } 这些变量将在Java,堆或堆栈内存中存储在哪里?它们如何存储?
115 java  jvm 

6
为什么一个40亿迭代的Java循环仅花费2毫秒?
我在装有2.7 GHz Intel Core i7的笔记本电脑上运行以下Java代码。我打算让它测量完成2 ^ 32次迭代的循环所需的时间,我预计大约需要1.48秒(4 / 2.7 = 1.48)。 但是实际上只需要2毫秒,而不是1.48 s。我想知道这是否是底层任何JVM优化的结果? public static void main(String[] args) { long start = System.nanoTime(); for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++){ } long finish = System.nanoTime(); long d = (finish - start) / 1000000; System.out.println("Used " + d); }
113 java  for-loop  jvm 

7
为什么此方法打印4?
我想知道当您尝试捕获StackOverflowError并提出以下方法时会发生什么: class RandomNumberGenerator { static int cnt = 0; public static void main(String[] args) { try { main(args); } catch (StackOverflowError ignore) { System.out.println(cnt++); } } } 现在我的问题是: 为什么此方法打印“ 4”? 我以为可能是因为System.out.println()在调用堆栈上需要3个段,但是我不知道3的来源。当您查看的源代码(和字节码)时System.out.println(),通常导致的方法调用次数比3多得多(因此,调用堆栈上的3个段是不够的)。如果是由于优化而应用了Hotspot VM(方法内联),我想知道在另一个VM上结果是否会有所不同。 编辑: 由于输出似乎是高度特定于JVM的,因此我使用 Java(TM)SE Runtime Environment(内部版本1.6.0_41-b02), Java HotSpot(TM)64位服务器VM(内部版本20.14-b01,混合模式)获得了结果4。 解释为什么我认为这个问题与理解Java堆栈不同: 我的问题不是关于为什么cnt> 0(显然是因为System.out.println()需要堆栈大小并且StackOverflowError在打印某些内容之前会抛出另一个),而是为什么它具有4的特定值,分别是0、3、8、55或其他值系统。
111 java  jvm  stack-overflow 

5
JVM为什么不缓存JIT编译代码?
Sun的规范JVM实现对字节码进行了一些相当复杂的优化,以在代码运行几次后获得接近本机的执行速度。 问题是,为什么不将编译后的代码缓存到磁盘上以供以后使用同一功能/类时使用? 就目前而言,每次执行程序时,JIT编译器都会重新启动,而不是使用代码的预编译版本。当本质上解释字节码时,是否添加此功能不会大大提高程序的初始运行时间?
107 java  caching  jvm  compilation  jit 

17
64位OS上32位JVM的最大Java堆大小
问题不在于32位操作系统的最大堆大小,因为32位操作系统的最大可寻址内存大小为4GB,而JVM的最大堆大小取决于可以保留多少连续可用内存。 我对了解在64位OS中运行的32位JVM的最大(理论上和实际可实现的)堆大小更感兴趣。基本上,我正在寻找类似于SO相关问题中的数字的答案。 至于为什么使用32位JVM而不是64位JVM,原因不是技术上的而是管理/官僚的-在生产环境中安装64位JVM可能为时已晚。
107 java  jvm 

1
CATALINA_OPTS和JAVA_OPTS-有什么区别?
我试图找出的Apache Tomcat变量之间的差异- CATALINA_OPTS和JAVA_OPTS在SO和惊讶地看到,没有问题/答案张贴在这里呢。因此,我想在找出差异之后在这里分享(有答案)。检查下面的答案/差异。 注意:在发布本文时,我们正在CentOS5 64位架构上运行带有JDK 6u32的Apache Tomcat v6.0.10。
105 java  tomcat  jvm  tomcat6 

6
Java的String常量池位于哪里,堆或堆栈在哪里?
我知道常量池的概念和JVM用于处理字符串文字的字符串常量池。但是我不知道JVM使用哪种类型的内存来存储String常量文字。堆栈还是堆?由于它的文字不与任何实例相关联,因此我假定它将存储在堆栈中。但是,如果没有任何实例引用该文字,则必须通过GC运行来收集文字(如果我错了,请纠正我),那么如果将其存储在堆栈中,该如何处理?
103 java  string  jvm 

5
JVM是否阻止尾部调用优化?
我在以下问题上看到了这句话:构建Web服务时应使用哪种良好的功能语言? 除自递归功能外,Scala特别不​​支持尾部调用消除,这限制了您可以执行的组合类型(这是JVM的基本限制)。 这是真的?如果是这样,那么创建此基本限制的JVM是什么?

3
为什么JVM基于堆栈,而Dalvik VM基于寄存器?
我很好奇,为什么Sun决定使JVM基于堆栈,而Google决定使DalvikVM基于寄存器? 我想JVM不能真正假设目标平台上有一定数量的寄存器可用,因为它应该独立于平台。因此,它只是将寄存器分配等推迟到JIT编译器。(如我错了请纠正我。) 所以Android的人想:“嘿,那效率低下,让我们马上去注册虚拟机吧……”?但是,等等,有多个不同的android设备,Dalvik瞄准了多少个寄存器?Dalvik操作码是否为一定数量的寄存器进行了硬编码? 市场上当前所有的Android设备是否都具有相同数量的寄存器?还是在dex加载期间执行了寄存器重新分配?所有这些如何融合在一起?

9
Java 32位与64位兼容性
针对32位JDK构建和编译为32位字节代码的Java代码是否可以在64位JVM中工作?还是64位JVM需要64位字节代码? 为了提供更多细节,我有在运行32位JVM的Solaris环境中工作的代码,但是现在将JDK和Weblogic Server升级到64位后遇到了问题。

5
如何为VisualVM提供JVM参数?
我正在使用JDK 1.6.0_26中的VisualVM来分析在Tomcat下运行的Java Webapp,但是VisualVM经常告诉我它没有足够的内存来拍摄快照,并使用-Xmx开关为Netbeans提供更多的内存。 。问题是,我在Netbeans之外运行VisualVM,那么如何为jvisualvm.exe提供JVM参数?
97 java  windows  jvm  visualvm 

2
打印所有JVM标志
找到了一个有趣的JVM Flag: java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version 它可以打印数百种各种选项,我以前从未听说过。它还会打印默认值,以帮助更好地诊断JVM行为。另一个有趣的标志是: -XX:+UnlockExperimentalVMOptions 有谁知道解释其中每一个的任何文档?

9
如何锁定已编译的Java类以防止反编译?
如何锁定已编译的Java类以防止反编译? 我知道这个话题必须在Internet上进行充分讨论,但是在引用它们之后我无法得出任何结论。 许多人确实建议使用混淆器,但是他们只是使用难以记住的字符序列来重命名类,方法和字段,但是敏感的常数值又如何呢? 例如,您已经基于基于密码的加密技术开发了加密和解密组件。现在,在这种情况下,任何普通的Java人士都可以使用JAD来反编译类文件,并轻松检索密码值(定义为常量)以及salt,然后可以通过编写小型独立程序来解密数据! 还是应该以本机代码(例如VC ++)构建此类敏感组件并通过以下方式调用它们 JNI?
96 java  jvm  decompiling 

8
如何为Junit单元测试设置JVM参数?
我有一些Junit单元测试,需要大量的堆空间才能运行-即1G。(他们测试了一个Webstart应用程序的内存密集型功能,该功能仅在具有足够的堆空间的情况下运行,并且将在Win 7 64位计算机上内部运行-因此,重新设计测试是不切实际的建议。) 我正在Intellij IDEA中进行开发,因此我知道可以为测试类设置JVM参数(例如-Xmx1024M)。但是,这仅用于运行整个测试类-如果我想运行单个测试,则必须为该测试方法重新创建运行配置。 另外,这些设置是特定于IDE和特定于盒的-因此,如果我切换盒(在多台计算机上开发)或我的一位同事尝试运行测试,则不会转移这些设置。(此外,我的同事使用了其他IDE(例如Eclipse和NetBeans)。)FWIW,我们正在使用Mercurial进行源代码控制。 在构建周期中,我们使用Maven,所以我知道如何为此指定JVM参数。 所以:-我正在寻找一种指定将适用于整个测试类和各个测试方法的JVM参数的方法;-我想在任何计算机上的IDE之间共享这些规范(已从存储库中获取了代码)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.