我们有一个使用JNI的桌面应用程序偶尔会导致JVM崩溃。幸运的是,JVM会生成一个hs_err_pidXXXX.log文件,这对于调试此类错误非常有用。然而,它似乎总是转到当前工作目录,从那里挖掘它很烦人,因为我们的其他日志文件都转到特定的“日志文件位置”。是否可以为那些“故障转储”文件指定不同的位置?怎么办? 最佳答案 乔纳斯尽管HeapDumpPath适用于堆转储,但它不是您问题的答案。堆转储和jvm崩溃日志是两个独立的东西。要更改jvm崩溃日志的目标,请使用此选项运行java:-XX:ErrorFile=/path/to/fi
我正在使用JRE1.7,我发现user.home系统属性非常不寻常。JVM是如何设置这个值的? 最佳答案 这个Java错误解释了如何:http://bugs.sun.com/view_bug.do?bug_id=4787931系统属性user.home设置为:读取注册表项的值:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders\Desktop采用该值的父路径,但不解析环境变量。示例:%userprofile%\Deskto
我正在尝试测量在Windows7HotSpotJVM中使用大内存页的性能增益。为此,我需要监控JVM内存使用情况以确保大页面得到实际利用。不幸的是,我无法找到实现这一目标的方法。以下是我所做的设置和试验的描述:环境设置我使用64位Windows7终极版进行测试。“在内存中锁定页面”Windows安全策略已启用,如JavaSupportforLargeMemoryPages中所述.我还通过如下运行javaversion命令验证了大页面功能是否已启用:java-XX:+UseLargePages-version我得到以下结果,这表明启用了大页面功能:javaversion"1.7.0_60
最近我遇到了一件非常奇怪的事情——一种方法在性能分析器下非常慢,没有明显的原因。它包含很少的long操作,但被调用得相当频繁-它的总体使用量约为总程序时间的30-40%,而其他部分似乎“更重”。我通常在x32JVM上运行非内存消耗型程序,但假设我遇到了64位类型的问题,我尝试在x64JVM上运行相同的程序——“实时场景”中的整体性能提高了2-3倍.之后,我为特定方法的操作创建了JMH基准测试,并对x32和x64JVM上的差异感到震惊-高达50倍。我会“接受”大约慢2倍的x32JVM(更小的字长),但我不知道30-50倍可能来自哪里。你能解释一下这种巨大的差异吗?回复评论:我重写了测试代
要调试JVM中的类加载,我们可以使用参数-verbose:class,但是...有人知道如何调试资源加载(例如属性文件)吗? 最佳答案 我想你需要看看使用分析器。或者使用仪器界面的东西。不确定它有多稳定,但是有BTrace,这是一种Java版本的DTrace。BTraceisasafe,dynamictracingtoolfortheJavaplatform.BTracecanbeusedtodynamicallytracearunningJavaprogram.BTracedynamicallyinstrumentstheclas
我现在需要能够在运行时创建和公开Web服务。(即没有“javac”编译步骤)。是否有一种基于JVM的脚本语言对JAX-WS有很好的支持,这样我就可以用Java编写一个中央引擎,然后让脚本语言创建包含Web服务方法的片段(使用@WebService或@WebMethod注释)然后可以传递给http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/Endpoint.html#publish(java.lang.String,java.lang.Object)如果可能的话,请举例说明如何正确执行此操作。有什么建议吗?
三种垃圾回收算法标记清除标记整理标记复制标记清除概念最早出现也是最基础的垃圾收集算法是“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。缺点①执行效率不稳定如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低②内存空间的碎片化问题标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大
我正在尝试分析我们应用程序的GC行为(在Tomcat中运行,在Sun'sHotspots、JVM1.6下)。到目前为止,我已经指示JVM使用...将GC日志发送到单独的文件-Xloggc:gc.log-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGC-XX:+PrintGCTimeStamps-XX:+PrintGCDetails...并使用jstat使用...输出日志jstat-gc-t290455s>jstat.gc我看到了有趣的信息,但还没有找到可以帮助我分析/可视
引用我的earlierquestiononincompletelyconstructedobjects,我有第二个问题。正如JonSkeet指出的那样,在构造函数的末尾有一个隐式内存屏障,它确保final字段对所有线程都是可见的。但是,如果构造函数调用另一个构造函数怎么办?他们每个人的末尾都有这样的内存障碍,还是仅在首先被调用的那个的末尾有这样的内存障碍?也就是说,当“错误”的解决方案是:publicclassThisEscape{publicThisEscape(EventSourcesource){source.registerListener(newEventListener()
据我所知,在Java中,隐式构造函数总是为没有构造函数的类生成[1],[2].但是在字节码中我找不到关于JVMS的限制。.所以:根据JVMS定义一个没有构造函数的类,仅使用其静态方法是否有效,如以下jasminhelloworld所示?除了无法创建它的实例之外,它还有其他后果吗?我将无法使用invokespecial来初始化实例,根据https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.2.4这使得new无用(不能使用未初始化的对象)。Jasmine代码:.classpublicMain.sup