Tag: jvm hotspot

从Java VM无效访问堆栈红区

我试图弄清楚在Java中可能导致此错误的原因: Invalid access of stack red zone 0x115ee0ed0 rip=0x114973900 有没有人遇到过这个错误信息? 它实际上是在杀死JVM,一切都停在那里。 我目前正在使用这个版本的Java :(在OS X 10.6上) java version “1.6.0_15” Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219) Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode) 我正在寻找的是关于如何避免再次发生这种情况的某种解释和提示。 提前致谢!

确定特定的JDK方法通常是否具有内部实现

如果没有读取OpenJDK源代码(我不反对),那么Hotspot JVM(比如英特尔)中的内部操作列表是否相当全面(或“官方”)? 例如,确定Math.abs()通常是否通常直接转换为几个本机指令的最快方法是什么?

Oracle的服务器JRE包含JDK?

我刚刚下载了用于Java SE 7的Oracle服务器JRE( 链接 )我下载的文件是server-jre-7u45-linux-x64.tar.gz 。 当我解压缩这个文件时,我很惊讶地发现创建了一个名为jdk1.7.0_45的目录,其中包含完整的Java JDK。 不是我对JRE安装的期望。 这里发生了什么?

64位OpenJDK 7/8中并发长写的值完整性保证

注意:此问题与volatile,AtomicLong或所描述的用例中的任何感知缺陷无关。 我试图certificate或排除的财产如下: 鉴于以下内容: 最近的64位OpenJDK 7/8(最好7位,但8位也有帮助) 多处理英特尔基础系统 一个非易失性的长原始变量 多个不同步的mutator线程 一个不同步的观察者线程 是否始终保证观察者会遇到由变异器线程写的完整值,或者是撕裂危险的单词? JLS:不确定 此属性对于32位基元和64位对象引用是存在的,但是对于long和double,JLS不保证: 17.7。 双primefaces和非primefaces的非primefaces处理: 出于Java编程语言存储器模型的目的,对非易失性long或double值的单次写入被视为两个单独的写入:每个32位一半写入一次。 这可能导致线程从一次写入看到64位值的前32位,而从另一次写入看到第二次32位的情况。 但是抱着你的马: […]为了效率,这种行为是特定于实现的; Java虚拟机的实现可以自由地以primefaces方式或分两部分执行对long和double值的写入。 鼓励实现Java虚拟机以避免在可能的情况下拆分64位值。 […] 因此,JLS 允许 JVM实现拆分64位写入,并鼓励开发人员相应地进行调整,但也鼓励 JVM实现者坚持使用64位写入。 我们还没有回答最新版本的HotSpot。 HotSpot JIT:谨慎的乐观 由于单词撕裂最有可能发生在紧密循环和其他热点的范围内,我试图分析JIT编译的实际汇编输出。 简而言之:需要进一步测试,但我只能在long上看到primefaces64位操作。 我使用了hdis ,一个OpenJDK的反汇编插件。 在我老化的OpenJDK 7u25版本中构建并安装了该插件后,我开始编写一个简短的程序: public class Counter { static long counter = 0; public static void main(String[] _) { for (long i = (long)1e12; i […]

Java和.Net之间的JIT有什么不同

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

Java8元空间和堆使用情况

我有这个代码动态生成类并加载它 import javassist.CannotCompileException; import javassist.ClassPool; public class PermGenLeak { private static final String PACKAGE_NAME = “com.jigarjoshi.permgenleak.”; public static void main(String[] args) throws CannotCompileException, InterruptedException { for (int i = 0; i < Integer.MAX_VALUE; i++) { ClassPool pool = ClassPool.getDefault(); pool.makeClass(PACKAGE_NAME + i).toClass(); Thread.sleep(3); } } } 我针对Java 7(jdk1.7.0_60)启动了这个类,正如预期的那样,它填满了PermGenSpace并且堆仍未使用 图像显示permgen使用超时,最后JVM终止 现在相同的代码针对Java 8(jdk1.8.0_40-ea)运行,并且正如预期的那样它继续扩展本机内存(Metaspace)但令人惊讶的是,1g的Metaspace它在OldGen中消耗了3g的堆(随着时间的推移几乎是Metaspace的3倍) 图像显示Metaspace使用超时和系统内存使用示例 这封来自Jon Masamitsu的电子邮件和这张JEP门票说 interned […]

“伊甸园空间”的名字来源于垃圾收集

在垃圾收集术语中,为什么称为“伊甸园空间”? 就像那样。 我仍然熟悉这个术语,我无法理解为什么它有这样的名字。

如何在Windows上使用Java Hotspot JVM禁用minidump(mdmp)文件生成

目前我有一个部署的可执行jar文件,它在崩溃时创建大(7 + Gb)minidump文件。 我想有一个文本表示导致崩溃的原因,而不是JVM状态的二进制文件。 我已经尝试使用此CodeRanchpost中的信息,我在Java文档中找到的文档似乎没有帮助。 我也引用了这个问题,但没有明确的答案。 是否有一种我不知道的典型方式?

如何在String.valueOf(int)中使用ArrayOutOfBoundsException?

为什么这段代码有时会产生ArrayOutOfBoundsException? String.valueOf(int)怎么可能呢? public static String ipToString(ByteString bs) { if (bs == null || bs.isEmpty()) { return null; } else { StringBuilder sb = new StringBuilder(); boolean started = false; for (Byte byt : bs) { if (started) { sb.append(“.”); } sb.append(String.valueOf(byt & 0xFF)); started = true; } return sb.toString(); } } java.lang.ArrayIndexOutOfBoundsException: -81914 at java.lang.Integer.getChars(Integer.java:458) […]

为什么运行在服务器模式下的Java会说版本是“混合模式”?

为什么运行在服务器模式下的Java会说版本是“混合模式”? 当我看到它时,是否意味着JVM没有真正加载到纯服务器模式?