Tag: 堆内存

Play Framework – 无法为对象堆保留足够的空间

我对我的游戏项目进行了一些修改,当我尝试运行它时,我得到了错误。 >play run Error occurred during initialization of VM Could not reserve enough space for object heap Error: Could not create the Java Virtual Machine. Error: A fatal exception has occured. Program will exit. 这是个常见的问题吗? 我对游戏框架相当缺乏经验,但我之前已多次运行我的项目而没有遇到此错误。 编辑:有关java版本的信息。 >java -version java version “1.7.0_11” Java(TM) Runtime Environment (build 1.7.0_11-b21) Java HotSpot(TM) Client VM (build 23.6-b04, mixed mode, […]

如何缩小java堆空间?

我有一个Java控制台应用程序,它使用DOM处理大型xml文件。 基本上它从数据库中获取的数据创建xml文件。 现在,正如你猜测它正在使用大量内存,但令我惊讶的是,它与糟糕的代码无关,而是与“java堆空间不缩小”有关。 我尝试使用这些JVM参数从Eclipse运行我的应用程序: -Xmx700m -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 我甚至加了 -XX:-UseSerialGC 因为我发现并行GC忽略“MinHeap”和“MaxHeap”选项。 即使有所有这些选项我的应用程序的内存使用图形看起来像这样: 正如您所看到的,我的应用程序在某一时刻需要大约400 MB的堆空间,堆增长到大约650 MB,但几秒钟之后(当xml生成完成时)我的应用程序下降到12MB的已用堆,但是“堆大小” “保持在650 MB左右。 我的RAM需要650 MB! 这是古怪的,你不觉得吗? **有没有办法强制JVS缩小可用堆大小,比如当前使用堆的150%?**就像,如果我的应用程序需要15 MB内存,堆大小约为20MB,当我的应用程序要求400 MB时在我的应用程序完成繁重的操作后,ram,堆增长到~600 MB并且DROPS回到~20 MB?

Java非堆内存和堆栈内存有什么区别? 它们是相同的,如果不是它们之间有什么区别?

我正在使用Jconsole来监视Java应用程序。 内存选项卡显示不同的堆和非堆内存 堆内存使用情况 非堆内存使用情况 记忆池“CMS Old Gen” 记忆池“Par Eden Space” 记忆池“Par Survivor Space” 内存池“代码缓存” 内存池“CMS Perm Gen” 这些术语有什么区别。 另请提供一些信息 – 如何通过监视这些参数来查找应用程序行为中的exception。

PermGen和Heap,差异及其意义

朋友们, 你能否告诉我Heap和PermGen的意义,差异和用途。 最好分别知道它们中加载了哪个类。 与Java VM规范相关的解释将非常有用 谢谢Punith

Java堆栈和堆内存管理

我想知道如何在以下程序中分配内存: public class MemoryClass { public static void main(final String[] args) { int i = 0; MemoryClass memoryClass = new MemoryClass(); memoryClass.myMethod(memoryClass); } private void myMethod(final Object obj) { int i = 1; String s = “HelloWorld!”; } } 现在,就我的理解而言,下图描述了内存分配的发生方式: 在上图中,堆栈存储器中的内存 , obj和s实际上是对它们放置在堆内存中的“ 实际对象 ”的引用。 以下是我想到的一系列问题: 存储的方法在哪里? 如果我在myMethod创建了另一个MemoryClass对象,JVM会在堆栈内存中再次为相同的方法分配内存吗? 如果JVM执行完成,JVM是否会释放分配给myMethod的内存,如果是这样,它将如何管理问题2中提到的情况( 仅当JVM多次为同一方法分配内存时才适用 )。 如果我只声明了s并且没有初始化它,那么JVM是否仍会为java.lang.String类的所有方法分配内存,如果是这样,为什么呢?

很多内存中的OutOfMemoryexception

对不起的问题名称很抱歉,但我找不到更好的东西。 我有一些代码 long heapFreeSize = Runtime.getRuntime().freeMemory(); URL url = new URL(“http://example.com”); URLConnection myUrlConnection = url.openConnection(); GZIPInputStream gZIPInputStream = new GZIPInputStream(myUrlConnection.getInputStream()); StringBuffer decompressedStringBuffer = new StringBuffer(); int bytes_read; int bufferSize; heapFreeSize = Runtime.getRuntime().freeMemory(); while ((bytes_read = gZIPInputStream.read(buffer)) > 0) { String part = new String(buffer, 0 ,bytes_read, “UTF-8”); heapFreeSize = Runtime.getRuntime().freeMemory(); decompressedStringBuffer.append(part); bufferSize = decompressedStringBuffer.length(); heapFreeSize […]

使用大型数据结构时,避免Java(eclipse)中出现“内存不足错误”?

好吧,所以我正在编写一个程序,不幸的是需要使用庞大的数据结构来完成它的工作,但它在初始化期间失败了“内存不足错误”。 虽然我完全理解这意味着什么以及为什么它是一个问题,但我无法克服它,因为我的程序需要使用这个大型结构,我不知道任何其他方式来存储它。 该程序首先索引我提供的大量文本文件。 这很好用。 然后它使用此索引初始化大型2D数组。 该数组将具有n²个条目,其中“n”是文本语料库中唯一字的数量。 对于我正在测试的相对较小的块(大约60个文件),它需要制作大约30,000×30,000个条目。 一旦我在我的完整预期语料库上运行它,这可能会更大。 它在索引之后每次都会失败,同时它正在初始化数据结构(稍后要处理)。 我做的事情包括: 修改我的代码以使用原始int[]而不是TreeMap 消除冗余结构等… 另外,我用-Xmx2g运行程序以-Xmx2g我分配的内存 我相信这不是一个简单的代码解决方案,但很可能需要一种非常新的方法。 我正在寻找那种方法,任何想法? 谢谢,B。

JVM堆未释放

我是分析Java中内存问题的新手。 如果这个问题看起来很幼稚,请原谅我 我运行应用程序并设置了以下JVM参数: -Xms3072m -Xmx3072m -XX:MaxNewSize=1008m -XX:NewSize=1008m -XX:PermSize=224m -XX:MaxPermSize=224m -XX:SurvivorRatio=6 我正在使用visualVM来监控用法:这就是我所看到的 问题是,即使应用程序没有接收任何数据进行处理,使用的内存也不会下降。 启动应用程序时,已用空间从低(约1GB)开始,但随着应用程序的运行而增长。 然后用过的内存永远不会消失。 我的问题是,即使在应用程序中没有发生重大处理以及可以设置哪些配置来纠正它,所使用的堆内存也不会下降。 我的理解是,如果应用程序没有进行任何处理,那么使用的堆应该更少,并且在这种情况下堆内存可用(或最大堆)应保持相同(3GB)。

内存不足错误,java堆空间

我尝试读取超过400万行和超过400 MB的日志文件,但我得到Out of Memory Error:java堆空间 。 这是我的代码: File file = new File(“C:\\file.log”); FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); StringBuilder stringBuffer = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line); } 我试图将堆内存增加到1GB,但仍然得到该消息。 可能的原因是什么?

