相关疑难解决方法(0)

如何处理"java.lang.OutOfMemoryError:Java堆空间"错误?

我正在Java 5上编写一个客户端Swing应用程序(图形字体设计器).最近,我遇到了错误,因为我对内存使用情况并不保守.用户可以打开无限数量的文件,程序将打开的对象保存在内存中.经过快速研究后,我在5.0 Java虚拟机中找到了人体工程学,其他人在Windows机器上说JVM默认最大堆大小为.java.lang.OutOfMemoryError: Java heap space64MB

鉴于这种情况,我该如何处理这种约束?

我可以使用java的命令行选项增加最大堆大小,但这需要找出可用的RAM并编写一些启动程序或脚本.此外,增加到一些有限的最大值并不能最终摆脱这个问题.

我可以重写我的一些代码来经常将对象持久化到文件系统(使用数据库是一回事)来释放内存.它可以工作,但它可能也很重要.

如果您可以向我指出上述想法的细节或某些替代方案,如自动虚拟内存,动态扩展堆大小,这将是很好的.

java jvm heap-memory out-of-memory java-ee

395
推荐指数
21
解决办法
123万
查看次数

java.lang.OutOfMemoryError:Java堆空间

我在执行多线程程序时遇到以下错误

java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

上述错误发生在其中一个线程中.

  1. 据我所知,堆空间仅由实例变量占用.如果这是正确的,那么为什么在运行正常一段时间之后发生此错误,因为在创建对象时分配了实例变量的空间.

  2. 有没有办法增加堆空间?

  3. 我应该对我的程序进行哪些更改,以便它可以减少堆空间?

java multithreading heap-memory out-of-memory

94
推荐指数
7
解决办法
28万
查看次数

如何增加JVM内存?

嗨,我想知道我可以根据我的应用程序增加JVM的内存.如果是的话我怎样才能增加JVM内存?我怎么知道JVM的大小?

java jvm

72
推荐指数
3
解决办法
22万
查看次数

Java OutOfMemoryError在读取大文本文件时

我是Java的新手,正在阅读非常大的文件,需要一些帮助来理解问题并解决它.我们有一些遗留代码必须进行优化才能使其正常运行.文件大小只能从10mb到10gb不等.只有文件启动超过800mb大小时才会启动麻烦.

InputStream inFileReader = channelSFtp.get(path); // file reading from ssh.
byte[] localbuffer = new byte[2048];
ByteArrayOutputStream bArrStream = new ByteArrayOutputStream();

int i = 0;
while (-1 != (i = inFileReader.read(buffer))) {
bArrStream.write(localbuffer, 0, i);
}

byte[] data = bArrStream.toByteArray();
inFileReader.close();
bos.close();
Run Code Online (Sandbox Code Playgroud)

我们收到了错误

java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2271)
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激?

java arrays file-io bytearray out-of-memory

17
推荐指数
5
解决办法
8233
查看次数

如何使波形渲染更有趣?

我写了一个波形渲染器,它接受一个音频文件并创建如下内容:

在此输入图像描述

逻辑非常简单.我计算每个像素所需的音频样本数,读取这些样本,平均它们并根据结果值绘制一列像素.

通常情况下,我会在大约600-800像素上渲染一首完整的歌曲,因此波浪非常紧凑.不幸的是,这通常会导致视觉效果不佳,因为几乎整首歌都是以几乎相同的高度呈现的.没有变化.

有趣的是,如果你看一下SoundCloud上的波形,几乎没有一个像我的结果一样无聊.他们都有一些变化.这可能是什么诀窍?我不认为他们只是添加随机噪音.

algorithm audio graphics rendering waveform

16
推荐指数
1
解决办法
2853
查看次数

如何增加jBoss服务器的堆大小

我的项目中有一个上传文件场景.当我尝试上传大文件时,它会给我一个OutOfMemory错误.该错误与Java堆大小有关.

如何在Java中增加堆大小以及我需要为此更改哪个文件?我正在使用jboss 5.1服务器来运行我的应用程序.

java jboss out-of-memory

13
推荐指数
5
解决办法
11万
查看次数

Math.Random中的StackOverflowError是一种随机递归方法

这是我的计划的背景.

一个函数有50%的机会什么都不做,50%自称两次.该计划完成的概率是多少?

我写了这段代码,显然效果很好.对每个人来说可能并不明显的答案是,该计划有100%的机会完成.但是当我运行这个程序时,会出现一个StackOverflowError(有多方便;)),在Math.Random()中出现.有人能指出我从哪里来,并告诉我,如果我的代码可能是错的?

