powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сборщик мусора тормозит
59 сообщений из 59, показаны все 3 страниц
Сборщик мусора тормозит
    #38680349
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, дорогие коллеги!
Есть архив с примерно 5000 файлов размером 130 мегабайт.
Вот код его распаковки
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public static void unzip(String zipFile, String location) throws IOException {
        try {
            File f = new File(location);
            if(!f.isDirectory()) {
                f.mkdirs();
            }
            ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile));
            try {
                ZipEntry ze = null;
                while ((ze = zin.getNextEntry()) != null) {
                    String path = location + ze.getName();

                    if (ze.isDirectory()) {
                        File unzipFile = new File(path);
                        if(!unzipFile.isDirectory()) {
                            unzipFile.mkdirs();
                        }
                    }
                    else {
                        FileOutputStream fout = new FileOutputStream(path, false);
                        try {
                            for (int c = zin.read(); c != -1; c = zin.read()) {
                                fout.write(c);
                            }
                            zin.closeEntry();
                        }
                        finally {
                            fout.close();                           
                        }
                    }
                }
            }
            finally {
                zin.close();
            }
        }
        catch (Exception e) {
            Log.e(TAG, "Unzip exception", e);
        }
    }


Помогите оптимизировать распаковку, т.к. в консоле LogCat андроида ругается сборщик мусора.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680351
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtimДобрый день, дорогие коллеги!
Есть архив с примерно 5000 файлов размером 130 мегабайт.
Вот код его распаковки
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public static void unzip(String zipFile, String location) throws IOException {
        try {
            File f = new File(location);
            if(!f.isDirectory()) {
                f.mkdirs();
            }
            ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile));
            try {
                ZipEntry ze = null;
                while ((ze = zin.getNextEntry()) != null) {
                    String path = location + ze.getName();

                    if (ze.isDirectory()) {
                        File unzipFile = new File(path);
                        if(!unzipFile.isDirectory()) {
                            unzipFile.mkdirs();
                        }
                    }
                    else {
                        FileOutputStream fout = new FileOutputStream(path, false);
                        try {
                            for (int c = zin.read(); c != -1; c = zin.read()) {
                                fout.write(c);
                            }
                            zin.closeEntry();
                        }
                        finally {
                            fout.close();                           
                        }
                    }
                }
            }
            finally {
                zin.close();
            }
        }
        catch (Exception e) {
            Log.e(TAG, "Unzip exception", e);
        }
    }


Помогите оптимизировать распаковку, т.к. в консоле LogCat андроида ругается сборщик мусора.

Код: java
1.
2.
3.
4.
                            for (int c = zin.read(); c != -1; c = zin.read()) {
                                fout.write(c);
                            }
                            zin.closeEntry();



Может стоит иногда сбрасывать на диск из памяти ?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680358
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оно ?
Код: java
1.
fout.flus();
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680362
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)) попробуйте
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680365
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/FileOutputStream.java#FileOutputStream.write(int)

не поможет flush

Снимите heapdump посмотрите хип
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680375
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно close должнен вызывать flush но не у всех потоков.
Посмотрел чужие примеры, везде ставят flush
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680492
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtimЕсть архив с примерно 5000 файлов размером 130 мегабайт.
Форменное издевательство над андроидом... Это не основном потоке, надеюсь, делается?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680527
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
Само собой
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680543
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtimВот код его распаковки

BufferedOutputStream и BufferedInputStream не пробовали добавить?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680545
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так ругается консолька
авторGC_CONCURRENT freed 1170K, 20% free 7646K/9479K, paused 1ms+2ms
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680547
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это странный код.
Код: java
1.
2.
3.
if(!unzipFile.isDirectory()) {
    unzipFile.mkdirs();
}
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680556
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо бы попрофилировать. Потому что код, в целом, если не считать отсутствие буфера, нормальный.
https://developer.android.com/tools/debugging/debugging-memory.html
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680560
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtimwadman,
Само собой
Тогда наверное стоит вставить какую-нибудь малозначительную паузу между файлами?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680572
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanТогда наверное стоит вставить какую-нибудь малозначительную паузу между файлами?
Интересный совет. Действительно, если распаковка занимает большое количество времени CPU, то GC может просто не успеть расшириться\отработать. С другой стороны должны быть большие простои на IO. Которые должны заменить эти паузы.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680660
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtim
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                        FileOutputStream fout = new FileOutputStream(path, false);
                        try {
                            for (int c = zin.read(); c != -1; c = zin.read()) {
                                fout.write(c);
                            }
                            zin.closeEntry();
                        }
                        finally {
                            fout.close();                           
                        }

