草庐IT

java - 最大化 Java 堆空间

我正在尝试在Java中使用非常大的方阵,数量级为n=1e6或更多。矩阵并不稀疏,所以我看不出有什么方法可以将它们表示为二维数组,这需要n^2*sizeof(int)位内存。显然,即使添加编译器标志以使用我的机器允许的最大堆,我也会遇到堆溢出错误。出于这个问题的考虑,我愿意假设我拥有完美的计算机(无限RAM等),但实际上我使用的是64位计算机,具有16GB的RAM。似乎我的机器只是如此相关,因为我受限于JVM而不是我的实际硬件(因为JVM不能比我的物理机器有更多的内存)。我理解(并被引用,例如,此处MakingaverylargeJavaarray)Java数组即使在理论上也不能大于用于

java - 无法访问的对象不是从堆中收集的垃圾

我正在为我的JVM堆(Java1.7)中无法访问的对象而苦苦挣扎。从图中可以看出(图中所有类都是不可达的),我们有超过74%的objects没有reference,所以应该是garbaggedcollected。在我们的tomcat7服务器上正常运行3周后,该状态变为仅运行Probe监控应用程序、tomcat管理器和我们的web应用程序,这可能是问题的根源。我们的应用程序基于JSF1.2,在客户端上保存状态,这就是您在下图中看到的-主要是带有ViewSaveState的字符数组。当我从jVisualVM手动运行GC时,它会删除所有无法访问的对象,一切正常,直到堆达到其限制的3周。有些对

java - 我可以让 Tomcat 作为转储堆的服务运行吗?

我正在尝试让Tomcat(目前作为服务在Windows2003机器上运行)在OutOfMemoryError上转储堆。(Tomcat正在运行Hudson,它在我构建的尾端报告堆空间问题。手动运行构建不会产生此类错误。Hudson人员需要堆转储才能开始。)按照其他地方的说明,我已经告诉Apache服务监视器配置它用来运行Tomcat的JVM,以便在遇到OutOfMemoryError时通过将以下内容添加到JVM选项来转储堆:-XX:+HeapDumpOnOutOfMemoryError然后我再次运行构建。果然,它报告存在堆错误。我扫描整个磁盘寻找默认的java_pid123.hprof文

java - 如何生成仅包含 JRE 的堆转储?

我们在生产环境中安装了JRE,但没有安装JDK。JRE和OS的版本如下。[me@mymachine~]$java-versionjavaversion"1.6.0_45"Java(TM)SERuntimeEnvironment(build1.6.0_45-b06)JavaHotSpot(TM)64-BitServerVM(build20.45-b01,mixedmode)[me@mymachine~]$uname-aLinuxmymachine.mydomain.com3.10.35-43.137.amzn1.x86_64#1SMPWedApr209:36:59UTC2014x86_6

java - 使用 JVisualVM 从 Java 中的远程应用程序获取堆转储

我运行JVisualVM(WindowsXP、SunJava1.6.0.13、32位客户端VM)来监视远程应用程序(Linux、SunJava1.6.0.07、64位服务器VM)。在启动实际的远程应用程序之前,我使用所有访问策略在远程计算机上启动jstatd:grantcodebase"file:${java.home}/../lib/tools.jar"{permissionjava.security.AllPermission;};然后我使用命令行启动实际的应用程序java-Dcom.sun.management.jmxremote.authenticate=false-Dcom.

java - 在没有 HotSpotDiagnosticMXBean 的情况下从应用程序内部创建堆转储

如何在不使用类HotSpotDiagnosticMXBean的情况下从我的应用程序中创建堆转储。由于java/rt.jar的访问限制,我无法使用对HotSpotDiagnosticMXBean的依赖性来编译它。我知道如何解决eclipse.compiler错误,但如何为我的构建修复它?除了以编程方式创建堆转储之外,还有其他方法吗?此解决方案不起作用,因为它依赖于HotSpotDiagnosticMXBean:HotSpot-dependentHeapDump 最佳答案 好吧,看来你可以通过使用反射绕过限制:packagelab.he

java - 如何以编程方式增加 Java 堆大小

我有一个用于搜索文件的Java桌面应用程序,它通常很快就会达到默认的堆限制。我无法访问将安装它的所有系统,因此我想增加应用程序本身的JVM堆大小。谁能帮助我如何在我的应用程序中以编程方式做到这一点 最佳答案 将-Xmx设置为onegig并不意味着JVM将在启动时分配那么多内存。JVM将只分配-Xms(加上开销),直到需要更多堆空间为止。您是否需要保护您的用户免受虚拟内存抖动或操作系统内存分配失败的影响?如果不是,只需将Xmx设置为一个较大的值。请注意,Windows32位JVM通常会忽略大于1.2Gig的Xmx设置,因此为了安全起见

java - 将对象移出堆

有没有人尝试将Java对象移出堆?我尝试使用不安全的库来序列化、反序列化和存储字节数组。但是其中包含多个对象的复杂对象使这个过程变得乏味。有更好的解决方案吗? 最佳答案 不安全字段是您的不安全实例。如果您不知道如何获取它,只需使用:Unsafeunsafe=getUnsafe();UnsafegetUnsafe(){try{Fieldf=Unsafe.class.getDeclaredField("theUnsafe");f.setAccessible(true);return(Unsafe)f.get(null);}catch(E

关于堆的一切

前置知识首先给出堆的定义:堆是一颗树,满足堆的性质,即:对于一个节点,它的权值大于(或小于)它的各个儿子的权值有这个性质,显然堆的根节点权值是整个堆中最大或最小的由此可分为小根堆和大根堆二叉堆最常见的堆就是二叉堆二叉堆是一颗满足堆的性质的完全二叉树显然,二叉堆的子树也是二叉堆接下来,我们以小根堆为例:当一个节点权值小于其父亲时,我们尝试不断将这个节点与父亲交换,直到其满足堆的性质这就是向上调整同理,当一个节点权值大于其父亲时,我们尝试不断将这个节点与其两个儿子中权值较小的一个交换,直到其满足堆的性质这就是向下调整为什么这里要与权值较小的一个交换呢?因为我们要使交换后满足堆的性质所以新的父节点权

.htaccess - 如何使用 htaccess 重定向一堆文件

我有一个网站有很多这样的urlwww.example.com/this_has_some_meaning.php现在我了解到,出于SEO的原因,最好使用www.example.com/this-has-some-meaning.php我可以使用htaccess,使用某种正则表达式将所有url从旧​​的重定向到新的吗? 最佳答案 使用给定的代码RewriteCond%{HTTP_USER_AGENT}(google|yahoo|msn|aol|bing)[OR]RewriteCond%{HTTP_REFERER}(google|yah