Tag: jvm hotspot

Java致命错误SIGSEGV

我从Java编译器收到一条我不明白的错误消息。 我已经在OSX 10.6,10.9和Ubuntu 14.04上使用Java 6和7测试了我的代码。当我使用Eclipse调试器或解释器(使用-Xint选项)运行时,一切运行正常。 否则,我收到以下消息: Java 1.6: Invalid memory access of location 0x8 rip=0x1024e9660 Java 1.7: # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x000000010f7a8262, pid=20344, tid=18179 # # JRE version: Java(TM) SE Runtime Environment (7.0_60-b19) (build 1.7.0_60-b19) # Java VM: Java HotSpot(TM) 64-Bit […]

存储在JVM中的Object的实例变量在哪里?

Java中的对象的实例变量是存储在JVM的堆栈或方法区域中的吗? 另外,我们为多个线程设置了不同的实例变量吗? 如果它存储在方法区域中,实例变量与静态变量存储的不同之处是什么?

尽管(Max)MetaspaceSize,Java 8仍为Metaspace保留最小1G

Java 8在启动后为Metaspace预留1G。 这意味着最小元空间大小为1G。 但我将MetaspaceSize设置为300米,MaxMetaspaceSize设置为400米。 为什么Java保留了我允许的更多? Java版本 $ java -version java version “1.8.0_45” Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) VM标志 $ jcmd 21689 VM.flags 21689: -XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=62914560 -XX:+ManagementServer -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1006632960 -XX:MaxMetaspaceSize=399998976 -XX:MaxNewSize=603979776 -XX:MetaspaceSize=299999232 -XX:MinHeapDeltaBytes=1048576 -XX:NativeMemoryTracking=summary -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC NMT [jetty9-proxy@bm01 bin]$ jcmd 21689 VM.native_memory […]

NewRatio参数不与CMS垃圾收集器一起使用

我为我的应用程序切换到CMS收集器,应用程序的吞吐量减少了一半。 从GC日志中,我发现很少发生轻微的GC(每秒10 per second )。 我已经分配了4G的堆大小。 默认情况下,JVM使用非常小的尺寸(小于40MB )。 我想通过增加年轻人的规模来尝试CMS。 你能指点我正确的JVM参数吗? 我尝试了-XX:NewRatio但是JVM忽略了这个参数,并且年轻的gen大小没有变化 我的java版本是java version “1.6.0_14”

第一次Java循环运行时,为什么?

在对Solaris SPARC盒子上的一些Java代码进行基准测试时,我注意到我第一次调用基准测试函数时,它运行得很慢(10倍差异): 首先| 1 | 25295.979毫秒 第二| 1 | 2256.990毫秒 第三| 1 | 2250.575毫秒 为什么是这样? 我怀疑是JIT编译器,有没有办法validation这个? 编辑:根据一些答案,我想澄清一下,这段代码是最简单的测试案例,我可以找到展示这种行为。 所以我的目标不是让它快速运行,而是要了解发生了什么,所以我可以在我真正的基准测试中避免它。 解决: Tom Hawtin正确地指出我的“慢”时间实际上是合理的。 根据这一观察,我将调试器附加到Java进程。 在第一个中,内循环看起来像这样: 0xf9037218: cmp %l0, 100 0xf903721c: bge,pn %icc,0xf90371f4 ! 0xf90371f4 0xf9037220: nop 0xf9037224: ld [%l3 + 92], %l2 0xf9037228: ld [%l2 + 8], %l6 0xf903722c: add %l6, 1, %l5 0xf9037230: st %l5, [%l2 […]

JIT自动内联的方法大小是多少?

我听说JIT自动内联小方法,比如getter(它们大约有5个字节)。 边界是什么? 有没有JVM标志?

Java Hotspot服务器中的多态性成本很高

当我在Java Hotspot客户端中运行我的计时测试程序时,我得到了一致的行为。 但是,当我在Hotspot服务器中运行它时,我得到了意想不到的结果。 从本质上讲,在我试图复制的某些情况下,多态性的成本是高得令人无法接受的。 这是Hotspot服务器的已知问题/错误,还是我做错了什么? 测试程序和时间如下: Intel i7, Windows 8 Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) Mine2: 0.387028831 <— polymorphic call with expected timing Trivial: 1.545411765 <— some more polymorphic calls Mine: 0.727726371 <— polymorphic call with unexpected timing. Should be about 0.38 Mine: 0.383132698 <— direct call with expected timing 随着我添加额外的测试,情况变得更糟。 […]

如何在优化后看到HotSpot生成的代码?

我想更好地了解HotSpot在运行时可能为我的Java代码生成的优化。 有没有办法看到HotSpot运行一段时间后使用的优化代码?

JVM -XX:+ StringCache参数?

我最近在阅读JRE 6 [ Java VM Options ]中可用的所有JVM参数,并看到了这一点: -XX:+ StringCache:启用常用分配字符串的缓存。 现在我总是认为Java保留了一个实习池(正确的单词?)字符串,并且当使用字符串连接时,它不是创建新对象,而是从这个池中拉出它们。 有没有人曾经使用过这个论点,或者可以解释为什么需要它? 编辑:我试图运行一个基准测试,看看这个参数是否有任何影响,并且无法让Sun JVM识别它。 这与: java version “1.6.0_11” Java(TM) SE Runtime Environment (build 1.6.0_11-b03) Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing) 所以我不确定这个论点是否有效。

Hotspot JIT编译器是否可以重现任何指令重新排序?

我们知道,一些JIT允许重新排序对象初始化,例如, someRef = new SomeObject(); 可以分解为以下步骤: objRef = allocate space for SomeObject; //step1 call constructor of SomeObject; //step2 someRef = objRef; //step3 JIT编译器可能会重新排序如下: objRef = allocate space for SomeObject; //step1 someRef = objRef; //step3 call constructor of SomeObject; //step2 即,步骤2和步骤3可以由JIT编译器重新排序。 即使这在理论上是有效的重新排序,我也无法使用x86平台下的Hotspot(jdk1.7)重现它。 那么,Hotspot JIT comipler是否可以重现任何指令重新排序? 更新 :我使用以下命令在我的机器(Linux x86_64,JDK 1.8.0_40,i5-3210M)上进行了测试 : java -XX:-UseCompressedOops -XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=”print org.openjdk.jcstress.tests.unsafe.UnsafePublication::publish” -XX:CompileCommand=”inline, […]