Tag: jvm

如何分析JVM崩溃文件hs_err_pidXYZ.log

在Eclipse和Tomcat(wtp)中处理webapp时,tomcat崩溃并创建一个文件:hs_err_pid20216.log 我试图使用eclipse MAT来分析文件,但是MAT不能将文件识别为它可以处理的东西,我也尝试了DAT,它也是同样的事情。 它不会显示在打开的文件对话框中。 它是什么类型的文件? 我应该用什么来分析它? 我是否必须对此文件进行更改,以便这些工具可以对其进行解析。 日志文件可用作GitHub要点 更新: 有关如何处理hs_err_pidXYZ.log文件的更多信息,请参阅@Dan Cruz回复。 好奇的是,崩溃的原因是jackson被一个循环关系(双向一​​对多)弄糊涂了,但这是另一个故事……

二进制运算符执行何时在Java中执行?

我正在尝试理解java字节码。 我从简单的例子开始: public class Test { public static void main(String args[]) { System.out.println(2 + 1); } } 我编译了这个类: javac Test.java 然后我尝试在.class上的javap像这样: javap -c Test 这给了我这个: Compiled from “Test.java” public class Test { public Test(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object.””:()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field […]

为什么接口根据类文件格式扩展Object?

为什么JVM规范声明接口必须具有java/lang/Object的super_class ,即使接口不扩展java/lang/Object ? 我特别指的是JVM规范的§4.1 ,它说: 对于接口,super_class项的值必须始终是constant_pool表的有效索引。 该索引处的constant_pool条目必须是表示Object类的CONSTANT_Class_info结构。 但是在JLS的第9.2节中,它说接口不扩展Object。 而是声明一个隐式创建的抽象方法,它匹配Object类中的每个公共方法: 如果接口没有直接的超接口,则接口隐式声明一个公共抽象成员方法m,其中包含签名s,返回类型r和throws子句t,对应于每个公共实例方法m,其中包含签名s,返回类型r和throws子句t在Object中声明,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的方法。

在Java中,是否可以增加JVM的可用内存和/或杀死其他Java程序?

我对高级Java缺乏经验,所以请耐心等待。 我很好奇Java能够实现可能被称为“自主”的function。 假设我们有两个Java程序在运行。 并且一个程序确定另一个程序占用内存,从而杀死该程序和/或为JVM分配更多内存。 我知道在Java中你可以看到可用内存是什么(请参阅如何检查Java中的CPU和内存使用情况? ),但是如果我们想深入挖掘怎么办? 谢谢。

从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) 我正在寻找的是关于如何避免再次发生这种情况的某种解释和提示。 提前致谢!

java字节码 – 小于int的类型的表示

在我大学的一个项目中,我直接使用Java字节码。 在浏览了可用于JVM的指令列表( http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings )之后,我发现没有[b|c|s]store,这样的东西[b|c|s]store,只有用于存储整数的东西。局部变量。 这是否意味着如果在我的程序中我写道: short a; int b; 我没有保存任何内存,因为每个局部变量条目占用4个字节? 我一直认为使用short或byte类型会在运行时节省一些内存。

Java表达式树

是否有相当于.net的表达式树为JVM LINQ? 我想在Scala实现一些类似LINQ的代码结构,我想知道是否还要滚动我自己的表达式树库。 更新:我对linq等价物本身不感兴趣。 .net有一大组表达式树工具,可以很容易地在运行时动态编译代码,可以从代码中调用它。 我想进行的项目与数据库无关。 表达式树提供了一种简单的方法来描述对数据进行操作的代码。 如果没有库我的其他选项,我认为是创建一个发出字节代码的库。

Java – Full GC(垃圾收集器)在短时间间隔内发生很多事情,导致性能下降

我在prod环境中看到一些exception行为导致我们在运行Tomcat的服务器上出现高线程数。 堆大小10,092,544K在新一代和产权生成之间分配为2,752,512K + 7,340,032K = 10,092,544K。 我很困惑为什么GC在堆上有足够的内存可用时多次运行(新旧两种)(Full GC [PSYoungGen:0K-> 0K(2752512K)] [ParOldGen:2748534K-> 2748529K(7340032K) )]) 你可以看到0K-> 0K的年轻人和.27G – > .27G的老一代意味着几乎没有任何对象得到gc’d并且有很多可用的内存。 (堆大小为10G)。 由于Full GC在短时间间隔内运行多次,因此导致性能降低,因此应用程序无法处理传入的用户请求,因此无法处理服务器上的高线程,最终我们必须重新启动服务器以摆脱这种情况。 你能解释一下这里发生了什么。 这是gc.log上的输出。 。 。 更多…… 。 。 7月18日14:52:38 fwprodcontent03 gc.log:3172.122:[GC [PSYoungGen:0K-> 0K(2752512K)] 2750855K-> 2750855K(10092544K),0.0515920 secs] [次:用户= 0.32 sys = 0.01,real = 0.06秒] 7月18日14:52:42 fwprodcontent03 gc.log:3172.174:[Full GC [PSYoungGen:0K-> 0K(2752512K)] [ParOldGen:2750855K-> 2749937K(7340032K)] 2750855K-> 2749937K(10092544K)[PSPermGen:262143K – > […]

如何干净地关闭嵌入式JRuby以响应SIGTERM到JVM进程?

我正在使用org.jruby.embed.ScriptingContainer API在JVM进程内运行JRuby上的Middleman(使用Webrick)服务器。 如果我干净地关闭并从JVM内部停止服务器,一切都按预期工作。 但是如果我将一个SIGTERM发送到JVM进程(例​​如,通过在命令行中按ctrl + C),控制台将返回但JVM进程不会终止 – 它会无限期地挂起,直到我发送一个SIGKILL。 我尝试注册一个JVM关闭钩子来终止ScriptingContainer实例,但钩子永远不会触发。 我不确定为什么……也许JRuby以某种方式吞下了SIGTERM? 即使它包含正在运行的Webrick服务器,如何让JVM完全关闭,干净利落地关闭?

Java如何初始化String文字

Javadoc说: String类表示字符串。 Java程序中的所有字符串文字(例如“abc”)都实现为此类的实例。 我们知道String类有两个属性,即: value[]和hash ,String literal存储在String池中。 但是在放入该池之前,我无法弄清楚String字面值是如何初始化的 。 好像我稍后调试字符串文字,我可以看到value[]和hash以某种方式填充。 JVM是否会调用特殊指令?