为什么-Xmx和Runtime.maxMemory不同意

当你添加 -Xmx????m 在命令行中,JVM为您提供了一个接近此值的堆,但最多可以输出14%。 JVM可以为您提供更接近您想要的数字,但只能通过反复试验。 System.out.println(Runtime.getRuntime().maxMemory()); 版画 -Xmx1000m -> 932184064 -Xmx1024m -Xmx1g -> 954728448 -Xmx1072m -> 999292928 -Xmx1073m -> 1001390080 我正在运行HotSpot Java 8 update 5。 很明显,堆可能只是超过1000000000但为什么这是-Xmx1073m而不是-Xmx1000m ? BTW 1g == 1024m ,这表明1g应该是1024 ^ 3,比1000 ^ 3高7%,但是你得到比1000 ^ 3低7%的东西。 被这么多关闭表明我错过了关于堆如何工作的基本信息。 如果我要求-Xmx1000m并且它是1001390080我不在乎,我会假设它需要遵守一些分配多个,但是给你932184064建议我堆比我想象的更复杂。 编辑我发现了 -Xmx1152m gives 1073741824 which is exactly 1024^3 所以看起来它比我在这种情况下要求的maxMemory()减少了128 MB。 BTW 128是我最喜欢的号码。 我今天参加了128号街道的会议,发言人引用了第128页的一本书;)