草庐IT

java - rt.jar 的内容是否会在不同的 JVM 供应商之间发生变化?

我继承了对直接使用rt.jar中的**.internal.**apachexerces类的遗留Web应用程序的支持。我认为历史是这段代码(回到java1.4)曾经明确地使用xerces并且在移动到java5时的某个时刻放弃了xercesjar的使用并且这些类从rt.jar中引用为内部等价物。我正在尝试了解在各种Web容器(例如Websphere与Tomcat等)上运行该项目的影响。rt.jar是由SUN还是JVM/JRE供应商提供的?其他供应商是否继续在内部使用xerces还是有其他XML实现?在某些时候(资源允许)需要更改此代码以使用标准的JavaAPI,我想了解这可能是一个多大的问

java - JVM 在 gc 期间抛出 OutOfMemory,尽管还有足够的内存

我将我的java应用程序配置为使用5G内存。我突然遇到了OutOfMemory。我检查了gc日志,发现剩余内存充足:年轻代占用4%分配空间,tenure代占用5%,perm代占用43%。我很困惑为什么JVM在gc时间抛出OutOfMemory。有谁知道为什么会这样?非常感谢您的帮助。JVM内存和gc设置:-server-Xms5g-Xmx5g-Xss256k-XX:NewSize=2g-XX:MaxNewSize=2g-XX:+UseParallelOldGC-XX:+UseTLAB-XX:SurvivorRatio=8-XX:TargetSurvivorRatio=90-XX:+Di

java - Eclipse IDE 无法启动,JVM 已终止。退出代码=-1

我遇到了EclipseIDE无法启动的问题,并显示以下错误消息:“JVM已终止。退出代码=-1”经过一番谷歌搜索后,我半无意间找到了解决方案,并且能够让IDE正确启动。我所做的是将eclipse.ini中的-XmxJVM参数设置为低于指定的默认值(-Xmx512m)的值。虽然我能够让IDE启动,但我很好奇它为什么会发生以及为什么这个解决方案有效。以下是一些环境信息:EclipseIDE:eclipse-rcp-galileo-SR1-win32JVM:Java(TM)SE运行时环境(build1.6.0_10-b33)物理内存:2GB启动时的可用内存>1GB。最初,我将该值更改为256

java - 计算 jvm 堆大小以托管 Web 应用程序

我想在他们提供32、64、128、256MB计划的私有(private)JVM上托管Web应用程序。我的Web应用程序使用Spring。我为每个登录的用户session存储一些对象。我的问题是:我如何分析我的网络应用程序以查看它需要多少堆大小以便我可以选择一个计划?我如何模拟数百名用户同时登录?我正在使用Netbeans6.7Java1.6Tomcat6.0.18开发应用程序谢谢。 最佳答案 要进行分析,您可以使用VisualVM,YourKit等要模拟负载,您可以使用ApacheJMeter

java - 异常访问冲突 Java?

我目前正在编写一个JNI项目,在尝试运行我的Java代码时收到以下错误日志。它告诉我有问题的框架是一个jvm.dll框架,并且在尝试隔离问题时,我试图弄清楚我的问题到底在哪里(在JVM与我的native代码中)我附加了线程日志的一部分,如果需要可以附加其余部分。我还尝试重新安装JVM。AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment:EXCEPTION_ACCESS_VIOLATION(0xc0000005)atpc=0x6d8fefb5,pid=720,tid=3128JREversion:6.0_21-b07JavaVM:J

c# - CLR/JVM 是否为所有正在运行的 .net/java 应用程序保留一个实习生池?

以下摘自MSDN:Thecommonlanguageruntimeconservesstringstoragebymaintainingatable,calledtheinternpool,thatcontainsasinglereferencetoeachuniqueliteralstringdeclaredorcreatedprogrammaticallyinyourprogram.Consequently,aninstanceofaliteralstringwithaparticularvalueonlyexistsonceinthesystem.Forexample,ifyou

java - 以编程方式检测 JVM 是否正在使用类共享?

一些JVM有ClassSharing选项设置。有没有办法以编程方式检测该选项是打开还是关闭?谢谢 最佳答案 我所知道的没有理智的方法来得到这个......您可以获得用于调用您的JVM的命令行并查找描述的标志here.如果您想做的只是强制关闭该功能,那很容易-需要关闭标志。请注意,此文档适用于1.5,它说共享还取决于所使用的垃圾收集器,因此您也需要推断出这一点(也可能,给定jvm版本、命令行、操作系统版本等等耐心:-)).您还需要在每个jvm供应商上解决这个问题。ibmjvm,例如usesdifferentflags

java - JVM JIT 诊断工具和优化技巧

我听说过很多关于JVMJIT可以做什么的信息,但是没有看到很多关于如何分析JIT在给定的程序运行中实际做什么的信息。有很多关于使用-XX:+PrintCompilation和-XX:+PrintOptoAssembly的提示,但它会产生难以解释的非常低级的信息。一般来说,在优化过程中,我希望有一套具有专用JIT预热时间等的常见操作基准测试套件,但我希望能够看到哪些优化实际上在我的代码上触发。也许我的JVM考虑过内联一个特定的方法调用,但由于某些原因它决定不这样做,或者JIT无法避免在我的循环中进行数组边界检查,因为我对不变量和循环条件的表述过于模糊。我希望像YourKit这样的工具能够

java - 为什么在 JVM 中交换对象位置?

这个问题在这里已经有了答案:Istheaddressofanobjectfixedduringitslifecycle?(2个答案)关闭9年前。这是我尝试过的:publicfinalclassfirstObj{publicstaticvoidmain(Stringargs[]){Objectobj=newObject();Objectobj1=newObject();System.out.println(obj);System.out.println(obj1);}}我先编译了程序,连续跑了两次,我得到了两个不同的输出:输出1:java.lang.Object@6f548414java

java - 根据 JVM 的内存粒度确定数组的最佳大小

当为(例如)一个集合创建支持数组时,您并不真正关心您创建的数组的确切大小,它只需要至少与您计算的一样大。但是由于内存分配和VM的数组头,在某些情况下可以创建更大的数组而不消耗更多内存-对于Oracle32位VM(至少互联网上的几个来源是这样的)claim),内存粒度为8(意味着任何内存分配都向上舍入到下一个8字节边界),数组头开销为12字节。这意味着在分配Object[2]时,它应该消耗20个字节(12+2*4),但由于粒度的原因,它实际上将占用24个字节。可以以相同的内存成本创建一个Object[3],这意味着集合必须稍后调整其支持数组的大小。同样的原则可以应用于原始数组,例如byt