Tag: heap

jVisualVM的内存检查器中“保留大小”是什么意思?

摘要选项卡上的Jvisualvm堆转储具有按保留大小检查bigest对象的function。 保留的真正含义是什么? 如何计算和显示对象树的大小? 如果我可以在这里看到对象(10M)和它的成员对象(5M)我应该如何计算堆影响。 他们两个都花了10M或15M的堆? 为什么我看不到我们的门面巨大的应用程序对象? 谢谢。

R中的MemoryError,而read.xlsx

我使用以下R代码(利用Java参数来增加内存): library(xlsx) options(java.parameters = “-Xmx1g”) library(XLConnect) NiVe <- read.xlsx("version1.xlsx",1) version1.xlsx文件大小为13 MB。 我收到以下错误: Error in .jcall(“RJavaTools”, “Ljava/lang/Object;”, “invokeMethod”, cl, : java.lang.OutOfMemoryError: Java heap space 有人可以帮忙吗?

内存中创建了多少个字符串?

说我有这个String表达式 String hi = “Tom” + “Brady” + “Goat” 我知道字符串池“允许运行时通过在池中保留不可变字符串来节省内存” 字符串池 字符串池中将创建多少个字符串? 我最初的猜测是5 – “Tom” , “Brady” , “Goat” , “TomBrady” , “TomBradyGoat” ,因为String连接的操作顺序(从左到右?)或者它只是最终结果,“ TomBradyGoat“,它存储在字符串池中?

Java webstart max-heap-size导致JVM无法启动

我们在客户端使用java webstart来实现基于java swing的应用程序。 最近,当点击jnlp链接时,我们遇到了一个奇怪的“无法启动java虚拟机”错误。 我们很快发现它,因为jnlp文件中的max-heap-size设置设置为1024m,而大多数客户端PC只有1 gb物理内存。 将max-heap-size设置回512m解决了问题。 目前,jnlp文件中的相关行看起来像 我查看了jnlp规范,但找不到任何与“Java虚拟机”问题相关的内容。 从理论上讲,max-heap-size应该与初始堆大小无关。 但我们的经验表明恰恰相反。 客户环境: Windows XP SP2(32位),Internet Explorer 8.06,内存1G注意max-heap-size设置为1024m可能会导致具有2G内存的计算机出现同样的问题。 基本上,我在这里寻找的是关于为什么会发生这种情况的一些参考/规范/经验,以及除了增加物理内存大小之外是否有任何问题。 另一件事是,如果我们不指定max-heap-size,那么实际的物理内存大小是否会被用作max-heap-size,否则将使用系统默认值? 谢谢你,JasonW

当我们将Xmx和Xms设置为相同大小时会发生什么

当我们将Xms和Xmx的值设置为相等时,对HotGot中的FullGC或年轻/终身gen的分配有什么影响。 它在JRockit中有什么不同吗?

字符串实习在Java 7+中如何工作?

所以,我意识到我要提出的问题涉及到一次又一次被打死的话题,然而,即使在阅读了我能找到的所有答案和文档之后,我仍然对此感到困惑。字符串实习。 也许是因为我对JVM缺乏了解; 也许是因为Java 7中引入的变化使许多上述答案和文档贬值。 无论哪种方式,我都被卡住了,我希望有人可以帮助我更清楚地理解这个概念…… String a = “text”; String b = new String(“text”); 在上面的例子中,我理解将创建两个String对象。 我也明白在内存中只有一个包含序列’t’,’e’,’x’和’t’的char数组。 但是,在内存中实际存储的每个字符串对象是什么? 如果我读过的内容我已经正确阅读:变量a的引用将存储在常量池中,而b的引用将存储在堆中,对吧? 如果是这种情况,我对实习池如何维护实习字符串感到困惑。 它是否跟踪常量池中定义的字符串以及从堆中手动内化(调用.intern() )的字符串? JVM是否创建在常量池中定义的字符串对象并将它们加载到实习池中? 我很困惑这一切是如何运作的…… 再次,对于提出这样令人困惑/愚蠢的问题感到遗憾,只是我对JVM的结构和内部工作相对较新,而且其中很多都让我头晕目眩。 谢谢!

动态增加java堆空间

我编写了一个java程序,用于测试具有不同处理器数量的不同机器上的几个multithreading算法的速度。 在某些机器上,merge sort *失败,因为它需要一个相当大的堆空间来处理非常大的数组。 在运行程序之前,我可以自己轻松地更改java堆空间,但我觉得更强大,更简单的方法是从程序本身执行此任务。 有没有办法在java程序的过程中从虚拟机请求/实现更多的堆空间? 注意:我确实理解我可以用“java -Xmx1g Program”这样的脚本执行程序; 我对这个问题的好奇心部分是学术性的。 *我的实现不会在线合并。 它需要O(n)额外的内存。

带有stringbuilder的java outOfMemoryError

当我调用这个方法时,我得到一个java outOfMemoryError – 我在一个循环中使用它来按顺序解析许多大文件。 我的猜测是result.toString()在循环期间没有正确收集垃圾。 如果是的话,我该如何解决? private String matchHelper(String buffer, String regex, String method){ Pattern abbrev_p = Pattern.compile(regex);//norms USA, BS, PH.D, PH.D. Matcher abbrev_matcher = abbrev_p.matcher(buffer); StringBuffer result = new StringBuffer(); while (abbrev_matcher.find()){ abbrev_matcher.appendReplacement(result, abbrevHelper(abbrev_matcher)); } abbrev_matcher.appendTail(result); String tempResult = result.toString(); //ERROR OCCURS HERE return tempResult; }

重新启动具有更大堆空间的JVM

我希望能够执行.Jar文件,如果堆空间设置得不够大,它应该启动一个具有相同.Jar文件的新JVM,但设置更大的堆空间,然后关闭第一个JVM和.Jar。 我尝试过使用ProcessBuilder,但我无法使用它。 它必须跨平台工作。 -ONi

Applet:Java堆空间

由于实施错误很小,我发现我能够多快地解决Java堆空间问题 现在这个bug被修复了一切都很好但它确实让我研究如何解决这个问题,并且我提出了多种解决方案,例如 java -Xms5m -Xmx15m MyApp 问题是这会改变我的计算机上的java内存,但我正在研究将在webrowser中使用的Applet。 因此,有一种方法,在APPLET的RUNTIME中改变堆大小?