static int bestDepth =0;
static int numberOfPrograms =0;
@Test
public void testProba(){
   for(int i = 0; i <1000; i++){
       long time = System.currentTimeMillis();
       bestDepth = 0;
       numberOfPrograms = 0;
       loop(0);
       LOGGER.info("Best depth:"+ bestDepth +" in "+(System.currentTimeMillis()-time)+"ms");
   }
}

public boolean loop(int depth){
    numberOfPrograms++;
    if(depth> bestDepth){
        bestDepth = depth;
    }
    if(proba()){
        return true;
    }
    else{
        return loop(depth + 1) && loop(depth + 1);
    }
}

public boolean proba(){
    return Math.random()>0.5;
}
Run Code Online (Sandbox Code Playgroud)

.

java.lang.StackOverflowError
at java.util.Random.nextDouble(Random.java:394)
at java.lang.Math.random(Math.java:695)
Run Code Online (Sandbox Code Playgroud)

.我怀疑堆栈及其中的功能数量是有限的,但我真的没有看到这里的问题. …

java algorithm

11
推荐指数
1
解决办法
2016
查看次数

数据结构等同于大型数据集的map(在java中)

是否有一个已经实现的数据结构,我可以使用它来分配给一个对象(在我的情况下是一个Edge),一个整数?我正在从一个文件,10密耳顶点,60密耳边缘读取图形,并使用地图(cost.put(e,cost))为每个边缘分配成本.

我以这种方式创建成本图:

costs = new HashMap<Edge,Integer>();
Run Code Online (Sandbox Code Playgroud)

它给出的例外是:

java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.resize(Unknown Source)
    at java.util.HashMap.addEntry(Unknown Source)
    at java.util.HashMap.put(Unknown Source) 
Run Code Online (Sandbox Code Playgroud)

java directed-graph

7
推荐指数
2
解决办法
986
查看次数

java.lang.OutOfMemoryError:GC开销限制超出了excel阅读器

我得到一个java.lang.OutOfMemoryError:当我尝试运行下面的程序时,GC开销限制超出异常.该程序的主方法访问'指定目录并迭代包含.xlsx的所有文件.这工作正常,因为我在任何其他逻辑之前测试它.它调用xlsx的方法基本上将xlsx文件转换为csv并将其附加到现有文件也可以正常工作.但是当我把它放在for循环中时,这就是我得到这个异常的时候.我猜它有一个冲突,当它打开xlsx并转换它csv和它的时间打开第二个也许我必须以某种方式关闭这一行:

File inputFile = new File("C:\\Users\\edennis.AD\\Desktop\\test\\"+nameOfFile);
Run Code Online (Sandbox Code Playgroud)

这是我现在唯一的猜测,当这个文件在循环的第二次迭代到来时干扰时.我正在使用Apache POI库来操作excel文件.提前致谢!

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelMan {

    public static void main(String[] args) throws FileNotFoundException {



        int i =0;


            File dir = new File("C:\\Users\\edennis.AD\\Desktop\\test\\");
            for (File child : dir.listFiles()) {

            //initializing whether the sheet sent to method is first or not, and //counting iterations for each time the for loop as run

            boolean firstSheet = true;  
            i++;

           String nameOfFile = …
Run Code Online (Sandbox Code Playgroud)

java

7
推荐指数
1
解决办法
1万
查看次数

在java中读取巨大的Excel文件(500K行)

我正在尝试读取一个大的 XLSX 文件。Excel 文件大约有 500K 行。我需要阅读第 2 列。

OPCPackage pkg;
pkg = OPCPackage.open("File path");
XSSFWorkbook myWorkBook = new XSSFWorkbook(pkg);
Sheet sheet = myWorkBook.getSheetAt(2);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
if (row_num > ROW_ESCAPE) 
{
   Cell cell = row.getCell(2);
  if (!cell.getStringCellValue().toString().trim().isEmpty()) 
            {
                System.out.println(cell.getStringCellValue().toString());
            }
System.out.println("hi"+row_num);
        }
        row_num++;
 }
Run Code Online (Sandbox Code Playgroud)

它打印到第 39723 行之后抛出以下异常

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.util.regex.Matcher.<init>(Matcher.java:225)
at java.util.regex.Pattern.matcher(Pattern.java:1093)
at org.apache.poi.xssf.usermodel.XSSFRichTextString.utfDecode(XSSFRichTextString.java:482)
at org.apache.poi.xssf.usermodel.XSSFRichTextString.getString(XSSFRichTextString.java:297)
at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:262)
at Main.get_titles(Main.java:484)
at Main.analyze_Importsheet(Main.java:461)
at Main.but_sel_imp_sheetActionPerformed(Main.java:220)
at …
Run Code Online (Sandbox Code Playgroud)

java excel apache-poi

7
推荐指数
2
解决办法
1万
查看次数