我的应用程序显示“OldGeneration”/“TenuredGeneration”大小不断增加,当这达到“OldGen”的最大限制时,PermGen大小突然增加。这是我的代数:-Xmx1200m-Xms1200m-Xmn450m-XX:MaxPermSize=600m-XX:+UseParallelGC这是在32位Fedora上,所以不能有比这更大的堆。虽然该应用程序使用了SpringIOC和Hibernate,但它没有进行任何花哨的类加载,SpringApp-context.xml定义了大约1000个Bean。此应用从175MB的PermGen开始,在几个小时内稳步增加到约250
我正在开发一个小型应用程序,该应用程序应使用数字签名签署文档并退出。签名可以位于PKCS#12存档(.pfx文件)或智能卡设备上。使用pfx文件很容易,而且工作正常。但是,有时使用智能卡设备时,进程会在Windows8PC上挂起。文档已正确签名,但进程并未终止。它只是挂起。我正在使用Sun的PKCS#11提供程序-sun.security.pkcs11.SunPKCS11基本上我是这样做的:SunPKCS11provider=newSunPKCS11(configuration);Security.addProvider(provider);.....somework.....prov
默认情况下,对于Hotspot,CTRL-Break线程转储不会列出哪些线程持有java.lang.concurrent锁。而且我知道使用这些锁,Hotspot无法获得有关在哪个堆栈帧获取锁的信息。如果添加JVM选项-XX:+PrintConcurrentLocks,则CTRL-Break堆栈转储将列出(在线程的堆栈跟踪之后)该帧持有的任何并发锁。例如:"D-Java-5-Lock"prio=6tid=0x00000000069a1800nid=0x196crunnable[0x000000000770f000]java.lang.Thread.State:RUNNABLEatcom.
Cmalloc实现通常不会分配请求的精确内存量,而是消耗固定大小的内存运行,例如具有二次方大小,因此1025字节的分配实际上占用了2048字节的段,其中1023字节作为slop丢失。HotSpot是否对Java数组使用类似的分配机制?如果是这样,分配Java数组的正确方法是什么,这样就没有溢出?(例如,数组长度应该是2的幂还是2的幂减去一些固定的开销?) 最佳答案 如果您问的是语言,答案是:未指定(与C相同)如果您询问的是具体实现,请查看该实现。我相信Hotspot的粒度是8字节;即对象大小向上舍入到下一个粒度边界。如果问题是关于在
我听说是这种情况,但我找不到权威的在线资源来证实这一点。背景:一位同事喜欢将他的局部变量设为final。他这样做的原因之一是性能。我的观点是Java的HotSpotJustInTime编译器会自动检测不变的局部变量,并使它们成为final,因此我们自己这样做不会性能有任何好处。请注意,我不是询问将局部变量设为final是否是良好的编码习惯,因为已经有很多(离题的)SO问题了.编辑:mrhobo提出了关于优化整数文字字节码的一个很好的观点。我应该给出一个我正在谈论的代码类型的例子,以及我的问题:ObjectdoSomething(Foofoo){if(foo==null){returnn
Puremethods是那些没有副作用的:它们的唯一作用是返回一个值,该值是其参数的函数。使用相同的参数对同一个纯方法的两次调用将返回相同的值。那么,假设两次调用具有相同参数的纯方法,HotSpot是否可以优化掉第二次调用,简单地重新使用第一次调用的值?例如:intadd(intx,inty){returnx+y;}intaddTwice(intx,inty){returnadd(x,y)+add(x,y);}如果HotSpot没有在addTwice中内联add它是否理解add是pure并因此调用添加一次,返回值加倍?当然,这样一个微不足道的[mcve]不太可能引起直接兴趣,但由于内联
假设您有一个“简单的”枚举:publicenumDay{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}然后你在某处使用它:Dayday=Day.SUNDAY;...if(day==Day.SUNDAY){...}这与使用整数相比在性能方面(内存和时间)如何?intday=Day.SUNDAY;...publicclassDay{publicstaticfinalintSUNDAY=0;publicstaticfinalintMONDAY=1;}我们启用了JITHotSpot编译器以及其他“标准”优化。
当我试图通过运行JavaMissionControl(jmc)来分析我的本地Java应用程序时,我无法连接到该应用程序。它在左侧Pane中显示的所有JVM进程的描述中显示“非热点JVM不支持Flightrecorder”。我的环境:Windows7,Java8u25因为我无法在网上的任何地方找到这个问题的解决方案,所以我想与将来可能遇到同样问题的其他人(以及我future的自己)分享我幸运地发现的解决方案。 最佳答案 我在这里发布解决方案和导致解决方案的观察结果。当我(碰巧)尝试运行jvisualvm时,它显示错误“无法监视本地Ja
我在小型Windows桌面上开发了一个Java应用程序来解析XML文件。我遇到了一个非常有趣的观察结果,我对此非常好奇。我为我的应用程序生成了一个可执行jar,并在功能非常强大的WindowsServer机器上运行它。它有2个物理Xeon处理器,每个处理器有8个主频为2.7GHz的内核、50GBRAM和7200RPMHDD。当我启动我的应用程序时机器处于空闲状态,我很确定没有其他应用程序与我共享这台机器。后来,我在我的MacbookPro上运行可执行文件以查看其行为的乐趣。我的个人计算机是主频为2.2GHz的Corei7,配备4GBRAM和5400RPMHDD。令人惊讶的是,应用程序在
考虑代码:someList.forEach(x->System.out.format("element%s",x));理论上,通过首先内联forEach方法,然后在内联的forEach中内联lambda函数体,应该可以内联此代码并消除间接函数调用>代码。HotSpot是否能够执行此优化?在特定情况下是否执行它有哪些限制? 最佳答案 您的lambda表达式被编译成普通方法,而JRE将生成一个实现功能接口(interface)并调用该方法的类。在当前的HotSpot版本中,这个生成的类几乎像普通类一样工作,主要区别在于它可以调用priv