草庐IT

JVM 概述

全部标签

java - JVM跳转指令的偏移量怎么会是32768呢?

在写answertoaquestionaboutJVMbytecodeoffsets时,我注意到javac的行为和生成的类文件中有一些我无法解释的东西:像这样编译类的时候classFarJump{publicstaticvoidmain(Stringargs[]){call(0,1);}publicstaticvoidcall(intx,inty){if(x那么生成的字节码将包含以下if_icmpge说明:publicstaticvoidcall(int,int);Code:0:iload_01:iload_12:if_icmpge327685:iinc1,18:iinc1,1...根

java - JVM 的 GC 事件的编程通知

我想跟踪在GC上花费了多少时间以及收集了多少内存,但不是通过分析GC日志(即分析我从-XX:+PrintGCWhatever得到的)。我发现我可以使用Sun的ManagementFactory获得一个GarbageCollectorMXBean,它可以给我一些包含内存信息的GCInfo对象,但我不能保证我可以通过这种方式收集所有GC。有人知道在代码中执行此操作的方法吗? 最佳答案 GarbageCollectorMXBean是我能在SunJVM上找到的最好的。根据我的经验,它实际上非常接近您的要求。我想您可以有一个专用线程,它会不时

java - JVM 在内存不足错误期间的行为?列表 s = new ArrayList<String>();

try{for(;;){s.add("Pradeep");}}finally{System.out.println("InFinally");}在tryblock中jvm内存不足,那么jvm在没有内存的情况下如何执行finallyblock?输出:InFinallyExceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspace 最佳答案 大概System.out.println调用比s.add("Pradeep")调用需要更少的内存。例如,如果s是一个ArrayList

java - 如何重新配置​​ eclipse 以使用 64 位 JVM

我在我认为都是64位运行时环境的环境中使用eclipse。当前设置Java>installedJREs和ExecutionEnvironment都指向jdk1.6.0_30,它是JDK的64位版本。但是,eclipse仍然认为它运行的是32位版本,因为当我运行时:System.getProperty("sun.arch.data.model");它返回32而不是64。我为64位机器编译的外部JNI资源不会链接到共享的.so文件,除非它在​​64位环境中运行。(当我尝试这样做时出现字长不匹配错误)那么如何重新配置​​eclipse以运行64位jvm。eclipse本身必须是64位版本吗?

java - 我们需要运行多少次 Java 程序来预热 JVM?

假设我有一个Java程序Test.class。我想测量它的执行时间。我写了一个包装器来执行以下操作:classRunTest{publicstaticvoidmain(String[]args){longsum=0;intiterations=20;intwarmupNum=10;for(inti=0;iwarmupNum)sum+=end-start;}System.out.println("ave:"+sum/(iterations-warmupNum));}}这里如何选择warmupNum,越大越好吗?多大才够?这是衡量Java程序性能的“标准/通用”方法吗?

java - JVM 在完全 gc 后偶尔会锁定

最近我们只是注意到我们的许多服务器偶尔和突然(没有明显的逐渐退化)锁定以下堆栈(所有其他theads被阻塞、IN_NATIVE或IN_VM)(在我们的代码开始处被截断),使用jstack获得-FThread18334:(state=IN_JAVA)-java.util.Calendar.updateTime()@bci=1,line=2469(Compiledframe;informationmaybeimprecise)-java.util.Calendar.getTimeInMillis()@bci=8,line=1088(Compiledframe)(truncated)故障似乎

java - 在 JVM 之间共享类

我正在开发一个可以在同一台计算机上同时实例化多次的应用程序。每个JVM都不必要地将应用程序类加载到它们自己的内存中,因为所有应用程序的类都是相同的。我阅读了CDShere和here,但它似乎只对JDK类有效。如何在JVM之间共享我的应用程序类的数据? 最佳答案 我不是特别了解这个主题,但我做了一些研究。我认为我们可以相当肯定地说这在大多数JVM中实际上是不可能的。以下问题与您的问题类似,其中包含可能有帮助的答案和评论。CanmultipleJVMprocessessharememoryforcommonclasses?一种可能的选择

java - Eclipse:JVM 共享库不包含 JNI_CreateJavaVM 符号

MacOSX10.9上的Eclipse4.4.0,当我尝试运行它时JVM8发出警告:“JVM共享库“/Library/Java/JavaVirtualMachine/jdk1.8.0_20.jdk/Contents/Home/bin/.../jre/lib/server/libjvm.dylib”不包含JNI_CreateJavaVM符号”应用程序没有启动。我按照Shan的8/25说明编辑了Info.plist,但我仍然遇到同样的错误。我也从Apple的网站下载并安装了Java,但我仍然遇到同样的错误。感谢您的帮助。 最佳答案 如果

java - 为高分配率调整 JVM

我正在尝试调整我的应用程序,主要是为了减少响应时间的“扩展”。平均值很好,但范围太宽。Dynatrace显示响应时间越长,暂停时间越长。这指向GC。我尝试根据在线阅读更改一些JVMGC值,但收效甚微。根据GC日志,我计算出分配速率约为324MB/s,而提升速率仅为0.85MB/s。在我看来,这似乎具有很高的分配率,所以我尝试增加年轻一代的大小。第一个屏幕截图使用默认的Java8设置,1024MBXmx。第二张截图是设置NewRatio=1。任何有关下一步尝试的建议都将不胜感激。我已经尝试过的事情:更改为G1GC,设置NewRatio=1,设置NewRatio=1并将Xmx增加到2048

java - 如何为 Maven 构建的可执行 JAR 指定 JVM 参数

使用Maven构建可执行JAR时,如何指定执行JAR时使用的JVM参数?我可以使用指定主类.我怀疑JVM参数有一个类似的属性。特别是我需要指定最大内存(例如-Xmx500m)。这是我的程序集插件:maven-assembly-pluginjar-with-dependenciestruecom.me.myApplication编辑/跟进:根据this,似乎无法为可执行JAR指定JVM参数。和this发布。 最佳答案 我不知道有任何这样的机制。JVM配置由调用java命令指定。这是jar文件规范,它明显没有提到除Main-Class之