Мое приложение разбивает файл .zip на две части. Он отлично работает, когда размер файла меньше 100 МБ. Если размер файла больше, чем 100MB даетOutOfMemoryError в то время как разрыв zip-файла на две части
java.lang.OutOfMemoryError
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:198)
Я использую glassfishV3 и JDK6
-Xms512m -Xmx512m не хватает
then I have set
<jvm-options>-Xms1024m</jvm-options>
<jvm-options>-Xmx1024m</jvm-options>
, но затем он дает
"Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine."
public void create() {
byte[] bFile = takeByteArr("file1.zip");
byte[] bPart1 = Arrays.copyOfRange(bFile, 0, 100000);
byte[] bPart2 = Arrays.copyOfRange(bFile, 100000, bFile.length);
createFile(bPart1, "part1.zip");
createFile(bPart2, "part2.zip");
}
void createFile(byte[] bFile, String path) {
try {
FileOutputStream fos = new FileOutputStream(path);
fos.write(bFile);
fos.close();
} catch (FileNotFoundException ex) {
System.out.println("FileNotFoundException : " + ex);
} catch (IOException ioe) {
System.out.println("IOException : " + ioe);
}
}
byte[] takeByteArr(String filePath) {
File file = new File(filePath);
byte[] bFile = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return bFile;
}
Сколько оперативной памяти есть на вашем компьютере? И сколько свободного ОЗУ есть, когда вы получаете это сообщение? У вас есть 32 или 64-битная система и JDK. Когда у меня появляется это сообщение, я пытаюсь закрыть как можно больше программ и начать снова, в большинстве случаев этого достаточно. – StephaneM
Нужно ли это делать на Java? Может быть, OS-команда может быть вызвана из Java, чтобы разделить файл ... –
* Почему вы это делаете? Части не имеют смысла без всех других частей. Кажется бесполезным. В любом случае, конечно, это не сработает, если вы просто скопируете первые 100000 байт в другой кусок памяти, а затем предположите, что остальное тоже будет вписываться в память, а также в исходный файл. Файлы должны обрабатываться либо строкой, либо записью или буфером за раз. – EJP