Побайтовая перекачка данных - не лучшее решение:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
byte[] buffer = new byte[4*1024];
int count;
try {
  FileOutputStream fout = new FileOutputStream( path, false );
  while ( 0 > count = zin.read( buffer ) ) fout.write( buffer, 0, count );
}
finally {
  fout.close()
}
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680662
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только неравенство должно быть нестрогое.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680663
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПобайтовая перекачка данных - не лучшее решение:
Код: sql
1.
byte[] buffer = new byte[4*1024];


Свой буфер аналогично.
http://developer.android.com/reference/java/io/BufferedOutputStream.html
Сотню тактов процессора, разве что, можно сэкономить.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680804
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovpetrovichtim
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                        FileOutputStream fout = new FileOutputStream(path, false);
                        try {
                            for (int c = zin.read(); c != -1; c = zin.read()) {
                                fout.write(c);
                            }
                            zin.closeEntry();
                        }
                        finally {
                            fout.close();                           
                        }

Побайтовая перекачка данных - не лучшее решение:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
byte[] buffer = new byte[4*1024];
int count;
try {
  FileOutputStream fout = new FileOutputStream( path, false );
  while ( 0 > count = zin.read( buffer ) ) fout.write( buffer, 0, count );
}
finally {
  fout.close()
}


Спасибо!
Решил вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
protected Void doInBackground(Void... arg0) {
		int size;
		int totalSize;
		int currentSize = 0;
		byte[] buffer = new byte[2048];
		try {
			File f = new File(location);
			if (!f.isDirectory()) {
				f.mkdirs();
			}
			FileInputStream fis = new FileInputStream(zipFile);
			totalSize=fis.available();
			ZipInputStream zin = new ZipInputStream(fis);
			try {
				ZipEntry ze = null;					
				while ((ze = zin.getNextEntry()) != null) {
					currentSize+= ze.getCompressedSize();
					String path = location + ze.getName();						
					if (ze.isDirectory()) {
						File unzipFile = new File(path);
						if (!unzipFile.isDirectory()) {
							unzipFile.mkdirs();
						}
					} else {
						FileOutputStream fout = new FileOutputStream(path,
								false);
						BufferedOutputStream bufferOut = new BufferedOutputStream(
								fout, buffer.length);
						while ((size = zin.read(buffer, 0, buffer.length)) != -1) {
							bufferOut.write(buffer, 0, size);	
						}
						bufferOut.flush();
						bufferOut.close();
						fout.close();
						zin.closeEntry();
						publishProgress(currentSize,totalSize);
					}
				}
			} finally {
				zin.close();
				fis.close();	
			}
		} catch (Exception e) {
			Log.e("пост", "Unzip exception", e);
		}
		return null;
	}


Вот эта вещь byte[2048] сильно влияет на производительность?
Что будет если её поменять на 4048 ?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680809
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot petrovichtim]
Код: java
1.
2.
3.
4.
5.
						BufferedOutputStream bufferOut = new BufferedOutputStream(
								fout, buffer.length);
						while ((size = zin.read(buffer, 0, buffer.length)) != -1) {
							bufferOut.write(buffer, 0, size);	
						}


[quot]
Это facepalm. BufferedOutputStream уже реализует запись через byte[], которую вы реализовали самостоятельно.
Почему было не воткнуть ещё BufferedInputStream - для меня остаётся загадкой.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680810
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtimВот эта вещь byte[2048] сильно влияет на производительность?
Что будет если её поменять на 4048 ?
Зависит от файловой системы. В теории, скорость копирования может немного увеличится.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680901
petrovichtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BufferedOutputStream
По умолчанию пишет в 8192 как я понимаю?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38680926
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtim BufferedOutputStream
По умолчанию пишет в 8192 как я понимаю?
Да. В доке так написано.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681232
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСвой буфер аналогично.
http://developer.android.com/reference/java/io/BufferedOutputStream.html Толку-то? Ну заполнил рантайм этот буфер одним вызовом - в коде всё равно извлекается его содержимое по одному байту.Сотню тактов процессора, разве что, можно сэкономить.Это дисковых обращений не экономится, а процессор - ещё как.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681240
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЭто дисковых обращений не экономится, а процессор - ещё как.
На фоне разницы в IO, можно сказать что никак не экономится. Даже Unzip обходится на несколько порядков дороже, чем такая оптимизация.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681243
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНа фоне разницы в IO, можно сказать что никак не экономится. Даже Unzip обходится на несколько порядков дороже, чем такая оптимизация.
В, принципе, для 130Мб, 5-10 секунд можно поиметь. Но боюсь себе представить сколько на мобилке будут эти 130Мб распаковываться.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681262
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"contig -n zero 10000000" создаёт файл нужного размера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
contig -a -v zero
------------------------
Processing ...\zero:
Scanning file...

