草庐IT

jvm-default

全部标签

java - JVM 如何知道在运行时在哪里捕获异常?

根据我的理解,throw是原始的jvm命令。调用它时,JVM“检查当前调用堆栈是否可以捕获它”。如果不能,那么java会像调用return一样简单地弹出调用堆栈。然后jvm“检查当前调用堆栈是否可以捕获它”等等递归。我的问题:JVM如何通过算法知道调用堆栈中的哪个位置可以捕获给定的异常?每个调用堆栈条目中是否存储了元数据,将异常映射到代码块?堆中是否有一个静态数据结构以某种方式跟踪这个?因为某处必须有数据跟踪它。 最佳答案 JVMspecification有这方面的详细信息。特别是,section4.7.3提供有关异常表的详细信息,

java - jvm 字节码中的堆栈映射表是什么?

我正在学习用于生成字节码的ASM库。在某些时候我犯了错误的局部变量类型并得到了一个错误:Exceptioninthread"main"java.lang.VerifyError:BadlocalvariabletypeExceptionDetails:Location:Loops.start()V@56:aload_1Reason:Typetop(currentframe,locals[1])isnotassignabletoreferencetypeStackmapTable:full_frame(@24,{Object[#2],Object[#9]},{Integer})full_

java - 避免 jvm 预热

如果我正在设计排序算法测试,我可以这样做以避免JVM预热吗?谢谢!doublecount=0;doublestart,end;for(intr=0;r 最佳答案 JVM预热通常是指JVM找到热点并对这部分代码进行JIT所花费的时间。如果您运行实际测试几百次(我相信实际上是几千次),您应该可以顺利进行。但是您应该知道,即使您这样做了,也没有任何保证。您必须对您的特定JVM进行试验,以确定在对重要部分进行JIT等操作之前您必须完成多少工作。在thislittlecasestudyJIT编译在1700次调用后启动。

java - Spring 集成测试 : Could not detect default resource locations

我正在使用Maven的Failsafe插件为我的SpringBoot应用程序运行集成测试。当我创建一个像这样的简单测试时:@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(App.class)publicclassMyTestIT{@Testpublicvoidtest(){assertTrue(true);}}然后运行​​mvnverify我在Spring应用程序启动之前(例如,甚至在SpringBoot横幅之前)看到以下日志条目:Runningorg.....MyTestIT2016-04-

java - 如何区分程序员异常和 JVM 异常

正如标题所暗示的,我如何区分JVM抛出的异常与以编程方式(这是否意味着,由程序员抛出或程序)抛出异常?JVM异常1)ArrayIndexOutOfBoundsException2)ClassCastException3)空指针异常以编程方式抛出1)数字格式异常2)断言错误非常感谢 最佳答案 HowtodifferentiatebetweenProgrammerandJVMExceptions你不能静态地这样做,因为不存在这样的区别。标准Java类库中定义的任何异常都可能由应用程序或第三方库代码抛出。这包括JVM本身通常抛出的异常(包

java - 如果 JVM 崩溃,Shutdownhook 是否保证执行

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhenShutdownHooksBreakBad想知道在JVM崩溃的场景下是否保证shutdownhook执行。

java - 现代 JVM 可以不同地优化同一类的不同实例吗?

假设我有同一个类的2个实例,但它们的行为不同(遵循不同的代码路径)基于构造时设置的最终boolean字段。所以像这样:publicclassFoo{privatefinalbooleanflag;publicFoo(booleanflagValue){this.flag=flagValue;}publicvoidf(){if(flag){doSomething();}else{doSomethingElse();}}}具有不同flag值的Foo的2个实例在理论上可以由2个不同的程序集支持,从而消除了if的成本(对于人为的例子,抱歉,这是我能想出的最简单的一个)。所以我的问题是-有任何J

java - 解释 Mac OSX Leopard 上的 JVM 目录布局

这是随Leopard安装的目录布局。什么是“A”目录,为什么除了“CurrentJDK”之外还有“Current”目录?看似可以通过移动CurrentJDK链接轻松切换当前JDK,但是Current和A下的内容会不同步。lrwxr-xr-x1rootwheel5Jun1415:491.3->1.3.1drwxr-xr-x3rootwheel102Jan1420081.3.1lrwxr-xr-x1rootwheel5Feb2120081.4->1.4.2lrwxr-xr-x1rootwheel3Jun1415:491.4.1->1.4drwxr-xr-x8rootwheel272Feb2

java - JVM内存不足如何通过JMX监控重启JVM?

我想为JVM创建一个nagios看门狗,当JVM内存不足并重新启动它时进行监视。目前我能够将JVM设置为允许JMX,但我不知道如何检测OutOfMemory情况并重新启动它。/check_jmx-Uservice:jmx:rmi:///jndi/rmi://127.0.0.1:1100/jmxrmi-O"java.lang:type=Memory"-A"HeapMemoryUsage"-Kused-IHeapMemoryUsage-Jused-vvvvJMXOKHeapMemoryUsage.used=957414288{committed=2415984640;init=214748

Java:如何指定 JVM 参数 -XX:ErrorFile 并在文件名中保留自动 PID

我正在使用JNI,当目标应用程序因错误而崩溃时,会生成一个hs_err_pid*.log文件。我想更改存储该文件的默认位置。现在,通过四处搜索,我了解到这可以使用JVM参数-XX:ErrorFile来实现。documentation表示此参数的默认值为./hs_err_pidpid>日志现在,当我覆盖默认值时,如何告诉JVM仍然在文件名中包含进程ID?我显然试图从字面上把targetDir/hs_err_pidpid>.log作为命令行参数,但这导致整个参数被忽略(并且文件被存储到默认位置,即工作目录)。如果我只说targetDir/hs_err_pid.log文件存储在我想要的位置,