草庐IT

java - JVM 开销太大

我在一台服务器上遇到了内存问题。这是一个亚马逊微型实例,因此它的内存非常有限(free-m表示603MB)。这就是为什么我用开始tomcat-server-Xmx290m-Xms290m-XX:MaxPermSize=65m但是,“java”进程占用了大约86%的总内存,即518M。518-355=163MB开销。这看起来很多,而且很可疑,尤其是考虑到:在另一个微型实例上的另一个jvm版本上运行的类似应用程序没有这么大的开销在本地运行的同一应用程序仅产生40MB的开销。它在本地运行Windows7,64位。有问题的服务器上的java版本是:javaversion"1.7.0_09-ic

java - JDK 1.7_21 的 VisualVM 配置文件崩溃并显示 "Access denied"

也许你能帮我解决这个问题。Profiler崩溃并显示“拒绝访问”消息,然后我为任何本地应用程序启动它。在我发现的日志文件中:java.io.IOException:Отказановдоступеatsun.tools.attach.WindowsVirtualMachine.openProcess(NativeMethod)atsun.tools.attach.WindowsVirtualMachine.(WindowsVirtualMachine.java:56)atsun.tools.attach.WindowsAttachProvider.attachVirtualMachin

java - Cucumber-jvm线程安全吗?

我想在多个线程中运行相同的Cucumber测试。更具体地说,我有一组功能,在一个线程中运行这些功能效果很好。我使用JSON格式化程序记录每个步骤的运行时间。现在我想做负载测试。我更关心多线程环境下每个特性/步骤的运行时间。所以我创建了多个线程,每个线程都运行在同一个特性集上。每个线程都有自己的JSON报告。这在理论上可能吗?由于某些项目设置原因,我无法使用JUnit运行器。所以我不得不求助于CLI方式:longthreadId=Thread.currentThread().getId();StringjsonFilename=String.format("json:run/cucumb

java - 从 Java 6 升级到 Java 7 时 native 堆上出现 OutOfMemoryError

我们最近将我们的大型网络应用程序(在jboss5上运行)从java6升级到java7。几小时内,我们看到了OutOfMemory错误,看起来是native堆用完了。我们运行的是32位JVM,因此限制为4GB,而JVM分配了2GB。在Java6下,整个进程占用了大约2.3GB,但在Java7中,这个数量大大增加了,我们达到了4GB的限制,但没有触发完整的GC,因为Java堆仍未满。堆栈跟踪显示XML解码代码在每个请求上创建新的SAXParserFactory,用于解压缩jar文件的Inflater类将大量数据存储在native堆中(约200,000个Inflater实例)。这让我觉得效率

java - JVM 在退出时挂起

我正在开发一个小型应用程序,该应用程序应使用数字签名签署文档并退出。签名可以位于PKCS#12存档(.pfx文件)或智能卡设备上。使用pfx文件很容易,而且工作正常。但是,有时使用智能卡设备时,进程会在Windows8PC上挂起。文档已正确签名,但进程并未终止。它只是挂起。我正在使用Sun的PKCS#11提供程序-sun.security.pkcs11.SunPKCS11基本上我是这样做的:SunPKCS11provider=newSunPKCS11(configuration);Security.addProvider(provider);.....somework.....prov

java - 带有 jvm args 的可运行 jar

我正在尝试使用Eclipse创建一个可运行的jar文件。问题是我在Eclipse中添加到运行配置的vm参数没有以任何方式保存。我知道我可以创建一个批处理文件来运行带有所需参数的jar,但我更希望我的用户只运行jar本身。因此,我的问题是,有没有什么方法可以不通过命令行将vm参数传递给可运行的jar? 最佳答案 简而言之,如果没有某种形式的包装器,您将无法做到这一点。您可以编写.bat文件和/或.sh脚本以通过适当的设置调用JVM。您可能还想查看JavaServiceWrapper,它提供了一种用可执行参数包装.jar并让它作为独立的

Java 改变变量名改变程序行为

我发现了一个场景,其中java程序在重命名变量后表现不同。我知道这实际上不是任何人都会使用的代码,但如果有人知道发生了什么,最好能有一个解释。我在EclipseKepler上用Java1.6试过这个。package_test;publicclassTestClass{publicstaticvoidmain(String...args){ObjecttestClazz$1=newObject(){publicStringtoString(){return"hello";}};TestClass$1test=newTestClass$1();System.out.println(test

java - 哪些 JVM 优化导致了这些性能结果?

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在JavaREST服务性能测试中,我得到了一个意想不到的模式:在每次调用中始终创建和返回相同值对象的方法比仅返回存储在类或对象字段中的值对象的另一个版本运行得更快。代码:@POST@Path("inline")publicResponseinline(Strings){returnResponse.status(Status.CREATED).build();}privatestaticfinal

java - 当我运行我的程序时,我时不时会收到随机错误

我以前从未见过这些类似的错误,例如:本地方法中的fatalerror:JDWP无法获取线程本地存储,jvmtiError=JVMTI_ERROR_WRONG_PHASE(112)如果我之后再次运行我的程序,错误不会出现,这是我没有得到的。这个错误今天出现了好几次,甚至在这个最简单的代码示例中也是如此:测试.javaimportjava.io.File;publicclasstest{publictest(){OpenFileopf=newOpenFile("test/data.txt");OpenFileopf2=newOpenFile(newFile("test/data.txt")

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...根