[Cluster] Runlength
  [0] 2442

File size: 10000000 bytes
...\zero is in 1 fragment
------------------------

Запускаем несложный тест:
побайтово
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
public class test1 {
  public static void main( String[] args ) throws java.io.IOException {
    long start = System.nanoTime();
    int b;
    while ( -1 < ( b = System.in.read() ) ) System.out.write( b );
    System.err.println( "By byte: " + ( System.nanoTime() - start + 500000 ) / 1000000 + " ms" );
  }
}

буфер
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class test2 {
  public static void main( String[] args ) throws java.io.IOException {
    long start = System.nanoTime();
    int b;
    byte[] buffer = new byte[4*1024];
    while ( -1 < ( b = System.in.read( buffer ) ) ) System.out.write( buffer, 0, b );
    System.err.println( "Buffer: " + ( System.nanoTime() - start + 500000 ) / 1000000 + " ms" );
  }
}


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
for %A in (1 2) do @for /l %B in (0 1 6) do @java -server test%A < zero > nul
By byte: 627 ms
By byte: 614 ms
By byte: 611 ms
By byte: 624 ms
By byte: 609 ms
By byte: 616 ms
By byte: 612 ms
Buffer: 16 ms
Buffer: 15 ms
Buffer: 16 ms
Buffer: 16 ms
Buffer: 16 ms
Buffer: 15 ms
Buffer: 16 ms

Абсолютная разница, разумеется не велика, но полтора порядка и "не экономит процессор" - не одно и то же.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681308
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrovichtim, я думаю что собака порылась в имплементации java.util.zip.ZipCoder.
Она скорее всего отличается от Sun-овской и причину ругани уборщика мусора
надо искать там.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681420
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЗапускаем несложный тест:
Абсолютная разница, разумеется не велика, но полтора порядка и "не экономит процессор" - не одно и то же.
Это не тот тест. Побайтовое копирование заверни в BufferedReader + BufferedWriter.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681495
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто не тот тест. Побайтовое копирование заверни в BufferedReader + BufferedWriter.В тесте одинаково всё, кроме числа вызовов функции read().
Количество (не)буферированых чтений/записи - одинаково, т.к. определяется потрохами System.in/System.out.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681502
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВ тесте одинаково всё, кроме числа вызовов функции read().
Количество (не)буферированых чтений/записи - одинаково, т.к. определяется потрохами System.in/System.out.
"Няня, я у них поел."
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681527
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел привести соображения, очевидные из общей эрудиции и банальной логики, но передумал.
буферированый ввод-вывод, побайтовое копирование
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;

public class test {
  public static void main( String[] args ) throws IOException {
    final int BUF_SIZE = 4*1024;
    BufferedInputStream in = new BufferedInputStream( System.in, BUF_SIZE );
    BufferedOutputStream out = new BufferedOutputStream( System.out, BUF_SIZE );
    int i;
    long start = System.nanoTime();
    while ( -1 < ( i = in.read() ) ) out.write( i );
    System.err.println( "By byte: " + (System.nanoTime() - start + 500000) / 1000000 );
  }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
By byte: 417
By byte: 413
By byte: 418
By byte: 414
By byte: 415
By byte: 415
By byte: 416

Ну отыграли ~200 миллисекунд (около трети) - толку-то, если более короткий код продолжает оставаться на полтора порядка быстрее.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681535
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНу отыграли ~200 миллисекунд (около трети) - толку-то, если более короткий код продолжает оставаться на полтора порядка быстрее.
Он не более короткий. 4 секунды на каждые 100Мб. Тоже самое что я написал выше. На фоне IO задержек это ничто. Хотя вынужден признать, что для Android имеет смысл таким образом поэкономить батарею.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681538
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в четырёх секундах на сто мегабайт.
Дело в бездумном транжирстве проца.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681554
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovДело не в четырёх секундах на сто мегабайт.
Дело в бездумном транжирстве проца.
:D перегреется бедный.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681566
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov, Blazkowicz,

Оба подхода имеют право быть

BufferTest.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
package buffertest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import static java.lang.System.nanoTime;
import static java.lang.System.out;

public class BufferTest {
    
