powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сборщик мусора тормозит
25 сообщений из 59, страница 2 из 3
Сборщик мусора тормозит
    #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
25 сообщений из 59, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Сборщик мусора тормозит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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