我有一个用java编写的应用程序,我想知道在到达staticvoidintmain(Stringargs)之前需要多少时间,以及它在那个阶段做了什么,我该如何实现?我知道微软有一个名为MPGO(Managerprofileguidedoptimisation)的工具,是否有Java的等效工具? 最佳答案 从Java应用程序内部测量启动时间的简单方法:importjava.lang.management.ManagementFactory;publicclassTest{publicstaticvoidmain(String[]arg
我正在创建一个WebStart应用程序,它将受益于一些较新的JVM选项(尤其是逃逸分析、G1垃圾收集器等)同时,我希望应用程序能够在不支持这些选项的旧JVM上正常运行。是否有实现此目标的好方法? 最佳答案 作为Thorbjørn提到,Java6u10允许在JNLP中使用多个j2se元素。JNLPFileSyntaxresources最新的JavaWebStart开发人员指南部分,指出多个j2se元素,每个元素都具有java-vm-args属性,可以用最优先出现的。例如: 关于java-使
对于一些Java字节码解析器项目,我阅读了JVM规范并发现Java虚拟机类文件格式访问修饰符字段的位掩码值是ACC_PUBLIC=0x0001ACC_FINAL=0x0010ACC_SUPER=0x0020#oldinvokespecialinstructionsemantics(Java1.0x?)ACC_INTERFACE=0x0200ACC_ABSTRACT=0x0400ACC_SYNTHETIC=0x1000ACC_ANNOTATION=0x2000ACC_ENUM=0x4000我不知道0x1000是干什么用的。我在一个内部类中看到过一次,但从那以后我检查过的所有内部类都没有设
是否有必要以root身份运行jstack-F(在Linux上),如果是,为什么?当尝试jstack-F我的自己的进程时,出现以下错误。附加到进程时出错:sun.jvm.hotspot.debugger.DebuggerException:无法附加到进程如果我用sudo运行它,jstack-F工作正常。 最佳答案 这是因为jstack-F使用ptrace(2)系统调用来尝试访问JVM数据,如果您没有权限则失败:$strace-eall-fjstack-F26846...[pid27653]ptrace(PTRACE_ATTACH,26
如何跨JVM同步方法?我的示例是一个Web应用程序,它限制一个用户名不能多次登录(换句话说,第一个用户可以登录,但如果另一个用户使用相同的用户名登录,他将被拒绝)。Web应用程序部署在多个服务器上,因此存在多个JVM,并且用户可以尝试使用不同的服务器登录,具体取决于负载均衡器。方法是这样的publicsynchronizedstaticSessionDatalogonSync(StringuserName,Stringpassword)throwsException{intcount=DB.count("sessions","WHEREuser_name=?",userName);if
出乎我的意料,下面的程序importjava.lang.ref.WeakReference;importjava.util.Arrays;importjava.util.List;publicclassStackTest{publicstaticvoidmain(String[]args){Objectobject1=newObject();Objectobject2=newObject();Listobjects=Arrays.asList(object1,object2);WeakReferenceref1=newWeakReference(object1);WeakReferen
我在搞乱atoyinterpreterinJava我正在考虑尝试编写一个可以为Java虚拟机生成字节码的简单编译器。这让我开始思考,面向虚拟机(例如JVM和CLI)的编译器需要进行多少优化?即时(JIT)编译器是否执行常量折叠、窥孔优化等? 最佳答案 我将添加两个链接来解释Java'sbytecode很好,还有一些variousoptimization运行时的JVM。 关于java-虚拟机优化,我们在StackOverflow上找到一个类似的问题: https
JVM如何在32位处理器上处理原始的“long”,即64位?能否在多核32位机器上并行使用多核?32位机器上的64位操作要慢多少? 最佳答案 它可能使用多个核心来运行不同的线程,但它不会并行使用它们进行64位计算。64位长基本上存储为两个32位整数。为了添加它们,需要进行两次添加,以跟踪进位位。乘法有点像将两个两位数相乘,只是每个数字都以2^32为底,而不是以10为底。其他算术运算也是如此。关于速度的编辑:我只能猜测速度差异。加法需要两次加法而不是一次,乘法(我认为)需要四次乘法而不是一次。但是,我怀疑如果所有内容都可以保存在寄存器
我正在阅读有关Java编译器如何在可能的情况下将与“+”运算符连接的字符串编译为StringBuilder实例的信息,以及这如何使使用简单的“+”运算符更好,因为它们compiletothesamecode.(除非您在while循环中构建字符串,在这种情况下显然最好使用StringBuilder。)我还读到字符串上的.concat方法是最差的choiceallthetime(以至于它被Findbugs变成了一个错误!)。所以我决定自己在eclipse中编写一个小的java类来测试它。我的结果让我有点吃惊。我发现,如果我在eclipse中与在命令行中遵守并运行它们,则不同的方法相对更快或
这周做了一些测试,我发现了这种情况:当我使用jdk/jre/bin/java中的java可执行文件运行tomcat时,性能比我使用jdk/bin/java运行时要好得多。问题是:有人知道为什么jdk包提供2个java可执行文件,以及它们之间有什么区别可以证明性能差异? 最佳答案 我来晚了,但是...我来这里是为了寻找OpenJDK中几个java变体之间的区别。最后,我只对问题的“它们之间有什么区别”部分进行了一些澄清和其他问题;希望对您有所帮助。查看OpenJDK(我使用的是OpenJDK1.7.0)基本目录,我看到三个java,它