    private static final String
            PATH     = "C:\\Documents and Settings\\User\\Рабочий стол\\",
//            FILE_IN  = PATH +  "in.txt",
//            FILE_IN  = "D:\\Музыка\\J26 - Fallen.mp3",
            FILE_IN  = "F:\\CON4513_mp4_4513_001.mp4",
            FILE_OUT = PATH + "out.mp3";

    private static final long MB = 1024 * 1024;

    public static void main(String[] a) throws IOException {
        File file = new File(FILE_IN);
        out.println(("FILE_IN: " + FILE_IN + "\nsize : ") + file.length() / MB + " Mb");

//        handMadeBuffer();
//        standartlibraryBuffer();

        for (int i = 0; ++i < 20; handMadeBuffer()) {}
        out.println();
        for (int i = 0; ++i < 20; standartlibraryBuffer()) {}
    }

    private static void handMadeBuffer() throws IOException {
        long time = nanoTime();

        try (
                InputStream  is = new FileInputStream(FILE_IN);
                OutputStream os = new FileOutputStream(FILE_OUT)
            )
        {
//            byte[] buffer = new byte[4 * 1024];
            byte[] buffer = new byte[8 * 1024];
            for (int readed; (readed = is.read(buffer)) > -1;) {
                os.write(buffer, 0, readed);
            }
        }

        time = nanoTime() - time;
        out.printf("handMadeBuffer        :%8.3f sec\n", time / 1e9);
    }

    private static void standartlibraryBuffer() throws IOException {
        long time = nanoTime();

        try (
                InputStream  is = new BufferedInputStream(new FileInputStream(FILE_IN));
                OutputStream os = new BufferedOutputStream(new FileOutputStream(FILE_OUT))
            )
        {
            for (int readed; (readed = is.read()) > -1;) {
                os.write(readed);
            }
        }

        time = nanoTime() - time;
        out.printf("standartlibraryBuffer :%8.3f sec\n", time / 1e9);
    }
}


size : 10 Mb
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
handMadeBuffer        :   0,031 sec
handMadeBuffer        :   0,034 sec
handMadeBuffer        :   0,034 sec
handMadeBuffer        :   0,031 sec
handMadeBuffer        :   0,031 sec
handMadeBuffer        :   0,030 sec
handMadeBuffer        :   0,030 sec
handMadeBuffer        :   0,029 sec
handMadeBuffer        :   0,028 sec
handMadeBuffer        :   0,027 sec
handMadeBuffer        :   0,026 sec
handMadeBuffer        :   0,025 sec
handMadeBuffer        :   0,025 sec
handMadeBuffer        :   0,026 sec
handMadeBuffer        :   0,023 sec
handMadeBuffer        :   0,023 sec
handMadeBuffer        :   0,025 sec
handMadeBuffer        :   0,024 sec
handMadeBuffer        :   0,023 sec

standartlibraryBuffer :   0,531 sec
standartlibraryBuffer :   0,520 sec
standartlibraryBuffer :   0,472 sec
standartlibraryBuffer :   0,485 sec
standartlibraryBuffer :   0,472 sec
standartlibraryBuffer :   0,484 sec
standartlibraryBuffer :   0,477 sec
standartlibraryBuffer :   0,482 sec
standartlibraryBuffer :   0,195 sec
standartlibraryBuffer :   0,198 sec
standartlibraryBuffer :   0,205 sec
standartlibraryBuffer :   0,197 sec
standartlibraryBuffer :   0,199 sec
standartlibraryBuffer :   0,212 sec
standartlibraryBuffer :   0,198 sec
standartlibraryBuffer :   0,197 sec
standartlibraryBuffer :   0,200 sec
standartlibraryBuffer :   0,201 sec
standartlibraryBuffer :   0,208 sec

size : 311 Mb
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
handMadeBuffer        :  37,425 sec
handMadeBuffer        :  35,660 sec
handMadeBuffer        :  37,993 sec
handMadeBuffer        :  35,417 sec
handMadeBuffer        :  42,817 sec
handMadeBuffer        :  39,307 sec
handMadeBuffer        :  40,384 sec
handMadeBuffer        :  40,191 sec
handMadeBuffer        :  42,184 sec
handMadeBuffer        :  42,272 sec
handMadeBuffer        :  44,310 sec
handMadeBuffer        :  46,982 sec
handMadeBuffer        :  41,124 sec
handMadeBuffer        :  42,509 sec
handMadeBuffer        :  43,647 sec
handMadeBuffer        :  44,751 sec
handMadeBuffer        :  53,871 sec
handMadeBuffer        :  39,096 sec
handMadeBuffer        :  44,394 sec

standartlibraryBuffer :   8,793 sec
standartlibraryBuffer :   8,664 sec
standartlibraryBuffer :  47,413 sec
standartlibraryBuffer :   8,979 sec
standartlibraryBuffer :  33,645 sec
standartlibraryBuffer :   8,139 sec
standartlibraryBuffer :  34,492 sec
standartlibraryBuffer :   7,243 sec
standartlibraryBuffer :   7,434 sec
standartlibraryBuffer :  34,293 sec
standartlibraryBuffer :   8,681 sec
standartlibraryBuffer :  40,505 sec
standartlibraryBuffer :   9,130 sec
standartlibraryBuffer :  36,645 sec
standartlibraryBuffer :   8,807 sec
standartlibraryBuffer :  36,239 sec
standartlibraryBuffer :   8,630 sec
standartlibraryBuffer :  42,663 sec
standartlibraryBuffer :   8,305 sec

...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681580
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зря смеётесь - я зарядил эти же тесты, но с реальной записью, а не в /dev/nul.
Сказать, что (уже буферированое) побайтовое копирование сосёт - ничего не сказать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
contig -n zero 1000000000
for %A in ( 1 2 ) do @for /l %B in ( 0 1 6 ) do @java -server test%A < zero
> zero-%A.out
Buffer: 22494
Buffer: 11088
Buffer: 21866
Buffer: 10926
Buffer: 22494
Buffer: 11034
Buffer: 15590
By byte: 79758
By byte: 83460
By byte: 85685
By byte: 84293
By byte: 84643
By byte: 84463
By byte: 84433

Когда идёт вторая половина тестов (by byte) WMP начинает заикаться, бедняга. На двухпроцессорном дескопе с шестью гигабайтами ОЗУ.
Было бы меньше памяти или файл оказался больше - заикался бы не только на первой вычитке .
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно а есть дизассемблер для Google-JVM bytecode?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681728
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Корпорация добра" изобрела собственный байт-код?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681732
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

ДА.

А ты НЕ ЗНАЛ?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681822
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИнтересно а есть дизассемблер для Google-JVM bytecode?dex2jar + jd
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681836
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net, сириец! Братэллова. Ну это как гланды удалить через задний проход

Кстати интересно сделать

Код: java
1.
dex2jar myFuckenDex.dex | jar2dex | dex2jar | jar2dex ...



Мега-обсускация? Архиватор бабушкина? Аттрактор?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681856
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА ты НЕ ЗНАЛ? Не интересовался.
Если за пару лет ситуация не изменилась кардинально, то лучше бы не изобретали
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681922
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю что аргументом были деньги.

Money talks, bullshit walks
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681943
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не столько деньги, сколько "пусть плохонькое, но своё".
Тем более, что (если не надоест) - со временем допилят.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38681967
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и если я правильно понял первые ссылки из I-net, в отличие от FORTH-подобной (стековой) архитектуры в Sun JVM, используется архитектура на регистрах. Потенциально проще обеспечить спекулятивное выполнение и JIT компиляцию. Но это в теории. А на практике, как я понимаю из данного топика, все как всегда.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682118
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непомню где, кажется, в книжке по Lisp, попадолось примерно такое: "человек, зарубивший стековую архитектуру, был сослан во внутрифирменный аналог сибирских лагерей".
Виртуальная Lisp-машина была регистровой и прозрачно имитировала реальную IBM-овскую железку.
С тех пор техника оперативной компиляции шагнула далеко вперёд и минимально образованные люди не должны были использовать регистры "во имя эффективности".
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682127
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНу и если я правильно понял первые ссылки из I-net, в отличие от FORTH-подобной (стековой) архитектуры в Sun JVM, используется архитектура на регистрах. Потенциально проще обеспечить спекулятивное выполнение и JIT компиляцию. Но это в теории. А на практике, как я понимаю из данного топика, все как всегда.
Вроде же в Hotspot, как раз, стековая архитектура. А вот в Dalvik "регистровая". Разве нет?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682131
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласно тем самым "первым ссылкам в I-net" - именно так: "корпорация добра" выпендрилась с регистровым вариантом, но неудачно.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682133
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квотирую чё там пишет педивикия.

Dalvik оптимизирован для низкого потребления памяти, это нестандартная регистр-ориентированная виртуальная машина, хорошо подходящая для исполнения на RISC-архитектурах процессоров, часто используемых в мобильных и встраиваемых устройствах, таких, как коммуникаторы и планшетные компьютеры. Большинство виртуальных машин, используемых в настольных системах, являются стек-ориентированными, включая стандартную виртуальную машину Java от Oracle.

Программы для Dalvik пишутся на языке Java. Несмотря на это, стандартный байт-код Java не используется, вместо него Dalvik VM исполняет байткод собственного формата. После компиляции исходных текстов программы на Java (при помощи javac) утилита dx из «Android SDK» преобразует .class файлы в формат .dex, пригодный для интерпретации в Dalvik.

В версиях выше Android 4.4 Kitkat, имеется возможность переключиться с Dalvik на более быстрый ART (android runtime).
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682137
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему Dalvik это Dalvik. А HotSpot это "Java от Oracle".
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем дальше в лес - тем толще патриоты. Еще какой-то ART появился.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682145
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ART is a new Android runtime
Всё как обычно: сделали - не получилось, запилили новое, несовместимое со старым, но с новыми проблемами.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682153
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю Далвик и Арт будут болтаться в устройстве параллельно. Что вобщем
ужасно скажется на любителях поиграться в смартфончики. Будет много вопля и плача
дескыть - 4.4 уже не Торт! Верните старый! Железяка тормозит!
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682155
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не думаю, что сосуществование это трагедия.
А вот появление нового означает, что старую фишку сделали так плохо, что не видят перспектив развития - проще замазать, чем отскрести.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682164
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovВсё как обычно: сделали - не получилось, запилили новое, несовместимое со старым, но с новыми проблемами.
Чёйта несовместимое? На вход старый-добрый dex байткод телефончик его ahead-of-time компилирует в native. C native уже работает.
Или я не прав?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682167
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне больше нравится методология работы

.class => DEX ==> OAT (dex2oat)

побольше перекодировок, хороших и разных.

mayton...
Мега-обсускация? Архиватор бабушкина? Аттрактор?
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682185
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы смешно когда после .class => dex => .class мы бы получили байткод меньшего размера
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682422
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkИли я не прав?Прав. "Но есть ньюанс".
Если Dalvik такой хороший, а dex такой правильный - почему появился ART/AOT?
Байт код "классической" JVM, в общем-то, не слишком изменился - масса вещей сделаны на уровне компилятора и библиотек. Очень многое - с сохранением полной обратной совместимости.
Причём разработчикам Dalvik-а все эти возможности были вполне доступны. Включая альтернативные реализации JVM/RT с открытыми исходными текстами и, вероятно, вполне либеральными лицензиями.
Но ведь выпендрились и "ну не шмогла я, мужик, не шмогла".

P.S. Та же IBM не стала выёживаться, хотя делала и делает собственную JVM/JIT.
Тот же MS - выпендрился.
...
Рейтинг: 0 / 0
Сборщик мусора тормозит
    #38682448
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dalvik и JVM это как две стороны медали. Как Инь/Янь. Обе - крайности вобщем-то.
Но JVM вышла в 96м году и к слову сказать мало изменилась. По ревизиям заголовков
.class файлов их было всего 8 штук.
...
Рейтинг: 0 / 0
59 сообщений из 59, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Сборщик мусора тормозит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]