powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
448 сообщений из 448, показаны все 18 страниц
Java 8 - уже не совсем Java?
    #39148485
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вполне такой себе приличный язычок программирования, с которым можно жить...

Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности, и вроде бы уже можно попрограммировать чего-то!

Я сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.

Прогресс налицо!

Гай Стил, I love you!

----
Читал хинты оракла. Много думал...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148514
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА вполне такой себе приличный язычок программирования, с которым можно жить...
Да, я ссылок на методы много лет ждал. Теперь появился новый способ переиспользовать код не плодя при этом тонны фигурных скобок.

MasterZivClosable

Since 1.5 :)
AutoClosable - Since 1.7

MasterZivавтоматическое распараллеливание

Ага. И при этом плохо управляемое.

MasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.
Тоже тащусь уже несколько месяцев.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148661
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.
А можно код увидеть ? Хочется проникнуться вместе с вами :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148662
Фотография JonnySKS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы тоже хотел посмотреть.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148669
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, всё. Пропал Илья. Стал на скользкую дорожку...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148672
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148673
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netkorshun, JonnySKS,

http://www.leveluplunch.com/java/examples/count-distinct-word-occurrences-in-file/ ps этот из гугла
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39148737
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korshunMasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.
А можно код увидеть ? Хочется проникнуться вместе с вами :)

пошою, конечно...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149085
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обещаный код.

Код: 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.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import static java.lang.System.out;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.Collector;

public class Main
{
    public static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";

    static void printDictionary(String name, Map<String, Integer> c)
    {
        if (c.isEmpty())
            out.printf("Dictionary '%s' is empty.\n", name);
        else
        {
            Iterator<String> i = c.keySet().iterator();
            out.printf("Dictionary '%s':\n", name);
            while (i.hasNext())
            {
                String k = i.next();
                out.printf("\t%s[%s] == %d\n", name, k, c.get(k));
            }
        }
    }

    public static void main(String[] args)
    {
        try
        {
            //Map<String, Integer> words =
            printDictionary( "words",
                    Files.lines(Paths.get("text.txt"))
                    .filter( s -> !s.isEmpty() )
                    .flatMap( (String s) -> Arrays.stream( s.split(WORD_DELIMITERS_REGEX) ) )
                    .filter( s -> !s.isEmpty() )
                    .map( String::toLowerCase )
                    .collect(
                            Collectors.toMap(
                                                k -> (String)k,
                                                k -> new Integer(1),
                                                (Integer v1, Integer v2) -> new Integer( v1.intValue() + v2.intValue() )
                                            )
                            )
            );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149097
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Если уж использовать Java 8, то только на полную катушку
Код: 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.
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

import static java.lang.System.out;

public class Main {
    public static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";

    static void printDictionary(String name, Map<String, Integer> c) {
        if (c.isEmpty()) {
            out.printf("Dictionary '%s' is empty.\n", name);
        } else {
            out.printf("Dictionary '%s':\n", name);
            c.forEach((word, count) -> out.printf("\t%s[%s] == %d\n", name, word, count));
        }
    }

    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {
            printDictionary("words",
                    reader.lines()
                            .filter(line -> !line.isEmpty())
                            .flatMap(line -> Arrays.stream(line.split(WORD_DELIMITERS_REGEX)))
                            .filter(word -> !word.isEmpty())
                            .map(String::toLowerCase)
                            .collect(
                                    Collectors.toMap(
                                            word -> word,
                                            word -> 1,
                                            (count1, count2) -> count1 + count2
                                    )
                            )
            );
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149107
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воинствующий во мне бюрократ не удержался и накатил патчик.
Код: 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.
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;

public class Main
{
    public static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";

    static void printf(String format,Object ...args){
        System.out.printf(format,args);
    }

    static void printDictionary(String name, Map<String, Integer> c)
    {
        if (c.isEmpty())
            printf("Dictionary '%s' is empty.\n", name);
        else
        {
            // Mayton: refactoring with Map.Enty
            Iterator<Map.Entry<String,Integer>> i = c.entrySet().iterator();
            printf("Dictionary '%s':\n", name);
            while (i.hasNext())
            {
                Map.Entry<String,Integer> entry = i.next();
                printf("\t%s[%s] == %d\n", name, entry.getKey(), entry.getValue());
            }
        }
    }

    public static void main(String[] args)
    {
        try
        {
            //Map<String, Integer> words =
            printDictionary("words",
                    // Mayton: I've got a charset error during process mixed-encoded files.
                    Files.lines(Paths.get("text-utf8.txt"), Charset.forName("utf-8"))
                            .filter(s -> !s.isEmpty())
                            // TODO: (mayton) Get rid String::split (with regexps). Apache Commons Utils 'split()' is better.  
                            .flatMap((String s) -> Arrays.stream(s.split(WORD_DELIMITERS_REGEX)))
                            .filter(s -> !s.isEmpty())
                            .map(String::toLowerCase)
                            .collect(
                                    Collectors.toMap(
                                            k -> (String) k,
                                            k -> 1,
                                            // Mayton: I do not know what is it, but autoboxing is works!
                                            (Integer v1, Integer v2) -> (v1 + v2)
                                    )
                            )
            );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149108
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пока писал кто-то уже опередил.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149143
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автоматическое распараллеливание
Можно спросить - что под этим подразумевается ?
Выполнение в несколько потоков?
Выполнение на нескольких компьютерах ?
В этом коде распараллеливание где-то происходит?
В какой строке?

На С++ та же задача вычисляется за то же время или быстрее/медленнее ?
Понятно, что это тест, но на мой вкус, подсчет частоты слов - вообще для SQL сервера задача.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149149
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное речь идёт о Collections.parallelStream и ему подобном API. Но у меня
есть сомнения что это будет полезно для 99% софта. Он практически весь - последовательный
по своей природе. А оставшийся один процент надо еще суметь правильно распараллелить.
Старик Амдал хохочет над нами.

Практически сегодня когда говорят о параллелизме в Java-development - подразумевают
способность задачи прогружаться в контейнеры Hadoop или Spark. Со всеми вытекающими.
Тоесть и датасорс тоже должен параллелиться. Лежать на специальных БД или в специальных ФС.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149155
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Спасибо, вот и я о том же подумал: "а как же данные?"
а оно вон как оказывается - HDFS же :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149175
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Чтоб гонять параллельные алгоритмы - HDFS не обязателен.
Но если взять наш конкретный пример - чтение текста с подсчётом
слов то ему опция параллелизма не даёт ничего.

Пожалуй если мы "Войну и Мир.txt" прогрузим в heap - возможно
и будет какой-то выигрыш но сам момент этой загрузки всё равно - последовательный
и мы будем заниматься самообманом, рассказывая всем что
сумели распараллелить задачу.

P.S. Старый Джин помер 10 ноября 2015 года. И теперь смеётся над нами
уже из могилы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149239
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ART-CODEавтоматическое распараллеливание
Можно спросить - что под этим подразумевается ?
Выполнение в несколько потоков?
Выполнение на нескольких компьютерах ?
В этом коде распараллеливание где-то происходит?
В какой строке?

На С++ та же задача вычисляется за то же время или быстрее/медленнее ?
Понятно, что это тест, но на мой вкус, подсчет частоты слов - вообще для SQL сервера задача.

в этом уже нет параллельного вычисления.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149442
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНаверное речь идёт о Collections.parallelStream и ему подобном API. Но у меня
есть сомнения что это будет полезно для 99% софта. Он практически весь - последовательный
по своей природе. А оставшийся один процент надо еще суметь правильно распараллелить.
Старик Амдал хохочет над нами.

Практически сегодня когда говорят о параллелизме в Java-development - подразумевают
способность задачи прогружаться в контейнеры Hadoop или Spark. Со всеми вытекающими.
Тоесть и датасорс тоже должен параллелиться. Лежать на специальных БД или в специальных ФС.
+-
в том смысле, что "не совсем Java", как и С++ уже "не совсем C++"
(А Хадуп, СПАРК и тп - это мимо кассы в данном моменте.)
Амдал хохочет, это да, причем и громко и сочно.
Но там где "зашитый" параллеллизм сейчас вьют, со всем уважением к Амдалу, думают об опечалившемся Муре - уперлась производительность транзисторов в 3 Мгц без водяного охлаждения и 5 Мгц с ним.
Потому Мур теперь живет методом удвоения числа процессорных ядер.

Это подстава, которую надо чем-то грузить, чтобы хоть как-то оправдать потраченные покупателем деньги на смартфона последней модели.
Вот оно и прорастаем многоветочно, то в виде parallelStram, то в виде compleatableFuture.

Это совсем другое программирование. Оно, конечно, чистосердечное большое спасибо за сокрытие всех кишков в обновленных рантаймах и вновь переписанных библиотеках.
Приседец здесь в том, что даже метод сокрытия алгоритмов в целях обеспечения "безопасного" языка не гарантирует правильности результата, который будут формировать те три исключительно красивые строчки, от которых неделями будет тащиться сотворивший их автор.
Даже если тебе на кухне запретили пользоваться ножами и топорами, выдав вместо них электрическую мясорубку, желательно все же понимать, что в ея нутре тоже есть ножи и совать в нея пальцы вместе с мясом не рекомендуется.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149512
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.

Код: 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.
import static java.lang.System.out;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;

public class Main
{
    static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";
    static final ArrayList<String> nonWords = new ArrayList<>( Arrays.asList("-", "–") );

    static void printDictionary(String name, Map<?, ?> c) // функция не используется.
    {
        out.printf( c.isEmpty() ? "Dictionary '%s' is empty.\n" : "Dictionary '%s':\n", name);
        c.forEach( (k,v) -> out.printf("\t%s[%s] == %d\n", name, k, v ) );
    }

    static void printDictionarySortedByValue(String name, Map<?, Integer> c)
    {
        out.printf( c.isEmpty() ? "Dictionary '%s' is empty.\n" : "Dictionary '%s':\n", name);
        c.entrySet()
         .stream()
         .sorted( (e1, e2) -> e2.getValue()-e1.getValue() )
         .forEach( e -> out.printf("\t%s[%s] == %d\n", name, e.getKey(), e.getValue() ) );
    }

    public static void main(String[] args)
    {
        try
        {
            //Map<String, Integer>
            printDictionarySortedByValue( "words",
                    Files.lines(Paths.get("text.txt"))
                    .flatMap( s -> Arrays.stream( s.split(WORD_DELIMITERS_REGEX) ) )
                    .filter( s -> !s.isEmpty() && !nonWords.contains(s) )
                    .map( String::toLowerCase )
                    .collect( Collectors.toMap( k -> k, k -> 1, (v1, v2) -> v1 + v2 ) )
            );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149530
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллективный разум зудит во мне...

Код: java
1.
static final List<String> nonWords = Arrays.asList("-", "–");
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149567
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.
Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149590
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.
Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду.

Форматирование не моё лубимое кое-где, но -- да, Java-style я лично не приемлю вообще никак.
Так что если про это -- идите в пень.

Про код -- пиши, пожалуйста.
Это не rocket science, а эксперементальная программулька.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149592
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКоллективный разум зудит во мне...

Код: java
1.
static final List<String> nonWords = Arrays.asList("-", "–");



Ну, и чё он зудит-то ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149614
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton // Mayton: I do not know what is it, but autoboxing is works!
(Integer v1, Integer v2) -> (v1 + v2)

Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149615
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivФорматирование не моё лубимое кое-где, но -- да, Java-style я лично не приемлю вообще никак.
Убрал переносы - ещё не значит сделал код короче.
MasterZivТак что если про это -- идите в пень.
Взаимно.
MasterZivПро код -- пиши, пожалуйста.
Это не rocket science, а эксперементальная программулька.
Ок. Зачем такая заумная регулярка вместо \p{Punct}, \w, \s?
Зачем собирать в мапу, чтобы потом снова конвертить её в стрим?
Инлайнить огромные куски кода в аргумент это не красиво и не удобно для отладки.
Зачем плодить новый Stream для каждой строки, если можно было бы сразу парсить текст на слова и стримить (Scanner, Splitterator, StreamSupport)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149621
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Collectors.toMap со слиянием имеет смысл для parallel stream.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149627
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю
Скорее всего, mayton имел ввиду вопрос "Чо эта за merge такой и нафига он нужен для создания Map".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149632
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczCollectors.toMap со слиянием имеет смысл для parallel stream.
Гоню. merge нужен для не уникальных значений в stream вообще. К Fork/Join это прямого отношения не имеет. Хотя метод и может быть использован как join.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149636
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОк. Зачем такая заумная регулярка вместо \p{Punct}, \w, \s?

А, это во-первых, подбирал под конкретный текст, во-вторых,
сразу сделал с метасимволами, почему-то оно не сработало, но
я не разбирался в деталях, почему.

Да, может можно попроще, но там же смесь из как минимум двух языков -- русского и французского,
так что есть специфика.



авторЗачем собирать в мапу, чтобы потом снова конвертить её в стрим?

Это странное замечание, собирать -- чтобы посчитать кол-во повторений слов.
Затем заново конвертить в стрим -- чтобы отсортировать по частоте слова и распечатать в таком
виде.

авторИнлайнить огромные куски кода в аргумент это не красиво и не удобно для отладки.

Да ладно, фигня всё это.

авторЗачем плодить новый Stream для каждой строки, если можно было бы сразу парсить текст на слова и стримить (Scanner, Splitterator, StreamSupport)


Это вообще не понял, где там для каждой строки стрим ?
В смысле, не порождать стрим из стрима, а делать вложенные обработки в нескольких стримах ?
Ну, а какая разница-то ?
Мне было интересно именно разобрать операции, вычисляющие всё как бы "в одном потоке".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149693
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

У тебя N+2 стрима. Один стрим строк файла, один стрим для печати Map и N стримов слов для каждого слова в каждой строке.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149722
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMasterZiv,

У тебя N+2 стрима. Один стрим строк файла, один стрим для печати Map и N стримов слов для каждого слова в каждой строке.

Я это вполне понимаю.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149728
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ это вполне понимаю.
Ну и зачем их так много, если всё одним можно прогнать?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149734
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMasterZivЯ это вполне понимаю.
Ну и зачем их так много, если всё одним можно прогнать?

Ну, покажи, как.

А вообще, там стримы от split-а возникают для каждой строки исходного файла и после влития в основной
стрим удаляются.

javadoc on flatMap * Returns a stream consisting of the results of replacing each element of
* this stream with the contents of a mapped stream produced by applying
* the provided mapping function to each element. Each mapped stream is
* {@link java.util.stream.BaseStream#close() closed} after its contents
* have been placed into this stream. (If a mapped stream is {@code null}
* an empty stream is used, instead.)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149740
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу, покажи, как.

В регулярное выражение добавляешь перенос строки и скармливаешь его сканеру.
Из сканера делаешь стрим
http://stackoverflow.com/a/29611792
Получаешь стрим слов и считаешь себе.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149754
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Ок, попробую...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149804
Арктур Менгск
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyуперлась производительность транзисторов в 3 Мгц без водяного охлаждения и 5 Мгц с ним
а чо так мало-то ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149837
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Арктур Менгск...
а чо так мало-то ?
дык оно не мало. Три порядка - да - сквозь пальцы просыпались, вот и приехало на печать, то, что осталось.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149901
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньевmayton // Mayton: I do not know what is it, but autoboxing is works!
(Integer v1, Integer v2) -> (v1 + v2)

Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю
Я не про автобоксинг. Я про аккумулирование суммы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149912
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmaytonКоллективный разум зудит во мне...

Код: java
1.
static final List<String> nonWords = Arrays.asList("-", "–");



Ну, и чё он зудит-то ?
Один конструктор вроде-бы был лишний. И интерфейс List - более usable в будущем.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149920
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тему поднимал http://www.sql.ru/forum/1176249/hadoop-obshhie-voprosy (тему про тюториалы с Хадуп)

Вобщем... я забил на нее большой болт т.к. был увлечён своими рабочими
вопросами но щас пока пару недель я на bench -
появилась возможность поразбираться с этим слоном.

Как только у меня взлетит тестовая среда - я задачу Ильи попробую там
закодить чтобы сравнить подходы.

Правда возможно мне придётся Войну и Мир разбить на части если этот
бородатый пейсатель не сделал это раньше за меня

P.S. HDFS block = 128 Mb (OMG!)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149927
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.
Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду.
От-жеж бухтелка :). Тебя в Нетбинсе зобанили? Ну можно побыть толерантным к code-style ну йомайо...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149944
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОт-жеж бухтелка :). Тебя в Нетбинсе зобанили? Ну можно побыть толерантным к code-style ну йомайо...
Это не style, это лень. Выше ведь был более-менее нормальный код. И тут на те - сделал код короче - убрал переносы строки.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149997
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMasterZivпропущено...


Ну, и чё он зудит-то ?
Один конструктор вроде-бы был лишний. И интерфейс List - более usable в будущем.

Не понял нифига...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149998
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ тему поднимал http://www.sql.ru/forum/1176249/hadoop-obshhie-voprosy (тему про тюториалы с Хадуп)

Вобщем... я забил на нее большой болт т.к. был увлечён своими рабочими
вопросами но щас пока пару недель я на bench -
появилась возможность поразбираться с этим слоном.

Как только у меня взлетит тестовая среда - я задачу Ильи попробую там
закодить чтобы сравнить подходы.

Правда возможно мне придётся Войну и Мир разбить на части если этот
бородатый пейсатель не сделал это раньше за меня

P.S. HDFS block = 128 Mb (OMG!)

Война и Мир очень маленькая для таких экспериментов, надо что-то повесомее.
Типа википерии.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150333
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВойна и Мир очень маленькая для таких экспериментов, надо что-то повесомее.
Типа википерии.
У меня где-то был Либрусек. Несколько гигов. Правда - формат fb2. Перед употреблением
нужно чистить от шелухи в виде тегов. Хотя возможно в рамках подсчёта слов это почти
не мешает.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150337
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmaytonпропущено...

Один конструктор вроде-бы был лишний. И интерфейс List - более usable в будущем.

Не понял нифига...
А забей. Я весь 2012 год провёл в code-review и рефакторингах. И привык машинально
фиксить тонны Java-строк.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150886
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
типа так ?

Код: 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.
import static java.lang.System.out;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public class Main
{
    static final String WORD_DELIMITERS_REGEX = "[\\s \\t,.?!:;\"()\\[\\]«»…]+";
    static final ArrayList<String> nonWords = new ArrayList<>( Arrays.asList("-", "–") );

    static void printDictionary(String name, Map<?, ?> c)
    {
        out.printf( c.isEmpty() ? "Dictionary '%s' is empty.\n" : "Dictionary '%s':\n", name);
        c.forEach( (k,v) -> out.printf("\t%s[%s] == %d\n", name, k, v ) );
    }

    static void printDictionarySortedByValue(String name, Map<?, Integer> c)
    {
        out.printf( c.isEmpty() ? "Dictionary '%s' is empty.\n" : "Dictionary '%s':\n", name);
        if( !c.isEmpty() )
            out.printf( "distinct words %d, total words %d\n", c.size(), c.values().stream().reduce( (c1, c2) -> c1 + c2 ).orElse(0) );
        c.entrySet().stream().sorted( (e1, e2) -> e2.getValue()-e1.getValue() )
                .forEach( e -> out.printf("\t%s[%s] = %d\n", name, e.getKey(), e.getValue() ) );
    }

    public static void main(String[] args)
    {
        try(InputStream is = new FileInputStream(args[0]);
            Scanner sc = new Scanner(is).useDelimiter(WORD_DELIMITERS_REGEX);
            Stream<String> word_stream = StreamSupport.stream( Spliterators.spliterator(sc, 1, 0), false)
            )
        {
            Map<String, Integer> words = word_stream.filter( s -> !s.isEmpty() && !nonWords.contains(s) )
                                                    .map( String::toLowerCase )
                                                    .collect( Collectors.toMap( k -> k, k -> 1, (v1, v2) -> v1 + v2 ) );
            printDictionarySortedByValue( "words", words );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150888
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, ещё бы ненужный
Код: java
1.
public class Main


выпилить, вообще классно бы стало.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150919
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭх, ещё бы ненужный
Код: java
1.
public class Main


выпилить, вообще классно бы стало.
Меня поначалу тоже удивляло что точка входа main() всегда обёрнута в class.
Я думаю что это вежливый "реверанс" в сторону работы classloader-а.

Но можно попробовать скрипы Groovy или Scala. Там требования к формализму
будут помягче.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150941
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код выглядит не очень, мягко говоря.

см. аналогичный пример из учебника на D
https://dlang.org/wc.html

Код: plaintext
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.
import std.stdio;
import std.algorithm;

int main(string[] args)
{
    ulong wordCount;
    ulong lineCount;
    ulong charCount;

    int[string] dictionary;
    writeln("   lines   words   bytes file");

    foreach(arg; args[1 .. args.length])
    {
        ulong lWordCount;
        ulong lCharCount;
        ulong lLineCount;

        auto file = File(arg);
        foreach(line; file.byLine(KeepTerminator.yes))
        {
            lCharCount += line.length;
            foreach(char[] word; splitter(line))
            {
                lWordCount += 1;
                if(auto count = word in dictionary)
                    *count += 1;
                else
                    dictionary[word.idup] = 1;
            }

            lLineCount += 1;
        }

        writefln("%8s%8s%8s %s\n", lLineCount, lWordCount, lCharCount, arg);

        wordCount += lWordCount;
        lineCount += lLineCount;
        charCount += lCharCount;
    }

    if (args.length > 2)
    {
        writefln("--------------------------------------\n%8s%8s%8s total",
                        lineCount, wordCount, charCount);
    }

    writeln("--------------------------------------");

    foreach (word; sort(dictionary.keys))
    {
            writefln("%3s %s", dictionary[word], word);
    }
    return 0;
}


...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150943
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglКод выглядит не очень, мягко говоря.
+1. Но в этом нет вины Java.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150965
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSiemarglКод выглядит не очень, мягко говоря.
+1. Но в этом нет вины Java.
Тогда было бы неплохо посмотреть пример, где аккуратно используются
>Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности
=)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150981
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglТогда было бы неплохо посмотреть пример, где аккуратно используются
>Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности
=)
Ну, мне этот пример сейчас лениво переписывать
Как вариант, могу предложить посмотреть сюда
https://github.com/orengabay/importUsers2OpenLM/blob/master/src/main/java/com/openlm/userimport/Main.java
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39150998
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Это не формализм - это ООП.

И Java - это не только язык, это технология, это jvm для которой существуем масса языков, можете выбрать на любой вкус. И в этом прелесть java, как технологии. Там где мне надо я использую Groovy. Другие любят Scala и .т. д. Я скажу больше. Если бы Groovy был под крылом Oracle, то многие (думаю, что очень многие) стали бы использовать именно его, а не java. Кто серьезно работал с Groovy, знают, что росказни об его неэффективости - это лишь росказни. Может быть кто-то гонится за наносекундами? А заказчика (умного) интересует качество и возможность поддержки того, что мы начудили и внезапно перешли на другую работу. Ни когда не приходилось разобраться с кодом JavaScript, написанным для Node.js с использованием всех этих xxJS (минимум штук 6: jQuery, Require, Backbone, Express и, о боже, еще пару десятков ), где каждая библиотека - это свой язык ( хотя и DSL) ?

Конечно. все, что я выдал - это лишь мое личное мнение.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151004
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Я прибалдел. Это с каких пор Mгц (3 или 5) определяли производительность комп системы? Никто почему то не жаловался на Sun станции, процессоры, которых работали на частоте 500. Это не одно-шинная архитектура, вот и все. Одно-шинность - это изобретение Intel (да, великое), чтобы комп был дешевле и разработка ПО была бы дешевле. И вообще, погоня за тем что "мой код должен быть очень эффективным" - это глупость. Код должен просто работать и, желателно, надежно, а затем его надо оптимизировать. Я всегда смеялся над программерами, которые меня убеждали, что Node.JS велик тем, чно может одновременно держать 10,000 запросов (и всегда добавляли "в отличие от Java"). Я не встревал в теоретические споры (хотя мог бы ответить, что попробуй найти хотя бы одного банкира в здравом уме, который с этим согласится). Но отвечал, что, если бы Ваша система была загружена хотя бы 500 запросами в секунду, то Вы были бы богатыми и счастливыми, а мечтать о 10.000 - это удел серьезной компании (очень серьезной)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151013
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Извините, а при чем здесь C++, Java и .т.д ? Вопрос к ОС. Java просто пытается обернуть то, что умеет конкретная OC в portable API. Когда удачно, а когда нет

Что значит фраза "на c++ вычисляется быстрее или медленнее" ? Когда-то был такой же спор, а какие программы быстрее, те, что на C или те, что на Assembler. Это вопрос типа Э а кто лучще борщ готовит, теща или жена".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151146
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Складываем количества одинаковых слов, в случае если в Map уже есть такое слово.
Можно и просто инкрементировать, но есть шанс потом как-нибудь нарваться на бомбу в изменении реализации.

Как раз unboxing в виде Integer.valueOf(, а не new Integer( создает магию экономии памяти по сравнению с немодальным вариантом Integer.

Есть конечно вариант с аналогичным поведением (до N модальный из прегенеренных, после изменяемый)

Но это надо, чтоб ва встречались очень часто (гораздо больше 128 раз) и по многу.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151149
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭх, ещё бы ненужный
Код: java
1.
public class Main


выпилить, вообще классно бы стало.

Лучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151161
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominЛучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно.

А вот он ответ Блажковичу, утверждавшему, что в Java нет duck typing. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151164
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевAlexey TominЛучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно.

А вот он ответ Блажковичу, утверждавшему, что в Java нет duck typing. :)
Лолшто? Вы о чем вообще?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151170
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Хотя нет, был не прав. Запуск класса класслоадером, это тоже скорее реализация, чем Java, как язык
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151175
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я про то, что стандартный способ описания в Java класса, как запускаемого, идет через наличие у него некоторого метода. И несколько месяцев назад прошедший спор на тему, что в Java duck typing нет, но можно организовать средствами jvm, например, через рефлексию.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151176
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

и да - это была шутка. Я там смайлик поставил.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151194
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery ShiskinЯ прибалдел. Это с каких пор Mгц (3 или 5) определяли производительность комп системы? Никто почему то не жаловался на Sun станции, процессоры, которых работали на частоте 500.
Валерий. Я не уверен что квантор "никто" здесь можно применять. Давайте
этит тезис помножим распространённость Spark и вообще спросим кто его видел
и кто под него чего кодил.

P.S. Вспомнился неуловимый Джо...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151297
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivClosableClosure ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151298
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanMasterZivClosableClosure ?
Вырисовывается у нас тут топик на тему кому чего померещилось.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151299
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151320
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman Efficient Counter in Java

Гонял на 8-ке. По моим впечатлениям, авторы заблуждаются на счет
"Since Integer is immutable, each loop will create a new one for increment the old value"

Поведение при unboxing такое же, как при Integer.valueOf(, т.е. до определенного момента это просто возврат ссылки на ранее сгенерированный instance.

Посему MutableInteger проигрывают по памяти (и генерациям новых instance) при небольших числах.

Пришел к выводу, что надо сделать класс, который immutable, до порога и mutable после при операции увеличения, присвоения. :)

Ну или тупо выдрать код из hashmap и размещать в нем int. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151382
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglКод выглядит не очень, мягко говоря.


Какой код имеется в виду ?

Siemarglсм. аналогичный пример из учебника на D
https://dlang.org/wc.html


Гы, вот как раз это -- пример почти совсем дебильного императивного кода.
Радуют только FOREACH и что ими можно строки в файлах так просто перебирать.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151383
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery Shiskinmayton,

Это не формализм - это ООП.


Нет, это ни то, и ни другое. Это -- дебилизм. ООП головного мозга.
(создателей Java, конечно).
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151390
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про остальные вопросы ко мне -- это не ко мне :-)
Я такого не говорил, не делал, и вообще.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151420
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевПоведение при unboxing такое же, как при Integer.valueOf(, т.е. до определенного момента это просто возврат ссылки на ранее сгенерированный instance.
И что? Для сложения значений всё равно придется распаковывать в примитив.

Сергей АрсеньевПосему MutableInteger проигрывают по памяти (и генерациям новых instance) при небольших числах.

Это очень сильно зависит от задачи. Не всегда нужно много MutableInteger.

Сергей АрсеньевПришел к выводу, что надо сделать класс, который immutable, до порога и mutable после при операции увеличения, присвоения. :)

Эмпирически?

Сергей АрсеньевНу или тупо выдрать код из hashmap и размещать в нем int. :)
Или тупо найти в интернете 100500 реализаций для примитивов.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151563
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСергей АрсеньевПоведение при unboxing такое же, как при Integer.valueOf(, т.е. до определенного момента это просто возврат ссылки на ранее сгенерированный instance.
И что? Для сложения значений всё равно придется распаковывать в примитив.

В том смысле, что (1+1) не генерит новый instance Integer, берется ссылка на ранее сгенеренный.

Другими словами все счетчики значения которых будут в диапазоне от 1 до 128 будут ссылаться на одни и те же instance Integer.

Вот
Код: java
1.
(count1, count2) -> new Integer(count1 + count2)


создаст новый Integer

Что, в определенных пределах значений счетчика экономит память.
Если же счетчик выйдет за диапазон, то на каждую итерацию инкремента, он будет создавать новый Integer и начнет проигрывать изменяемому варианту (по памяти).

Магия чисел. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151568
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто очень сильно зависит от задачи. Не всегда нужно много MutableInteger.

Я про подсчет слов в Войне и мир.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151579
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151582
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал с unsafe (: Так он медленнее java.math.BigInteger'а
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151608
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так чем плохо:
Код: java
1.
2.
Map<String, Long> words = word_stream.filter( s -> !s.isEmpty() && !nonWords.contains(s) )
	.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39151682
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery Shiskin,

автор... Это с каких пор Mгц (3 или 5) определяли производительность комп системы?
Со времен арифмометра Феликс до, как минимум, времен изобретения конвейерных процессорных ядер.

авторНикто почему то не жаловался на Sun станции, процессоры, которых работали на частоте 500. Это не одно-шинная архитектура, вот и все. Одно-шинность - это изобретение Intel (да, великое), чтобы комп был дешевле и разработка ПО была бы дешевле.


Великое изобретение для процессоров с "архитектурой Intel" сделала не Intel, а AMD,
причем тогда, когда Intel уже приняла решение бросить "свои технологии" и уже потратила деньги на выкуп процессорных технологий у HP (в те времена считалось приличном тоном тыкать в Линуса Торвальдса пальцем и приговаривать - смотрите, мол какой чудак, взялся писать новую операционную систему под, ясень пень, уже умершую даже в сознании создателя "технологию Intel").

авторИ вообще, погоня за тем что "мой код должен быть очень эффективным" - это глупость. Код должен просто работать и, желателно, надежно, а затем его надо оптимизировать.

Зачем же его надо "оптимизировать", если "эффективным" - это глупость ?

автор Я всегда смеялся над программерами, которые меня убеждали, что Node.JS велик тем, чно может одновременно держать 10,000 запросов (и всегда добавляли "в отличие от Java"). Я не встревал в теоретические споры (хотя мог бы ответить, что попробуй найти хотя бы одного банкира в здравом уме, который с этим согласится).

Это профессия такая - смеяться над "программерами"?
А про банкиров - таки да - вот днями буквально читал интервью с банкиром, измерявшем эффективность деятельности банковской организации числом реализованных за год заявок на исправление дефектов в программном обеспечении.
Жизнь определенно наладится, когда каждый банкир станет экспертом по Node.JS

авторНо отвечал, что, если бы Ваша система была загружена хотя бы 500 запросами в секунду, то Вы были бы богатыми и счастливыми, а мечтать о 10.000 - это удел серьезной компании (очень серьезной)

про серьезность:
У некоторых пород собак есть специфическая зависимость от хозяина.
Собака физически может помереть, если потеряется сама или потеряет своего хозяина.
У собак эту зависимость называют инфантильностью.
А людей, не только не умеющих, а активно не желающих мечтать о 10.000 называют покорными судьбе.
И людей, не имеющих своей судьбы, и собак, способных жить в изменившихся обстоятельствах, называют независимыми (от судьбы или хозяина).
У меня нет сомнения, что та или иная степень независимости должна быть характерна для любой серьезной компании.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153020
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, хотел всем порекомендовать хорошую презентацию на тему потоков в Java8:

http://www.coreservlets.com/java-8-tutorial/#streams-1
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153376
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Не стоит Stream потоком называть, наверное.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153385
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКстати, хотел всем порекомендовать хорошую презентацию на тему потоков в Java8:

http://www.coreservlets.com/java-8-tutorial/#streams-1
Хорошая презентуха. Как раз освещает то чего не хватает в обзорах восьмёрки.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153425
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего.
Не забывай добавлять IMHO.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153439
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,

Java 2 лучшая, нормально программируется и без всяких дженериков (c)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153497
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего.
так и скажи что ни асилил
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153508
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverMasterZiv,

Не стоит Stream потоком называть, наверное.

а как называть? Ручейком?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153509
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего.


ну, покажи...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153566
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverMasterZiv,

Не стоит Stream потоком называть, наверное.
Критикуя - предлагай.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153569
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего.
Программируется-то нормально. Но очень часто когда я хочу сделать определенную абстракцию, у меня это выливается в кучу анонимных классов и тонны фигурных скобок. И как результат, я всё откатываю и оставляю старый добрый копи-паст.
В Java 8 код можно переиспользовать так же, но синтаксического шума на много меньше.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153583
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне никогда не нравился синтаксис анонимных классов. Особенно эта игра со скобочками типа (...,new ImlClassname{...});
Это сильно ломает зрение и даже code-style с переносами и отступами не помогает избавиться от
ощущения какой-то надуманности. По хорошему лямбды можно было ввести еще в Java 1.1
но очевидно что старые спеки language очень сильно били поклон в сторону архитектуры
самой машины. Тоесть Classloader главенствовал и его выпячивали. Очевидно полагали
что синтаксис языка и инстанциирования классов и интерфейсов должны быть явно показаны.

Особенно анонимосы были уродливы в Swing-овых обработчиках событий. Не знаю как коллегам
а я иногда выносил их в отдельный файл и (субъективно) читаемость становилась лучше.

P.S> Это моё чортово IMHO и оно может быть опасно для вашего душевного спокойствия.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153610
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Мы стримами и зовём, никто не путается.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153613
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczDoSOfRedRiverMasterZiv,

Не стоит Stream потоком называть, наверное.
Критикуя - предлагай.

дык, что-ж тут предлагать.
Сами создатели не рискнули сделать это на внятном английском или путем присваивания не путающего бэкграунд читателя имени.

автор потоками Stream - обыкновенная оговорка, идущая от желания дать сему явлению собственную вычислительную семантику, отличную от безликого class или interface. Что по созвучию автоматически приводит к потоку .

Это не то, чтобы совсем неправильно, как раз, в некотором смысле, правильно - потому что речь идет о канализируемых алгоритмах обработки данных - но это никак не соотносится с уже закрепившимся пониманием потока как источника данных, используемым некоторым алгоритмом.
Поэтому для аккуратного произношения ничего разумней, чем использовать в качестве определения слово интерфейс не остается.
Потому - автор интерфейсами Stream

И чем больше желания дать уточнение сему определению, тем быстрее наступит выход за границы возможного последующего развития идеи Stream.

А совсем не строить такие цепочки определений - тоже не конструктивно.

Возможное продолжение (распространение уточнения определения) может выглядеть так:
автор канализирущими алгоритмы обработки (параллельные в том числе) данных (потоковых в том числе) интерфейсами Stream

Уф. Развернули. Но ни говорить, ни писать так совершенно не возможно.

Программирование не может так выглядеть, и, чтобы состоялось, развернутому определению должно быть дано собственное имя для практического ловкого использования.

Предлагайте.

Именование - не просто стартовая, она главная проблема программирования.
Ты не можешь толком управлять тем, что не можешь назвать.
Это я к тому, что пока имена не определены, но не названными объектами уже пользуются (а иначе их и назвать вряд ли получится), то вполне допустимо, что предложенное имя кем-то другим оценивается как неудачное, его глазами, а удачное еще не придумано.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153614
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverMasterZiv,

Мы стримами и зовём, никто не путается.
+1
мне видится это единственным разумным именем для русского языка на текущий момент.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39153843
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominЛучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно.
Код: sql
1.
public class Main

это процесс, который обязан иметь точку входа и который стартует, как минимум, один поток.
Runnable - это поток.
Это разные сущности, хотя они и используются совместно.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39154090
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovRunnable - это поток.
Это разные сущности, хотя они и используются совместно.
Поток это поток, а Runnableб это запускаемый класс. Потоком или процессом.

Почему запускаемый jvm класс решили описывать по методу duck typing - вот в чем вопрос.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39154105
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевBasil A. SidorovRunnable - это поток.
Это разные сущности, хотя они и используются совместно.
Поток это поток, а Runnableб это запускаемый класс. Потоком или процессом.

Почему запускаемый jvm класс решили описывать по методу duck typing - вот в чем вопрос.
Гослинг не думал об утиных нотациях IMHO.
Просто наследовал идеому из С/C++.

Мы сейчас можем облекать это в красивые словоформы
но думаю всё было проще.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39154108
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyDoSOfRedRiverMasterZiv,

Мы стримами и зовём, никто не путается.
+1
мне видится это единственным разумным именем для русского языка на текущий момент.
На семинарах и конференциях в 99% случаях лектор так и будет делать.
Не давать никакого перевода а просто вводить англоицизм в язык.
И это правильно.

В противном случае получим строки в Oracle которые могут быть как varchar2 так и datarows
в зависимости от контекста высказывания. Или Thread (поток? нить?) против Stream который
тоже может быть внезапно (!) потоком... Вобщем билиберда.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39154279
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе давать никакого перевода а просто вводить англоицизм в язык.
Никогда не понимал, как англоязыкие программируют. Для них это же просто исковерканный язык какой-то.
Наверное поэтому C и стал так популярен - там, в основном, скобочки.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39155930
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевПоток это поток, а Runnableб это запускаемый класс."Верёвка это вервие простое".
Runnable - абстрактный поток: скрытой в деталях "магией реализации" JVM может исполнять код метода run в отдельном потоке.Потоком или процессом.Вы устройство операционных систем почитайте, чтобы дошла разница между потоком и процессом.
То, что изначальный юникс имитировал потоки на процессах - деталь реализации.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39156244
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovRunnable - абстрактный поток:
Это вообще не поток. И никакого отношения к потоку, кроме того, что из потока можно "из коробки" запустить определенный метод этого класса не имеет.
Runnable это спецификация класса имеющего метод для выполнения в период активности не возвращающего значения.
Вот Thread это класс реализующий поток и удовлетворяющий этой спецификации.

Другое дело, что для запуска процесса больше подходит Callable, чем Runnable.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39164770
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со ссылкой на Хабр. Подсчёт слов по шаблонам BigData и фреймворком Spark.

https://habrahabr.ru/company/piter/blog/276675/
Код: java
1.
2.
3.
4.
sparkContext.textFile("hdfs://...")
            .flatMap(line => line.split(" "))
            .map(word => (word, 1)).reduceByKey(_ + _)
            .saveAsTextFile("hdfs://...")
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167546
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копаю stream() в данный момент. Стало интересно можно ли решить подобную задачу:

Допустим есть некая сущность Entity, у нее есть свои поля, id, entityId, список версий и булен флаг active.
Код: 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.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

      public static class Entity {
		String name;
		//номер версии
		int version;
		//все версии одной энтити имеют одинаковый entityId
		int entityId;
		//уникальный айди, все версии всх энтитис имеют различный айди
		int id;
		// только одна версия может быть active
		boolean active;
		//список версий
		List<Entity> versions = new ArrayList<>();
		public Entity(String name, int version, int entityId, int id, boolean active) {
			this.name = name;
			this.active = active;
			this.entityId = entityId;
			this.id = id;
			this.version = version;
		}
	}



Допустим есть сервис, в котором мне возвращается список таких энтитис(ну допустим из базы). Поля версии в этом списке не заполнены.

Код: 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.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Example {

	private static List<Entity> getEntities() {
		List<Entity> entities = new ArrayList<>();
		// entityId = 1, активная
		Entity e = new Entity("A", 1, 1, 1, true);
		entities.add(e);
		// entityId = 1, неактивная
		e = new Entity("B", 2, 1, 2, false);
		entities.add(e);
		// entityId = 1, неактивная
		e = new Entity("C", 3, 1, 3, false);
		entities.add(e);
		// entityId = 2, активная
		e = new Entity("D", 1, 2, 4, true);
		entities.add(e);
		// entityId = 2, неактивная
		e = new Entity("E", 2, 2, 5, false);
		entities.add(e);
		// entityId = 3, активная
		e = new Entity("E", 1, 3, 6, true);
		entities.add(e);
		return entities;
	}
}



Мне надо сгруппировать их таким образом -
создать лист ентитис, в котором будут содержаться только активные, НО все неактивные для данного entitiesId должны попасть в список versions для активной сущности. Вот как это делается для java < 8

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private static List<Entity> groupByVersionJava7(List<Entity> entities) {
		Map<Integer, Entity> map = new HashMap<>();
		// Active может быть только одна entity. Первый проход - инициализируем мапу
		for (Entity e : entities) {
			if (e.active) {
				map.put(e.entityId, e);
			}
		}
		// Второй проход - добавляем версии
		for (Entity e : entities) {
			if (!e.active) {
				map.get(e.entityId).versions.add(e);
			}
		}
		return new ArrayList<>(map.values());
	}



Можно ли это переписать красивее или оптимальнее на java 8 использую stream()?

Полный пример тут -
Код: 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.
74.
75.
76.
77.
78.
79.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Example {

	public static void main(String[] args) {
		List<Entity> entities = getEntities();
		entities  = groupByVersionJava7(entities);
		//entities = groupByVersionJava8(entities);???
	}

	private static List<Entity> groupByVersionJava7(List<Entity> entities) {
		Map<Integer, Entity> map = new HashMap<>();
		// Active может быть только одна entity. Первый проход - инициализируем мапу
		for (Entity e : entities) {
			if (e.active) {
				map.put(e.entityId, e);
			}
		}
		// Второй проход - добавляем версии
		for (Entity e : entities) {
			if (!e.active) {
				map.get(e.entityId).versions.add(e);
			}
		}
		return new ArrayList<>(map.values());
	}
	
	private static List<Entity> groupByVersionJava8(List<Entity> entities) {
		// enttities.stream() ???
		return null;
	}

	private static List<Entity> getEntities() {
		List<Entity> entities = new ArrayList<>();
		// entityId = 1, активная
		Entity e = new Entity("A", 1, 1, 1, true);
		entities.add(e);
		// entityId = 1, неактивная
		e = new Entity("B", 2, 1, 2, false);
		entities.add(e);
		// entityId = 1, неактивная
		e = new Entity("C", 3, 1, 3, false);
		entities.add(e);
		// entityId = 2, активная
		e = new Entity("D", 1, 2, 4, true);
		entities.add(e);
		// entityId = 2, неактивная
		e = new Entity("E", 2, 2, 5, false);
		entities.add(e);
		// entityId = 3, активная
		e = new Entity("E", 1, 3, 6, true);
		entities.add(e);
		return entities;
	}
	
	public static class Entity {
		String name;
		//имя версии
		int version;
		//все версии одной энтити имеют одинаковый entityId
		int entityId;
		//уникальный айди, все версии всх энтитис имеют различный айди
		int id;
		// только одна версия может быть active
		boolean active;
		//список версий
		List<Entity> versions = new ArrayList<>();
		public Entity(String name, int version, int entityId, int id, boolean active) {
			this.name = name;
			this.active = active;
			this.entityId = entityId;
			this.id = id;
			this.version = version;
		}
	}
}



Ваш вариант метода groupByVersionJava8?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167635
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private static java.util.List<Entity> groupByVersionJava8(java.util.List<Entity> entities) {
    java.util.Map<Integer, Entity> map = new java.util.HashMap<>();
    entities.stream().forEachOrdered(e -> {
        if (e.active) {
            map.put(e.entityId, e);
        } else {
            map.get(e.entityId).versions.add(e);
        }
    });
    return new java.util.ArrayList<>(map.values());
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167653
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Никакой особой магии тут не получится реализовать. Всё то же самое:

Код: java
1.
2.
3.
4.
5.
6.
        Map<Integer, Entity> activeMap = entities.stream()
                .filter(e -> e.active)
                .collect(toMap(e -> e.entityId, e -> e));
        entities.stream()
                .filter(e -> !e.active)
                .forEach(e -> activeMap.get(e.entityId).versions.add(e));
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167654
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Сначала отсортировать надо по e.active, иначе будет NPE
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167669
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл ник,

Никакой особой магии тут не получится реализовать. Всё то же самое:

Код: java
1.
2.
3.
4.
5.
6.
        Map<Integer, Entity> activeMap = entities.stream()
                .filter(e -> e.active)
                .collect(toMap(e -> e.entityId, e -> e));
        entities.stream()
                .filter(e -> !e.active)
                .forEach(e -> activeMap.get(e.entityId).versions.add(e));



Ага, вот и я как не крутил, так и не смог в один проход(красиво) сделать:)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167682
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:)
Думаю что можно сделать проще, но с полным перебором для поиска по id, вместо HashMap.
Ещё можно развить идею Usman, отсортировать по active и entityId, чтобы затем схлопнуть в одну итерацию.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167803
slaymsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167816
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slaymskПосоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS
С английского языка. Если с ним всё в норме, то бери официальный Java Tutorial.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167847
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczslaymskПосоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS
С английского языка. Если с ним всё в норме, то бери официальный Java Tutorial.
слишком категорично, хотя, в целом, я поддерживаю )
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167853
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slaymsk,

на ютубе полно видеороликов
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167864
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:)
Красиво не будет. Но вот однострочник, например:

Код: java
1.
2.
3.
4.
5.
        return entities.stream()
                .sorted(Comparator.comparing(e -> !e.active)) //Сортируем активные
                .collect(groupingBy(e -> e.entityId)).values().stream() //Группируем интересно можно ли применить reduce?
                .map(group -> group.get(0).setVersions(group.subList(1, group.size()))) //Берем первый элемент, который после сортировки гарантировано активный и устанавливаем версии, возвращая ссылку на активную сущность
                .collect(toList()); //Собираем в список



Единственное что пришлось добавить builder style setter
Код: java
1.
2.
3.
4.
       public Entity setVersions(List<Entity> entities) {
            this.versions.addAll(entities);
            return this;
       }


Ну, и код подразумевает обязательное наличие одной активной сущности для каждого id.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39167967
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, ну как-то так:

Код: 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.
    private static Map<Integer, Entity> groupByVersionJava8(List<Entity> entities) {
        return entities.stream().collect(Collectors.groupingBy(Entity::getEntityId,
                Collector.of(
                        ActiveAndVersions::new,
                        ActiveAndVersions::addEntity,
                        ActiveAndVersions::merge,
                        ActiveAndVersions::finisher)
                ));
    }

    public static class ActiveAndVersions {
        private Entity active;
        private ArrayList<Entity> versions = new ArrayList<>();

        public ActiveAndVersions() {
        }

        public void addEntity(Entity e) {
            if (e.isActive()) {
                active = e;
            } else {
                versions.add(e);
            }
        }

        public ActiveAndVersions merge(ActiveAndVersions that) {
            if (this.active != null) {
                this.versions.addAll(that.versions);
                return this;
            } else {
                return that.merge(this);
            }
        }

        public Entity finisher() {
            active.versions = versions;
            return active;
        }
    }



геттер для entityId сделаете и из мапы значения достанете сами
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168076
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerзабыл ник, ну как-то так:

Код: 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.
    private static Map<Integer, Entity> groupByVersionJava8(List<Entity> entities) {
        return entities.stream().collect(Collectors.groupingBy(Entity::getEntityId,
                Collector.of(
                        ActiveAndVersions::new,
                        ActiveAndVersions::addEntity,
                        ActiveAndVersions::merge,
                        ActiveAndVersions::finisher)
                ));
    }

    public static class ActiveAndVersions {
        private Entity active;
        private ArrayList<Entity> versions = new ArrayList<>();

        public ActiveAndVersions() {
        }

        public void addEntity(Entity e) {
            if (e.isActive()) {
                active = e;
            } else {
                versions.add(e);
            }
        }

        public ActiveAndVersions merge(ActiveAndVersions that) {
            if (this.active != null) {
                this.versions.addAll(that.versions);
                return this;
            } else {
                return that.merge(this);
            }
        }

        public Entity finisher() {
            active.versions = versions;
            return active;
        }
    }



геттер для entityId сделаете и из мапы значения достанете сами

Класс обертка не подходит по ряду причин, к сожалению. В основном из-за кривого юая, именно за этим и такой изврат с версиями, потому что на юай только одно новое поле обработать)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168077
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:)
Красиво не будет. Но вот однострочник, например:

Код: java
1.
2.
3.
4.
5.
        return entities.stream()
                .sorted(Comparator.comparing(e -> !e.active)) //Сортируем активные
                .collect(groupingBy(e -> e.entityId)).values().stream() //Группируем интересно можно ли применить reduce?
                .map(group -> group.get(0).setVersions(group.subList(1, group.size()))) //Берем первый элемент, который после сортировки гарантировано активный и устанавливаем версии, возвращая ссылку на активную сущность
                .collect(toList()); //Собираем в список



Единственное что пришлось добавить builder style setter
Код: java
1.
2.
3.
4.
       public Entity setVersions(List<Entity> entities) {
            this.versions.addAll(entities);
            return this;
       }


Ну, и код подразумевает обязательное наличие одной активной сущности для каждого id.

Да, активная будет 100%. Интересно, а я вот и так и сяк групинг пробовал - но так ничего и не получилось. Вроде как и красиво все с этими стримами, но не интуитивно, надо обомозговать хорошо, в отличие от императивного стиля, взял да и заколбасил по ходу движения)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168086
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никfixxer
Код: 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.
    private static Map<Integer, Entity> groupByVersionJava8(List<Entity> entities) {
        return entities.stream().collect(Collectors.groupingBy(Entity::getEntityId,
                Collector.of(
                        ActiveAndVersions::new,
                        ActiveAndVersions::addEntity,
                        ActiveAndVersions::merge,
                        ActiveAndVersions::finisher)
                ));
    }

    public static class ActiveAndVersions {
        private Entity active;
        private ArrayList<Entity> versions = new ArrayList<>();

        public ActiveAndVersions() {
        }

        public void addEntity(Entity e) {
            if (e.isActive()) {
                active = e;
            } else {
                versions.add(e);
            }
        }

        public ActiveAndVersions merge(ActiveAndVersions that) {
            if (this.active != null) {
                this.versions.addAll(that.versions);
                return this;
            } else {
                return that.merge(this);
            }
        }

        public Entity finisher() {
            active.versions = versions;
            return active;
        }
    }




Класс обертка не подходит по ряду причин, к сожалению. В основном из-за кривого юая, именно за этим и такой изврат с версиями, потому что на юай только одно новое поле обработать)

Вы не поняли. Мутабельная обертка используется только для свертки, на входе и выходе все та же Entity.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168235
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВроде как и красиво все с этими стримами, но не интуитивно, надо обомозговать хорошо, в отличие от императивного стиля, взял да и заколбасил по ходу движения)
А никто не обещает серебряной пули. Просто ещё один вариант. Нужно выбрать тот что проще и его реализовать.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168360
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальше идёт моё сугубо личное ИМХО.

Новое - хорошо забытое старое. Давайте почитаем как определяет Streams документация по Scala

Цитирую
http://www.scala-lang.org/docu/files/collections-api/collections_14.html A Stream is like a list except that its elements are computed lazily.
Because of this, a stream can be infinitely long. Only those elements
requested are computed. Otherwise, streams have the same
performance characteristics as lists.
Обратите внимание на lazy computing. Еще цитата из JDK 8

https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html Laziness-seeking. Many stream operations, such as filtering, mapping, or duplicate
removal, can be implemented lazily, exposing opportunities for optimization. For
example, "find the first String with three consecutive vowels" need not examine
all the input strings. Stream operations are divided into intermediate (Stream-producing)
operations and terminal (value- or side-effect-producing) operations. Intermediate
operations are always lazy.

Я не помню где и когда были анонсированы ленивые вычисления. С точки зрения ФП
им уже 100 лет в обед. Историю создания Scala я не знаю но wiki пишет что с 2003 года.

В 2003 году был переход с J2SE 1.4 на J2SE 5. Никаких java.util.Stream еще не было.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168377
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ не помню где и когда были анонсированы ленивые вычисления. С точки зрения ФП
им уже 100 лет в обед. Историю создания Scala я не знаю но wiki пишет что с 2003 года.
В 2003 году был переход с J2SE 1.4 на J2SE 5. Никаких java.util.Stream еще не было.
Не очень понял к чему этот экскурс в историю. Подавляющее большинство концепций в программировании были описаны ещё в 70-х. В том числе ленивые вычисления.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168395
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К тому что стримы в Java нужно было вводить еще лет 10 назад.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168410
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonК тому что стримы в Java нужно было вводить еще лет 10 назад.
Люди, которые думали так же и реализовали Scala. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168614
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так и старик Бьярне. Сидит в своих кедах, закинув ноги на стол и думает.
Внести ли в новую спеку С++ то о чём долго говорят большевики.... ? Или нет?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168646
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу больше найти ссылку. На прошлой неделе видел её в Java дайджесте на dou.ua. Там был отличный вопрос "как реализовать такое на стримах", на который, кажется Getz ответил. Но позже твит, вроде удалили. Как раз там пример близкий к этому топику о том как не надо писать в функциональном стиле на Java.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168739
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
2.
3.
4.
5.
        return entities.stream()
                .sorted(Comparator.comparing(e -> !e.active)) //Сортируем активные
                .collect(groupingBy(e -> e.entityId)).values().stream() //Группируем интересно можно ли применить reduce?
                .map(group -> group.get(0).setVersions(group.subList(1, group.size()))) //Берем первый элемент, который после сортировки гарантировано активный и устанавливаем версии, возвращая ссылку на активную сущность
                .collect(toList()); //Собираем в список




Написал тест, у этого кода есть один косяк. Он будет работать только если обьявить versions как Set. Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Понятнее говоря, после выполнения в версиях будет две версии с id=2 и одна с айди =3
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168746
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3.

Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никДебажить stream тоже то еще удовольствие:)
Ну наконец-то... есть хоть одна ворчалка :) в адрес stream.
Люто бешено ++
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168748
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никзабыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3.

Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:)

Все разобрался.. извиняюсь за переполох. Код работает корректно, просто в тесте список переиспользовал :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168752
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonзабыл никДебажить stream тоже то еще удовольствие:)
Ну наконец-то... есть хоть одна ворчалка :) в адрес stream.
Люто бешено ++

Вот согласен, вроде все красиво по итогу, но во-первых 1) сядь продумай алгоритм 2) продебажь 3) если потом появится необходимость изменить немного логику и придет другой человек(да и я сам через месяц) - то будет врубаться полчаса.

Хотя может это конечно дело привычки... но пока сильно задумался об использовании стримов на чем-то чуть большем чем stream.sort().map(::ByName).sum();
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168756
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никДебажить stream тоже то еще удовольствие:)
В идею, вроде, уже добавили отладку лямбд.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168759
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никХотя может это конечно дело привычки... но пока сильно задумался об использовании стримов на чем-то чуть большем чем stream.sort().map(::ByName).sum();
Здесь нет единого стрима. В этом вся сложность. Поэтому первый вариант, самый простой и понятный. Однострочник не может быть самоцелью. Это лишь пример того что можно, но никак не пример того как правильно.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168773
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне процесс диагностики багов в стримах напоминает мои разборки с Oracle-SQL курсорами.

В работу SQL-машины как правило нельзя воткнуть дебаггер. Можно трассировать
работу курсора на очень низком уровне и получать в текстовом файле простыню
операций но из личного опыта - этот подход не годится для поиска ошибок.
Обычно его используют детектирования узких мест к примеру.

Поэтому я делал так. Смотрел на текст курсора. Потом делал предположение
что если в предложении WHERE или HAVING в запросе или его подзапросах
или inline views что-то убрать (закомментарить) то я 100% должен получить
тото или это. Если не получалось - то переходил к другой гипотезе (комментарил
еще больше предикатов) и т.д до тех пор пока не локализовывалась ошибка.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168774
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никХотя может это конечно дело привычки... но пока сильно задумался об использовании стримов на чем-то чуть большем чем stream.sort().map(::ByName).sum();
Здесь нет единого стрима. В этом вся сложность. Поэтому первый вариант, самый простой и понятный. Однострочник не может быть самоцелью. Это лишь пример того что можно, но никак не пример того как правильно.

В моем варианте один стрим.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168797
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerВ моем варианте один стрим.
И куча логики в методах. Такой код вообще за гранью.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168812
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczfixxerВ моем варианте один стрим.
И куча логики в методах. Такой код вообще за гранью.

Ты просто невнимательно его прочитал. Попробуй еще раз. Я, по-сути, лишь реализовал кастомный коллектор, просто собрал его из метод-референсов. Попробуй мысленно заменить их на лямбды и увидишь, что логики тут ровно столько же сколько и в твоем коде. Только тебе приходится пресортить коллекцию, я же разбираюсь по месту и за счет этого обхожусь одним стримом.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168827
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerТы просто невнимательно его прочитал. Попробуй еще раз.

Нормально прочитал.

fixxerЯ, по-сути, лишь реализовал кастомный коллектор, просто собрал его из метод-референсов.

Это я вижу.

fixxerПопробуй мысленно заменить их на лямбды и увидишь, что логики тут ровно столько же сколько и в твоем коде.
Я не о том вообще.

fixxerТолько тебе приходится пресортить коллекцию, я же разбираюсь по месту и за счет этого обхожусь одним стримом.
Сколько мне раз нужно в этой теме повторить что это плохой код? Просто это пример однострочника. Твой код на однострочник не претендует вообще никак, так как всё что ты сделал это запихнул логику внутри методов "кастомного коллектора". Это точно такое же безумие как однострочники и лямбды с жирным телом.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168857
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСколько мне раз нужно в этой теме повторить что это плохой код?
Ну, до тех пор пока думаешь, что если повторить много раз, то аргументировать не нужно. No offence.

Дело тут не в однострочниках, это не самоцель. Фишка в том, что многие воспринимают Stream API как сахар над коллекциями, забывая, что они несут не только fancy syntax, но и свою семантику, в том числе в рантайме. И переписать исходный код на стримы нужно не потому чтобы красиво код записать, но для того, чтобы убрать квадратичную сложность, явный стейт и прибитую гвоздями однопоточность.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168874
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerНу, до тех пор пока думаешь, что если повторить много раз, то аргументировать не нужно. No offence.

Это про мой однострочник. А не про твой код. А что там аргументировать. Читаемость кода ниже плинтуса.

fixxerДело тут не в однострочниках, это не самоцель. Фишка в том, что многие воспринимают Stream API как сахар над коллекциями, забывая, что они несут не только fancy syntax, но и свою семантику, в том числе в рантайме. И переписать исходный код на стримы нужно не потому чтобы красиво код записать, но для того, чтобы убрать квадратичную сложность, явный стейт и прибитую гвоздями однопоточность.
Да пофигу и на многопоточность тоже. Чем проще код, тем лучше со всех сторон.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39168886
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДа пофигу и на многопоточность тоже. Чем проще код, тем лучше со всех сторон.

Я думаю, что это до поры до времени. Потом из таких маленьких понятных императивных кусочков вырастает легаси монстр, который невозможно поддерживать и который не масштабируется и не держит нагрузку.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169128
VestaBesta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в какой среде лучше всего работать на ней? Просто я только начал учить джаву после си++
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169213
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VestaBestaА в какой среде лучше всего работать на ней? Просто я только начал учить джаву после си++

Лучше не в среде.
Лучше изучить maven и/или gradle (системы сборки приложения)
По большому их можно использовать в любой IDE.
Но удобнее в IntelijIDEA, но она платная.

Поэтому выбирайте любую бесплатную IDE, которая вам приглянется.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169618
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дождались, только зачем было ждать если в .net все это давно есть и выглядит как родное, а тут - ну вроде вместили.. ))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169639
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breathдождались, только зачем было ждать если в .net все это давно есть и выглядит как родное, а тут - ну вроде вместили.. ))
Осталось дождаться когда .NET наконец-то заработает на линуксе и когда MS допилит свою виртуальную машину до уровня Hotspot.
Кому нужен язык - берут Scala, а не C#.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169643
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>когда MS допилит свою виртуальную машину до уровня Hotspot.
вобще о чем

>Кому нужен язык - берут Scala, а не C#.
это скорее кому скучно
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169685
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breath>когда MS допилит свою виртуальную машину до уровня Hotspot.
вобще о чем
О забагованности на квадратный сантиметр. Хотя тут, конечно, и Windows тоже не малую роль играет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169741
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczbreathдождались, только зачем было ждать если в .net все это давно есть и выглядит как родное, а тут - ну вроде вместили.. ))
Осталось дождаться когда .NET наконец-то заработает на линуксе и когда MS допилит свою виртуальную машину до уровня Hotspot.
Кому нужен язык - берут Scala, а не C#.
Я вот с удивлением узнал что некий программный продукт под названием Microsoft/dotnet
выложен в гитхаб со ссылкой https://github.com/Microsoft/dotnet
Initial коммит датируется October-2014.

Пока не комментирую.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169750
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ вот с удивлением узнал что некий программный продукт под названием Microsoft/dotnet
выложен в гитхаб со ссылкой https://github.com/Microsoft/dotnet
Initial коммит датируется October-2014.

Пока не комментирую.
Так это старая новость. Они одновременно заявили и про опенсорс и про официальную поддержку в ближайшей мажорной версии.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169755
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно. Сорцов не вижу пока.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169773
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот на хабре небольшое пояснение нашёл. Не знаю
будет-ли кому полезно. Если нет - то извините.
https://habrahabr.ru/post/243065/
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39169782
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСтранно. Сорцов не вижу пока.
Они в подпроектах:
https://github.com/dotnet/corefx/tree/master/src
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170028
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал, сам не сталкивался. Хотелось бы почитать на эту тему.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170129
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

Execution Engine vs Virtual Machine
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170169
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Регистровая машина VS Стековая
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170194
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторBlazkowicz,
Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал
тоже интересно об этом узнать, и что именно слышали ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170316
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Не совсем понял разницу. Execution Engine пытается весь код в нативный скомпилировать, и потом им пользоваться всегда? Материала не нашёл толкового по такому запросу.


mayton,

Обе машины стековые же.


breath.

Ничего конкретного, но на .NETовский рантайм часто нападки слышу, хотя мне казалось, что среда там покруче будет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170349
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverExecution Engine пытается весь код в нативный скомпилироватьЗадача Execution Engine - исполнение. А для преобразования в нативный код - есть АOT/JIT компиляторы.UsmanExecution Engine vs Virtual MachineОтвет: https://ru.wikipedia.org/wiki/Common_Language_Runtime В отличие от переносимых виртуальных машин Java, абстрагирующихся от нижележащих операционных систем,
CLR позиционируется как не "виртуализированная" платформа , тесно связанная с операционной системой Microsoft Windows
(в том числе для целей сохранения инвестиций Microsoft в операционную систему)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170362
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton,

Обе машины стековые же.

Ну ОК. Пожалуй обе - стековые.

Мне кажется, чтобы понять за что ругают и кто чем хуже - надо взять hi-load приложение.
К примеру тот-же самый Card-Raytracer 18105781 и посмотреть следующие пункты.

1) Производительность работы (время отклика)
2) Размер бинарника, байткода или CIL-кода
3) Прочие параметры (размер native-бинарника (к слову как его посмотреть пока не знаю
надо гуглить))

Выбор Card-Raytracer - это моё сугубое ИМХО. Если у вас есть лучше вариант - предлагайте свой.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170587
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverBlazkowicz,

Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал, сам не сталкивался. Хотелось бы почитать на эту тему.

А что, уже всё работает под linux, solaris, aix, macos, freebsd? Хорошо работает?

Так-то интересно, к примеру в CLR вроде как генерики не "забываются".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170710
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Ну вообще, раз оно использует windows фичи, работать должно лучше, гипотетически.


mayton,

Если честно, лениво тридцать страниц читать. Нашёл результаты одного из бенчмарков C#, а для Java уже не смог найти.


Alexey Tomin,

Вообще пофиг на кроссплатформенность, я хотел именно скорость и "юзабилити" платформ сравнить хотел.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170721
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
генерики в .net повсюду, при трансляции и в рантайме.

чтобы сравнить нужно писать,
например после года на c#, когда бывает приходится возвращаться к java очень тягостно это.

расширяющие методы, например именно ими реализован linq.
это такая штука, которой добавляются новые конструкции в язык и потом работают как родные.
то есть могу добавить метод MySuperSelect(..) к коллекциям(всем или только определенным)
и вызывать var myList = list.Where(..).MySuperSelect()..

индексаторы, делегаты, lazy, async await и тд.. часть из этого появилась в 8ке, но какой семантикой.. не мое скажу так.
если бы не было .net и c# пришлось бы наверное 8ку юзать по полной, но так как выбор есть зачем жрать кактус имхо.

на кроссплатформеность лично мне пофик, юзаю и люблю винду на десктопе ), да и моно сейчас интегрирует в себя открытые исходники от мс.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170862
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton,

Если честно, лениво тридцать страниц читать. Нашёл результаты одного из бенчмарков C#, а для Java уже не смог найти.

Вы искали бенчмарк C# и Java? Вот вам бенчмарк.

Тяпничный бенчмарк CPU (part-1)

Он актуален только для моего ноутбука. У вас будут другие цифры. Хотя для однопоточного
приложения пропорция между elapsed time для Java/.Net/.Net-x64 должна сохраняться
(я надеюсь).
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170915
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Всё же отставание небольшое. Видимо, на личном опыте пережить нужно, чтобы разницу между платформами осознать.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170917
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breath,

Лучше Джавы, но на фоне Скалы бледненько смотрится. Лично мне жаль, что MS побоялись выйти за рамки Java like language парадигмы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170922
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разные вещи сравниваются же, на платформе clr есть f# типа scala для jvm.
c# для си стайл програмеров и хорошо что он есть имхо.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39170930
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverЛучше Джавы, но на фоне Скалы бледненько смотрится.
Вообще ни слова не понял. Поясни.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171029
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot DoSOfRedRiverAlexey Tomin,

Вообще пофиг на кроссплатформенность, я хотел именно скорость и "юзабилити" платформ сравнить хотел.[/quot]

Да мне тоже пофиг- важен только linux
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171724
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

С какой это стати? Идеологически, чтоли? Дык Plan9 есть.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171732
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

MS сделали свою Джаву, а потом добавили туда всяких фич модных. Как бе, на фоне Java сишарп будто бы продвинутый язык, но идеологически от неё ничем не отличается. И я сюда Скалу приплёл чтобы показать, что можно было бы сделать вместо этого самого C#.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171742
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton,

MS сделали свою Джаву, а потом добавили туда всяких фич модных. Как бе, на фоне Java сишарп будто бы продвинутый язык, но идеологически от неё ничем не отличается. И я сюда Скалу приплёл чтобы показать, что можно было бы сделать вместо этого самого C#.
Нет нельзя было. Инструмент должен был иметь доступный порог вхождения.
Scala - это надфиль. Сверх-тонкий инструмент. Он не просто позволяет
решать обычные бизнес задачи но и позволяет их решать вовлекая
сущности высокого порядка. И если эти сущности постулировать
как основное (фронтальное) направление МС - то это сделает
курсы обучения этому ЯП не просто сложными а недоступными.
Разумеется МС не могло пойти на такой шаг. Сложный ЯП не нужен.
Нужен как-раз другой подход. Взять обычного кодера и за 14 дней
переквалифицировать в дотнетчика.

А C# - это рашпиль. Его доступно понять девелоперу средней руки. Иногда
без мат-образования. Коих щас много.

Ну а если есть такие мьсе которые хотят чего-то эдакого - так MS предоставил
им F#. Берите и пользуйтесь. Но основным .net языком (я еще помню по версии 1.1)
позиционировался довольно легкий и приятный язык с С#.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171831
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Скала - просто пример. Необязательно было что-то эдакое городить, можно было переосмыслить старые вещи просто. А в MS дело до того дошло, что они с собой утащили ковариантные массивы и остальные "прелести" Джавы. Многие вещи переносили "как есть", хотя, казалось бы, почему бы не поразмыслить как всё это дело улучшить можно?

И, кстати
Сложность скалы весьма переоценена. Ничего сверхмудрёного там нет, достаточно одну книгу прочесть.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171877
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никзабыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3.

Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:)


че там дебажить? как и в SQL, смотришь на тестовый вход и тестовый выход от него, и исправляешь, если что-то не так.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171881
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Вот согласен, вроде все красиво по итогу, но во-первых 1) сядь продумай алгоритм 2) продебажь 3) если потом появится необходимость изменить немного логику и придет другой человек(да и я сам через месяц) - то будет врубаться полчаса.



это убийственный аргумент для любой продвинутой технологии...

ну пиши на Бейсике, на .bat файлах. что там еще тупее есть?

я за свою жизнь столько непонятных и запутанный программ перевидал, но не помню, чтобы хоть одна была бы основана на продвинутых концепция. Все тупня и гнилые мозги. А люди, которые понимают что-то продвинутое и технологичное обычно пишут просто и ясно, там концепцию понять сложно бывает, но когда понял,сам код уже не вызывает затруднений.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171887
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverСложность скалы весьма переоценена. Ничего сверхмудрёного там нет, достаточно одну книгу прочесть.
Ну это до первого собеседования.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39171937
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverAlexey Tomin,

С какой это стати? Идеологически, чтоли?

На рабочем компе линукс, на дломашнем тоже. Нетбук вот пока ешё на винде.
На всех, где запускается мой софт по работе- тоже линукс.
У коллег- даже маков больше, чем винды.
Никакой идиологии- просто не вижу причин использовать win.

Так что пока .net нет на linux с техподдержкой- его для меня нет вообще.

DoSOfRedRiverДык Plan9 есть.

Есть множество извращений.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172324
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverBlazkowicz,

Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал, сам не сталкивался. Хотелось бы почитать на эту тему.

JVM кроссплатформ, много реализаций, CLR - все нет, Моно в жопе, вокруг печаль...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172327
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDoSOfRedRiverСложность скалы весьма переоценена. Ничего сверхмудрёного там нет, достаточно одну книгу прочесть.
Ну это до первого собеседования.

нужность собеседований весьма переоценена.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172525
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmaytonпропущено...

Ну это до первого собеседования.

нужность собеседований весьма переоценена.
Автор пишет - один раз книжку прочесть. Ну... для меня это выглядит так.
Один раз прочесть. Поработать. Вернуться к книжке. Поработать. Вернуться
к книжке e.t.c.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172669
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

Alexey Tomin На всех, где запускается мой софт по работе- тоже линукс.

Здорово жить в своём, уютном мирке. Пользователям вместе с софтом убунту поставляете?

Alexey TominЕсть множество извращений.
Угу. Например, оконные менеджеры на ОС для терминалов.


MasterZivэто убийственный аргумент для любой продвинутой технологии...
Соглашусь. Меня на работе луддиты замучили. Дай волю - на Си писать будут.

mayton Автор пишет - один раз книжку прочесть. Ну... для меня это выглядит так.
Один раз прочесть. Поработать. Вернуться к книжке. Поработать. Вернуться
к книжке e.t.c.
Ну дык, там не зря практические примеры даны, можно попробовать сразу задачки какие-нибудь порешать.

авторНу это до первого собеседования.
А что там такого страшного? Код писали, на Джавах программировали. Речь же не идёт о lead позиции в Твиттер.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172739
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverНу дык, там не зря практические примеры даны, можно попробовать сразу задачки какие-нибудь порешать.

Чувак. На собеседовании перед тобой сидит теч-лид. Который делал проекты на Scala.
А напротив сидишь ты. Которой читал книжку.

С одной стороны чел. - делал проекты. А с другой стороны - ты читатель книжки.

Улавливаешь разницу?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172753
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDoSOfRedRiverНу дык, там не зря практические примеры даны, можно попробовать сразу задачки какие-нибудь порешать.

Чувак. На собеседовании перед тобой сидит теч-лид. Который делал проекты на Scala.
А напротив сидишь ты. Которой читал книжку.

С одной стороны чел. - делал проекты. А с другой стороны - ты читатель книжки.

Улавливаешь разницу?

А кто тебе запрещает делать проекты тоже?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172754
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исключительно моя лень.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39172804
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
+1
есть у меня реальный пример - дизайнер выкладывает свои проекты (уже оплаченные) в качестве портфолио, и вот на собеседовании (почти на каждом) слышит:
- у вас плохие работы, они нам не нравятся...
- но они нравятся заказчику, хотя я ему были предложены и другие варианты , на мой взгляд намного лучше выбранного.
- тогда вы нам , тем более , не подходите, не можете убедить заказчика выбрать лучшее.
- но он, не согласен за другое платиь...
- тогда не выкладывайте в портфолио это, а делайте для портфолио лучшие варианты.....
- когда и нах...я?
и попробуй убеди этого «гуру»......
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173015
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverAlexey Tomin,

Alexey Tomin На всех, где запускается мой софт по работе- тоже линукс.

Здорово жить в своём, уютном мирке. Пользователям вместе с софтом убунту поставляете?

Пользователи ходят через браузер на наши сервера (SaaS, ага). Они даже не в курсе, что там.
Никому даже в голову не приходит ставить на сервера win.

Кстати, т.к. бьольшинство клиентов не у нас, то у них тоже macos может встречатся почаще, чем win :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173032
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, у вашего дизайнерских собеседующих вообще нечёткие критерии приёмки.
Было-б там аргументация типа - нарушены правила колористики или
не прослеживается там.... какое-нить золотое сечение в линиях.

А так... захотят завалить - всё равно завалят. Или пускай комиссию собирают
из 3х гур. Чтоб голосование там хотя-бы было и хер ево знает.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173113
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonвадя, у вашего дизайнерских собеседующих вообще нечёткие критерии приёмки.
Было-б там аргументация типа - нарушены правила колористики или
не прослеживается там.... какое-нить золотое сечение в линиях.

А так... захотят завалить - всё равно завалят. Или пускай комиссию собирают
из 3х гур. Чтоб голосование там хотя-бы было и хер ево знает.
я к тому, что если при собеседовании кому-то не понравился цвет твоих глаз.- то будь ты хоть семь пядей во лбу - собеседование не пройти
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173136
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя к тому, что если при собеседовании кому-то не понравился цвет твоих глаз.- то будь ты хоть семь пядей во лбу - собеседование не пройти
Примерно такая же глупость, как пихать резалтсет в вывод сервлета. Не моделей же набирают
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173375
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

И чем таким enterprise Scala от enterprise Java отличается? Стеком и только?
И вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173418
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПримерно такая же глупость, как пихать резалтсет в вывод сервлета. Не моделей же набирают
в одних платформах это считается нормальным, в других глупостью?
тот же хибер не пихает резве данные на вывод?
а, он оборачивает их в фантик, и от этого они становятся не данными из результсета.
если кто-то не секёт в sql так пусть и пользуется прокладками.
вместо того что б освоить sql, будем осваивать прокладки....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173471
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverПроще взять на работу толкового парня, который за полгода освоить нужный стек,
чем полгода искать сеньёра-помидора с зарплатой nK$.
Здесь я-бы добавил IMHO. Не нам с вами решать что проще.
И за период "пол-года" можно обесценить старт како-то бизнеса.
Поэтому IMHO и еще раз ИМХО.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173485
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никвадяя к тому, что если при собеседовании кому-то не понравился цвет твоих глаз.- то будь ты хоть семь пядей во лбу - собеседование не пройти
Примерно такая же глупость, как пихать резалтсет в вывод сервлета. Не моделей же набирают
Ну.. если дизайнер очень нужен - то позвонят. Вычислят среди ночи.. в выходной день
и сами предложат окно для встречи и даже чашечку чая заварят с сахаром.

А если нужен голубоглазый мальчик - то может ну ее нафик такую контору. Видать
и не сильно нужно было собеседовать. Так ... чисто прикольнулись над новичком со скуки.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173493
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А это от технологии зависит, и от человека. Разумеется, какой-нибудь студентишко-недоучка за полгода Спринг не освоит, но толковый парень с грамотным стеком сможет через месяц писать код.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173497
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF
авторА если нужен голубоглазый мальчик - то может ну ее нафик такую контору. Видать
и не сильно нужно было собеседовать. Так ... чисто прикольнулись над новичком со скуки.
по поводу такой конторы - это точно, так и сделали
а вот насчёт новичка- так "новичёк" уже 25+ занимается этим , и в портфолио куча того, что сделано для известных в городе брендов...
авторИ вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$.
тут складывается мнение, что берут не по знаниям и опыту , а смотрят насколько человеком можно манипулировать, самостоятельны, мнестандартно мыслящий - не приветствуется....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173519
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадянестандартно мыслящий - не приветствуется....
вопрос только в том, человек действительно нестандартной мыслящий или самоуверенный и неуправляемый глупец-нигилист с раздутым чсв и комплексом непогрешимости
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173533
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaвадянестандартно мыслящий - не приветствуется....
вопрос только в том, человек действительно нестандартной мыслящий или самоуверенный и неуправляемый глупец-нигилист с раздутым чсв и комплексом непогрешимости
ворос очень и очень правильный. когда видишь кучу работ, приятых и оплаченных крупными конторами, известными в городе...и говоришь, что это плохо...
кто и кого называет глупцом?
точнее - А судьи кто?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173592
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton,

И чем таким enterprise Scala от enterprise Java отличается? Стеком и только?
И вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$.

Представьте, что вам достается в наследство код, подобный этому:

Код: scala
1.
   s(7)  (s(8)  (s(9) ∘ add3)) assert_=== s(24)
   f("bzzt")  (s(8)  (f("bang") ∘ add3)) assert_=== ff(List("bang", "bzzt"))


На Java тоже паззлы всякие есть, но Scala позволяет намного более утонченно издеваться над саппортом
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173632
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяв одних платформах это считается нормальным, в других глупостью?
тот же хибер не пихает резве данные на вывод?
а, он оборачивает их в фантик, и от этого они становятся не данными из результсета.
если кто-то не секёт в sql так пусть и пользуется прокладками.
вместо того что б освоить sql, будем осваивать прокладки....

Нет ну если это троллинг, то я впечатлен и аплодирую стоя, тут левел не меньше 80.. А вот если не троллинг, то все печально..
В каких это платформах нормально? JSP 2000 года? Вы правда не понимаете преимуществ разделения кода на слои? И хибер тут вообще не при чем, есть множество паттернов для ОРМ, если хочется можно и ActiveRecord заюзать и тд. Скажите честно вы когда-нибудь вообще работали в команде? Вы пробовали ОРМ(или не читал но осуждаю?), вы вообще в курсе про транзакции(или они тоже в сервлете открываются\закрываются?:)) ОРМ это не замена sql, вас кто-то жестко обманул, это прежде всего CRUD, который избавляет от нудной монотонной работы, как пример

Код: java
1.
2.
EntityManager em;
Proposal proposal = em.find(Proposal.class, 1L);



и

Код: 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.
private Proposal mapProposal(ResultSet rs) {
    	Proposal p = new Proposal();
		try {
			String s = rs.getString("ioLevelSummary");
			IoLevelSummary levelSummary = readXML(s, IoLevelSummary.class);
			s = rs.getString("ioSummary");
			IoSummary summary = readXML(s, IoSummary.class);
			s = rs.getString("placementEntry");
			PlacementEntry placement = readXML(s, PlacementEntry.class);
			p.setIoLevelSummary(levelSummary);
			p.setIoSummary(summary);
			p.setPlacementEntry(placement);
			p.setId(rs.getLong("id"));
			p.setAe(rs.getString("ae"));
			p.setAgency(rs.getString("agency"));
			p.setApprovalRequired(rs.getBoolean("approveRequired") ? "YES" : "NO");
			p.setApprover(rs.getString("approver"));
			p.setClient(rs.getString("client"));
			p.setCreatedBy(rs.getString("createdBy"));
			p.setCreationDate(rs.getDate("creationDate"));
			p.setDueDate(rs.getDate("dueDate"));
			p.setFreeWheelId(rs.getInt("freeWheelId"));
			p.setName(rs.getString("name"));
			p.setVersion(rs.getInt("version"));
			p.setPublishDate(rs.getDate("publishDate"));
			p.setPublisher(rs.getString("publisher"));
			p.setReadyForApproval(rs.getBoolean("readyForApproval"));
			String status = rs.getString("status");
			p.setStatus(status.equals("Publish")? "Published" : status);
			p.setViolateRule(rs.getBoolean("violateRule"));
			p.setLocked(rs.getBoolean("locked"));
			p.setActive(rs.getBoolean("active"));
			p.setProposalId(rs.getLong("proposalId"));
			p.setUpdatedDate(rs.getDate("updatedDate"));
			p.setUpdatedBy(rs.getString("updatedBy"));
			p.setProbability(rs.getString("probability"));
			
		} catch (SQLException e) {
			log.error("Database error", e);
			throw new RuntimeException("Database error", e);
		} catch (JAXBException e) {
			log.error("JAXB error", e);
			throw new RuntimeException("Database error", e);
		}
		return p;
	}



Причем второй вариант без открытия коннекшена, создания PreparedStatement и транзакций :)

При всем при этом я допускаю, что то что вы пишете может работать и даже хорошо, но суппортить вот такое го..но это же ужас. Как раз сейчас работаю над проектом, где волк-одиночка решил - а зачем нам база данных - это же в конце концов список файлов, ну и забабахал персистенс слой на файловой системе :) Потом пошли такие требования как версионность, транзакции - ну он часть сущностей перевел на JDBC, причем колонки он читал не rs.getString("name") а getString(12).... Ну хорошо хоть в вывод сервлета не пихал. Благо проект небольшой и я за 4 дня управился, кстати JDBC так и оставил, просто написал обертку на лямбдах(слава 8-ке!) и рефлекшн.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173667
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезНа Java тоже паззлы всякие есть, но Scala позволяет намного более утонченно издеваться над саппортом
Я-бы по другому сказал. На Java всегда можно найти менторов или синьоров которые
могут объяснить то или другое поведение. Если сложная ситуация с реверс инжинирингом
или с анализом унаследованного кода возникнет в Scala - куда бежать-та? Сразу в Сан-Франциско?
Синьоров толком нету. И даже не суть в реверсе. Реверс-то любой студент сделает с дебаггером.

А суть - в понимании мотиваций. ПОЧЕМУ создатель именно так сделал а не иначе.
Что им двигало? Каков был замысел?

Вам не интересно ЭТО? Мне - всегда были интерсны именно эти пункты.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173724
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ты меня пугаешь, уже второй топик, где ты излогаешь мои мысли....
зачем содавать биин ,когда все наглядно видно, читаемо, понятно в одном файле. среда ide форматирует код, и даже при быстрой прокрутке видно что и где ,выделено и цветом, к тому же
а если э то строка бина - попробуй её найти.
чтоб понять/исправить бин - надо искать файл с ним, залезать в него, время, и потом теряешь мысль , вернувшись в исходный файл
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173760
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Код: java
1.
2.
EntityManager em;
Proposal proposal = em.find(Proposal.class, 1L);



и

Код: 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.
private Proposal mapProposal(ResultSet rs) {
    	Proposal p = new Proposal();
		try {
			String s = rs.getString("ioLevelSummary");
			IoLevelSummary levelSummary = readXML(s, IoLevelSummary.class);
			s = rs.getString("ioSummary");
			IoSummary summary = readXML(s, IoSummary.class);
			s = rs.getString("placementEntry");
			PlacementEntry placement = readXML(s, PlacementEntry.class);
			p.setIoLevelSummary(levelSummary);
			p.setIoSummary(summary);
			p.setPlacementEntry(placement);
			p.setId(rs.getLong("id"));
			p.setAe(rs.getString("ae"));
			p.setAgency(rs.getString("agency"));
			p.setApprovalRequired(rs.getBoolean("approveRequired") ? "YES" : "NO");
			p.setApprover(rs.getString("approver"));
			p.setClient(rs.getString("client"));
			p.setCreatedBy(rs.getString("createdBy"));
			p.setCreationDate(rs.getDate("creationDate"));
			p.setDueDate(rs.getDate("dueDate"));
			p.setFreeWheelId(rs.getInt("freeWheelId"));
			p.setName(rs.getString("name"));
			p.setVersion(rs.getInt("version"));
			p.setPublishDate(rs.getDate("publishDate"));
			p.setPublisher(rs.getString("publisher"));
			p.setReadyForApproval(rs.getBoolean("readyForApproval"));
			String status = rs.getString("status");
			p.setStatus(status.equals("Publish")? "Published" : status);
			p.setViolateRule(rs.getBoolean("violateRule"));
			p.setLocked(rs.getBoolean("locked"));
			p.setActive(rs.getBoolean("active"));
			p.setProposalId(rs.getLong("proposalId"));
			p.setUpdatedDate(rs.getDate("updatedDate"));
			p.setUpdatedBy(rs.getString("updatedBy"));
			p.setProbability(rs.getString("probability"));
			
		} catch (SQLException e) {
			log.error("Database error", e);
			throw new RuntimeException("Database error", e);
		} catch (JAXBException e) {
			log.error("JAXB error", e);
			throw new RuntimeException("Database error", e);
		}
		return p;
	}



Причем второй вариант без открытия коннекшена, создания PreparedStatement и транзакций :)


Вы немного лукавите...
Т.к. за первым вариантом скрывается класс. где есть куча аннотация с параметрами.
Это если не надо делать "JOIN".
Тогда еще надо повозиться с @OneToMany, @ManyToOne и выбрать стратегию для fetch (n+1 запросов таки...).
Т.е. по объему кода не меньше.
А вот гибкости гораздо меньше.
Это не говоря если не нужны рекурсивные запросы и прочие "плюшки" современного SQL.
Если нужны, то ХП.
Т.о. развитие проекта:
ORM -> ХП для того, что нельзя сделать в ORM -> вся БЛ в ХП -> Как мы избавились от ХП и стали спать спокойно -> ORM.
Так лучше сразу не использовать ORM, чем потом тратить силы на "выпиливание" ХП их проекта.
<:o)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173761
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу хорошо хоть в вывод сервлета не пихал.
что в этом такого страшного?
в чём не кошерность этого?
в чем трудность суппорта этого?
если в js строка html формируется в коде - это нормально, то почему сформироватть строку html в java из результсета плохо?
забыл ник, твоя портянка более наглядна чем моя - формирование html в jsp. я сразу вижу откуда данные и как формируется результат .
можно заменить out.print на формирование строки и вывести её и в out.print и systev.out.print, для просмотра результата. да и при дебаге по шагам найти ошибку не сложно.
пугает использование хранимок?
ну и что такого , что это ипользовали раньше?
Код: 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.
            <tbody>
                <%
                    ResultSet rs;
                    try (Connection con_ = DriverManager.getConnection(Singleton.getBASE(), Singleton.getBASE_LOGIN(), Singleton.getBase_password());
                            CallableStatement proc_ = con_.prepareCall("{call page2_yyy01()}");) {
                        rs = proc_.executeQuery();
                        while (rs.next()) {
                            out.print("<tr data-id='" + rs.getString("id") + "'><td>" + rs.getString("part_number") + "</td>");
                            out.print("<td>" + rs.getString("date_inhibitor") + "</td>");
                            out.print("<td data-id='" + rs.getString("id_inhibitor") + "'>" + rs.getString("inhibitor_brand") + "</td>");
                            if (rs.getString("inhibitor_density").length() == 0) {
                                out.print("<td><input class='density' value'' type='text'></td>");
                            } else {
                                out.print("<td >" + rs.getString("inhibitor_density") + "</td>");
                            }
                            if (rs.getString("product_brand").length() == 0) {
                                out.print("<td class='select_brand'></td>");
                            } else {
                                out.print("<td>" + rs.getString("product_brand") + "</td>");
                            }
                            if (rs.getString("date_product").length() == 0) {
                                out.print("<td></td>");
                            } else {
                                out.print("<td class='date_product'>" + rs.getString("date_product") + "</td>");
                            }
                            out.print("</tr>");
                        }
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                %>
            </tbody>


что сложного в суппорте этого? или этого
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        try (Connection con_ = DriverManager.getConnection(Singleton.getBASE(), Singleton.getBASE_LOGIN(), Singleton.getBase_password());
                CallableStatement proc_ = con_.prepareCall("{call menu(0,0,1)}");) {
            rs = proc_.executeQuery();
            sb.append("<div id='divmenu'><ul id='menu0'>");
            while (rs.next()) {
                if (rs.getInt("b_level") == rs.getInt("nlevel")) {

                    sb.append("<li class='go_page' data-action='").append(rs.getString("action_string")).append("' data-id='").append(rs.getInt("id_in")).append("'><span>").append(rs.getString("name")).append("</span></li>");
                } else {
                    if (rs.getInt("b_level") > rs.getInt("nlevel")) {
                        sb.append("<li class='cc'><span>").append(rs.getString("name")).append("</span><img src='pic/arrow_ltr2.png' alt='xx'><ul class='dr hovON' data-level='").append(rs.getString("nlevel")).append("'>");
                    } else {
                        if (rs.getInt("b_level") < rs.getInt("nlevel")) {
                            sb.append("<li  data-id='").append(rs.getInt("id_in")).append("'><span>").append(rs.getString("name"));
                            int x = rs.getInt("nlevel") - rs.getInt("b_level");
                            while (x-- > 0) {
                                sb.append("</span></li></ul>");
                            }
                        }
                    }
                }
            }
            sb.append("<li id='exit'><span>Выход</span></li></ul></div>");

...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173778
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код вполне себе имеет право на жизнь. Может этот код - одноразовый.
Мы-же с вами не критикуем bash/python скрипты сисадминов.
А они - куда более убогие и одноразовые. И пишуться чтобы решить
сиюминутную задачу.

И какой смысл нам сейчас тут обсуждать рефакторинг и разделение
на layer этого сервлета если всё ТЗ мы нечитали и не знаем что с ним
будет дальше.

Это еще мой один брошеный камень в адрес "Фаулера головного мозга"
и болезни под названием хроническое недо-пере-проектирование всего и вся.

Кстати подход основанный на лямбда функциях предполагает что функция
действительно одноразовая и больше нигде не нужна. Только в этом коде-блоке.

Как говорил пингвин Командор:
- Крякнем. Плюнем. И замотаем скотчем!
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173796
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Вы немного лукавите...
Т.к. за первым вариантом скрывается класс. где есть куча аннотация с параметрами.

А во втором варианте класса нету чтоли? Он есть и в первом и во втором варианте, ну да в случае ОРМ там есть еще аннотация @Entity... :)
mad_nazgulЭто если не надо делать "JOIN".
Тогда еще надо повозиться с @OneToMany, @ManyToOne и выбрать стратегию для fetch (n+1 запросов таки...).

Опять же эта работа никуда не исчезает ни в первом ни во втором варианте. Я же говорил место ОРМ - это в основном довольно-таки прозрачный CRUD для сущностей которые ложатся один-в-один на таблицу. Для остальных случаев есть широкий спектр вариантов от хранимок до createNativeeSQL("select join join ")
mad_nazgulТ.е. по объему кода не меньше.

Гораздо меньше, декларативные транзакции, открытие коннешена, обработка исключений, маппинг в\из объекта уходят.
mad_nazgulА вот гибкости гораздо меньше.

С чего вдруг?
mad_nazgulЭто не говоря если не нужны рекурсивные запросы и прочие "плюшки" современного SQL.
Если нужны, то ХП.

Ну нужна ХП точечно - в чем проблема? CallableStatement в руки и впперед. Если процедур много - ну так зачем изначально брался ОРМ? ССЗБ :)

mad_nazgulТ.о. развитие проекта:
ORM -> ХП для того, что нельзя сделать в ORM -> вся БЛ в ХП -> Как мы избавились от ХП и стали спать спокойно -> ORM.
Так лучше сразу не использовать ORM, чем потом тратить силы на "выпиливание" ХП их проекта.
<:o)
Довольно спорно. Опять же надо просто хорошо понимать что дает ОРМ и когда его надо использовать, а когда - нет. тут все зависит от квалификации.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173806
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКод вполне себе имеет право на жизнь. Может этот код - одноразовый.
Мы-же с вами не критикуем bash/python скрипты сисадминов.
А они - куда более убогие и одноразовые. И пишуться чтобы решить
сиюминутную задачу.

И какой смысл нам сейчас тут обсуждать рефакторинг и разделение
на layer этого сервлета если всё ТЗ мы нечитали и не знаем что с ним
будет дальше.

Такой код не имеет права на жизнь ни в каком случае, и тут даже не надо смотреть ТЗ. Он ни дает ни ЕДИНОГО преимущества и создает огромную кучу потенциальных проблем. Это как заклеить дыру в стену жвачкой. Вы правы говоря об утилитах для админов, но это паблик сайт судя по всему, и подход у товарища не единоразовый а на постоянке. А в паблик сайтах вероятность изменений over 99%. Я просто по-человечески сочувствую человеку, который будет заниматься редизайном таких вот сайтов(ну там респонсив дизайн или адаптированный под мобилку, хотя в этом случае любой редизайн = переписыванию с нуля).
Вот вы опытный человек и к вам прислушиваются, а вы говорите такие вещи, которые поощряют лень и успокаивают неокрепшие умы молодых программистов, а потом приходят джуны и говорят вашими словами, начитавшись форумов.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173814
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодым и неокрепшим я читал курс основ по всем правилам как положено
на предприятии.

Но в рамках нашего топика я просто немного пошатал основы чтобы вызвать
дискурс. Вызвал? - Хорошо. Сомнения это всегда хорошо.

Как говорил Лавр Федорович Вунюков - Плохо когда на все ответы у нас нет вопросов!
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173815
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Это еще мой один брошеный камень в адрес "Фаулера головного мозга"
и болезни под названием хроническое недо-пере-проектирование всего и вся.


Ну давайте делать однострочные названия у переменных, называть классы A.java и B.java так ведь быстрее, не закрывать Reader, не проверять на нулл, все это излишнее.
Все-таки есть некоторые базовые принципы, которым надо следовать всегда и везде.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173817
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы демонизируете меня Бох с вами.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173818
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМолодым и неокрепшим я читал курс основ по всем правилам как положено
на предприятии.

Но в рамках нашего топика я просто немного пошатал основы чтобы вызвать
дискурс. Вызвал? - Хорошо. Сомнения это всегда хорошо.

Как говорил Лавр Федорович Вунюков - Плохо когда на все ответы у нас нет вопросов!

Да к вам претензий нет, просто люди обычно жадно впитывают то что им понятно и созвучно с их мыслями и тупо игнорят все остальное, ваши оговорки хороши для умных, солидных людей, а большинство просто увидит что вы не видите ничего плохого в том чтобы пихать резалтсет в вывод сервлета.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173945
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никА во втором варианте класса нету чтоли? Он есть и в первом и во втором варианте, ну да в случае ОРМ там есть еще аннотация @Entity... :)


Нету. Есть класс для БЛ, а не класс @Entity.
Например сейчас у меня задача взять данные из БД и разложить в классы. которые будут отправляться по web-сервису.
Не смотря на то, что там куча вложенных тегов, из БД все вытаскивается одним запросом.
Но для отправки нужно создать несколько классов.
А так читать в сущность, из сущности перекладывать в объекты.
И так обычно со всеми остальные задачами, которые не укладываются в стандартный CRUD.

забыл никОпять же эта работа никуда не исчезает ни в первом ни во втором варианте. Я же говорил место ОРМ - это в основном довольно-таки прозрачный CRUD для сущностей которые ложатся один-в-один на таблицу. Для остальных случаев есть широкий спектр вариантов от хранимок до createNativeeSQL("select join join ")


ORM подходят для очень стандартных CRUD'ов.
Но тогда удобно пользоваться Spring-data
Описал сущности, объявил интерфейс.
И все, работаешь с готовым слоем DAO.

Смысла в NativeQuery, лично я не вижу.
Мне проще работать с JdbcTemplate

забыл никГораздо меньше, декларативные транзакции, открытие коннешена, обработка исключений, маппинг в\из объекта уходят.


JdbcTempalte же! ;-)
Дает все что вы говорите. Но оставляет всю силу SQL.

забыл никНу нужна ХП точечно - в чем проблема? CallableStatement в руки и впперед. Если процедур много - ну так зачем изначально брался ОРМ? ССЗБ :)


Сами по себе ХП не проблема...
Проблема в том, что их начинают использовать не к месту.
При использовании ORM это происходит всегда...

забыл никДовольно спорно. Опять же надо просто хорошо понимать что дает ОРМ и когда его надо использовать, а когда - нет. тут все зависит от квалификации.

Вот!
В этом и проблема!
ORM всегда преподносится как "простой" способ работы с БД.
Но никто никогда не говорит, что ORM накладывает серьезные ограничения на работу с БД.
Единственным естественным способом работы с БД, является SQL.

Для себя я решил.
Если что-то нельзя сделать ч/з Spring-Data, то не надо использовать ORM. ;-)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39173947
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТакой код не имеет права на жизнь ни в каком случае, и тут даже не надо смотреть ТЗ.
голая фраза без обяснения - лай собаки в пустыне....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174046
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторТакой код не имеет права на жизнь ни в каком случае, и тут даже не надо смотреть ТЗ.
голая фраза без обяснения - лай собаки в пустыне....
Вадя, признавайся, ты даже про String.format похоже не слышал? Тебе не очевидна разница в читаемости между конкатенацией html и генерацией конечного html с помощью шаблона и данных?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174092
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,

Совершенно верно, есть куча инстурментов, spring-data тоже очень даже ничего, а есть еще nosql и тд. Только spring-data это в некоторой степени и есть облегченный ОРМ, в таком случае непонятно о чем спорите:) Если вы против Хибернейта и hql - так я тоже не фанат, все зависит от проекта. HQL писал последний раз лет 5 назад. Тут товарищ в принципе не понимает что такое MVC и Layer Separation, вот в чем беда
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174177
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaвадяпропущено...

голая фраза без обяснения - лай собаки в пустыне....
Вадя, признавайся, ты даже про String.format похоже не слышал? Тебе не очевидна разница в читаемости между конкатенацией html и генерацией конечного html с помощью шаблона и данных?

ну понятно, что надо нагородить большестрок кода, что по-больше заплатили.
если тебе не понято, что приведено в примере, то о чём речь?
там к примеру в зависимости от данных есть добавляется класс или нет.
в зависимости от данных строится весь html
сможешь это организовать с помощью прокладок?
давай повтори приведённые пример по своему, сравним число строк, читаемость кода.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174189
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchpashaпропущено...

Вадя, признавайся, ты даже про String.format похоже не слышал? Тебе не очевидна разница в читаемости между конкатенацией html и генерацией конечного html с помощью шаблона и данных?

ну понятно, что надо нагородить большестрок кода, что по-больше заплатили.
если тебе не понято, что приведено в примере, то о чём речь?
там к примеру в зависимости от данных есть добавляется класс или нет.
в зависимости от данных строится весь html
сможешь это организовать с помощью прокладок?
давай повтори приведённые пример по своему, сравним число строк, читаемость кода.

Говоришь тебя на собеседованиях прокидывали за некрасивые глаза? :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174202
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никвадяпропущено...


ну понятно, что надо нагородить большестрок кода, что по-больше заплатили.
если тебе не понято, что приведено в примере, то о чём речь?
там к примеру в зависимости от данных есть добавляется класс или нет.
в зависимости от данных строится весь html
сможешь это организовать с помощью прокладок?
давай повтори приведённые пример по своему, сравним число строк, читаемость кода.

Говоришь тебя на собеседованиях прокидывали за некрасивые глаза? :)
не прокидывали :)
сранительный код слабо ?
убеди меня, что у меня хуже...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174252
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязабыл никпропущено...


Говоришь тебя на собеседованиях прокидывали за некрасивые глаза? :)
не прокидывали :)
сранительный код слабо ?
убеди меня, что у меня хуже...

Эмм. ну подумай для начала что будет если вдруг понадобится менять табличный дизайн на верстку дивами... :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174262
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никmad_nazgul,

Совершенно верно, есть куча инстурментов, spring-data тоже очень даже ничего, а есть еще nosql и тд. Только spring-data это в некоторой степени и есть облегченный ОРМ, в таком случае непонятно о чем спорите:)


Spring-data это не ORM.
Т.к. он позволяет работать не только с СУРБД, но и noSql.
Это скорее толстый слой "синтаксического сахара", для работы с БД.

забыл никЕсли вы против Хибернейта и hql - так я тоже не фанат, все зависит от проекта. HQL писал последний раз лет 5 назад. Тут товарищ в принципе не понимает что такое MVC и Layer Separation, вот в чем беда

А зачем понимать?!
Главное уметь пользоваться гуглом и stackoverflow :-)
Если что тим лид волшебным пенделем объяснит, что и почему.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174275
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никвадяпропущено...

не прокидывали :)
сранительный код слабо ?
убеди меня, что у меня хуже...

Эмм. ну подумай для начала что будет если вдруг понадобится менять табличный дизайн на верстку дивами... :)
а если камень с неба?
таких если я могу привести море, на все случаи не угадаешь
поэтому под конкретное место - конкретное решение, если где потребуется (в возможных планах) что-то модифицировать - там будет отдельное решение.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174279
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяну понятно, что надо нагородить большестрок кода, что по-больше заплатили.
нету хуже случая, чем воинствующий дурачек.

вадяесли тебе не понято, что приведено в примере, то о чём речь?
о том, чтоб сделать понятно

вадясможешь это организовать с помощью прокладок?

нет конечно, но умру пытаясь

Код: html
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.
   <t:grid t:id="customersGrid"
            t:source="customersSource"
            t:pagerPosition="top"
            t:rowsPerPage="10"
            t:rowClass="currentRowClass"
            t:row="currentCustomer">


        <p:nameCell>
            <t:companyinfo company="currentCustomer"/>
        </p:nameCell>

        <p:supervisorCell>
            ${currentCustomer?.supervisor?.personal?.surname} ${currentCustomer?.supervisor?.personal?.name}
        </p:supervisorCell>

        <p:plzCell>
            ${currentCustomer?.address?.postcode?.bundesland?.country?.code}-${currentCustomer?.address?.postcode?.plz}
        </p:plzCell>

        <p:ortCell>
            ${currentCustomer?.address?.postcode?.ort}
        </p:ortCell>
    
        <p:empty>
            <div class="no-data">${message:General.noData}</div>
        </p:empty>

    </t:grid>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Customers {


    @Inject
    private CompanyService companyService;

    @Inject
    private Logger logger;

    @Inject
    private Messages messages;

    @Override
    public PaginatedGridDataSource<Customer> getCustomersSource() {
        return new CustomerGridDataSource(companyService.getCustomers());
    }

    //вот тебе класс
    public String getCurrentRowClass() {
        return currentCustomer.getIsValid() ? "" : " deleted";
    }
}



можно на каком-нибудь фримаркере или любом другом движке темплейтов генерить
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<table>
    <thead>
        <tr>        
            <td>${fieldName1}</td>
            <td>${fieldName2}</td>
            <td>${fieldName3}</td>
            <td>${fieldName4}</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <#list records as rec>
                <td class="${rec.even?then('even', 'odd')}">${rec.value1}</td>
                <td>${rec.value2}</td>
                <td>${rec.value3}</td>
                <td>${rec.value4}</td>
            </#list>
        </tr>
    </tbody>
</table>




можно какой-нить js-framework использовать. но никогда, слышь вадя, никогда не генери в серьезном проекте html с помощью print. тебя проклянут в веках.


вадядавай повтори приведённые пример по своему, сравним число строк, читаемость кода.
вперед, начинай сравнивать
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174281
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Spring-data это не ORM.
Т.к. он позволяет работать не только с СУРБД, но и noSql.
Это скорее толстый слой "синтаксического сахара", для работы с БД.


Замечание правильное, только в разрезе темы не существенное, ну да назовем это Object Persistence Storage Mapping, но это не отменяет того факта что это будет упрощающая обертка и выделенный слой.

mad_nazgulА зачем понимать?!
Главное уметь пользоваться гуглом и stackoverflow :-)
Если что тим лид волшебным пенделем объяснит, что и почему.

Ну там судя по уровню постов, волк-одиночка, сам себе архитектор дизайнер и проктолог.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174293
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНу там судя по уровню постов, волк-одиночка, сам себе архитектор дизайнер и проктолог.
с 30-летним опытом акцеса!!! так что нечего учить дядю, каким пальцем в попе колупаться, давайте уже считать строчки!
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174298
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязабыл никпропущено...


Эмм. ну подумай для начала что будет если вдруг понадобится менять табличный дизайн на верстку дивами... :)
а если камень с неба?
таких если я могу привести море, на все случаи не угадаешь
поэтому под конкретное место - конкретное решение, если где потребуется (в возможных планах) что-то модифицировать - там будет отдельное решение.

Тебе сказали что код говно, потому что не maintainable. Ты спросил почему не maintainable - тебе привели пример. Очевидно, что ты не имеешь представления о командной работе, разделении ролей и общих паттернах проектирования, списывая свою лень разобраться в этом на то что все дураки. Ну да и фиг с ним, но когда ты лезешь с советами к другим, то не обессудь когда получишь очередной пинок.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174306
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
утебя еще нет обращения к базе...
да за это количество строк ты получишь больше...
и ещё они в разных файлах
посмотреть в одном, переключиться на другой...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174334
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchpasha,
и ещё они в разных файлах
посмотреть в одном, переключиться на другой...

День считай сделан
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174336
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяутебя еще нет обращения к базе...
а вдруг там не база, а rest-client или вообще тестовая заглушка? oт того, что я допишу пару строк "псевдо"-кода, суть не поменяется. ну если мы не собираемся реально оценивать код кол-вом строк.

вадяда за это количество строк ты получишь больше...
из этой фразы я заключаю, что мой пример лучше, но тебе гордость не позволяет это признать так? честно говоря не знаю, в каких краях платят за кол-во кода.

вадяи ещё они в разных файлах
у тебя на кухне ингредиенты для борща отдельно хранятся или уже все сразу в кастрюле?


вадяпосмотреть в одном, переключиться на другой...
да, адские мучения, особенно если в блокноте пишешь. а ты вот когда html пишешь, у тебя кстати css отдельно или тоже все в одном мешке? ты не думал о том, что когда нужно поменять стиль таблицы, код доступа к данным не особо интересен, и наоборот - когда я хочу where модифицировать, html мне не нужен.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174362
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
на вдруг бывает пук, пишется под конкретные условия, а не на "а вдруг"
мне твой код не нравится, тебя устраивает- пиши так.
твои высказывания напоминают высказывания Хрущёва по поводу выставки...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174391
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяна вдруг бывает пук, пишется под конкретные условия, а не на "а вдруг"
если у тебя ума немного больше, чем у калькулятора, то пишешь всегда (когда речь о проекте, а не скрипте) так, чтобы максимально легко было код тестировать, модифицировать и расширять. невозможно предусмотреть все, но пытаться можно. хотя бы для начала разделяя код на слои?

вадямне твой код не нравится, тебя устраивает- пиши так.
а судьи кто? можно поинтересоваться твоим образованием и квалификацией?

вадятвои высказывания напоминают высказывания Хрущёва по поводу выставки...
слышал о том, что воинский устав написан кровью? примерно догадываешься почему так говорят? как думаешь, у нас все по-другому или аналогия уместна?

з.ы. ты так и не ответил - как несомненный эксперт в области конкатенации строк, ты про String.format слыхал или в акцесе такого не было?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174421
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
всё, я закончил спорить, надоело.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174431
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchpasha,
всё, я закончил спорить, надоело.

...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174569
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaесли у тебя ума немного больше, чем у калькулятора, то пишешь всегда (когда речь о проекте, а не скрипте) так, чтобы максимально легко было код тестировать, модифицировать и расширять. невозможно предусмотреть все, но пытаться можно.

Откровенно говоря одно противоречит другому. Попытка предусмотреть все приводит к тому, что кто-бы не пришел со стороны ему потребуется очень много времени въехать в проект.
Говнокод (по методу делаем самым простым способом) выигрывает у этого подхода в разы. Ибо понятно что делается и как можно поменять. Другое дело, что при изменении вводных его приходится переделывать полностью чуть реже чем всегда.
Но понять почему данные пришедшие в сервлет не записались в БД. При том, что метод состоит из одного query которое тут же забито в виде строковой константы гораздо проще, чем искать на каком слое абстракции остался клон сущности, о котором известно Хиберу и значениями которого он перезатрет то, что сохранилось в базу по коммиту.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174582
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что если мы возьмем 100 синьоров и дадим им одно ТЗ с одним сервлетом, одним запросом и одним
датасорсом и попросим реализацию. При доп. условии что от него (разработчика) доработок больше не будут
требовать - то ... получим 100 разных решений. И все они будут по своему правы
потому-что каждый из них прочитает ТЗ и будет делать так как считает целесообразным с позиций своего
опыта, знаний фреймвороков и каждый будет закладывать некую толику масштабирования (даже если в ТЗ
про это не было ни слова) и малую толику ORM-а и гибкости и красивости а также немного наивного
стремления следовать SOLID даже там где его не просили вообще.

А println в сервлете тоже имеет право на существование. Я его использовал когда нужно было стянуть логи
с себ-порта, а заказчик принципиально не давал нам никаких доступов к SSH.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174602
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а за String.format спасибо что напомнили, просто забыл :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174604
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевОткровенно говоря одно противоречит другому.

Ничуть.
Сергей АрсеньевПопытка предусмотреть все приводит к тому, что кто-бы не пришел со стороны ему потребуется очень много времени въехать в проект.

Кто говорит о предусмотреть все? Разделение UI и серверной логики это азы, которое должно быть в каждом проекте(если ты только не пишешь один и сам для себя). Излишняя либеральность тут ни к чему, вы только поощряете говнокодерство. Опытному программисту не надо спрашивать совет когда можно наговнокодить, он это знает потом и неспаными ночами.
Сергей АрсеньевГовнокод (по методу делаем самым простым способом) выигрывает у этого подхода в разы. Ибо понятно что делается и как можно поменять.

Неправда
Сергей Арсеньев Другое дело, что при изменении вводных его приходится переделывать полностью чуть реже чем всегда.

Да, объясните это заказчику захотевшему адаптивную верстку, ведь это круто. Приложение то работает, надо всего лишь нанять хорошего дизайнера, да?
Сергей АрсеньевНо понять почему данные пришедшие в сервлет не записались в БД. При том, что метод состоит из одного query которое тут же забито в виде строковой константы гораздо проще, чем искать на каком слое абстракции остался клон сущности, о котором известно Хиберу и значениями которого он перезатрет то, что сохранилось в базу по коммиту.

Фигасе какие нежные разработчики.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174612
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ думаю что если мы возьмем 100 синьоров и дадим им одно ТЗ с одним сервлетом, одним запросом и одним
датасорсом и попросим реализацию. При доп. условии что от него (разработчика) доработок больше не будут
требовать - то ... получим 100 разных решений. И все они будут по своему правы

Как жаль что такого не бывает в реальности :)
maytonпотому-что каждый из них прочитает ТЗ и будет делать так как считает целесообразным с позиций своего
опыта, знаний фреймвороков и каждый будет закладывать некую толику масштабирования (даже если в ТЗ
про это не было ни слова) и малую толику ORM-а и гибкости и красивости а также немного наивного
стремления следовать SOLID даже там где его не просили вообще.

Есть программирование для себя и промышленное. Так вот, в промышленном есть такое понятие как культура программирования. Не надо предусматривать все, а надо просто сделать проект таким, какой бы ты хотел видеть любой легаси проект. Да, у каждого свой опыт и знания, и трудно предсказать каким этот код будет смотреться со стороны, именно для этого и существуют best practices, можно кое где и наговнокодить, но это должен быть концентрированный говно код в одном месте, которое можно взять и переписать.
maytonА println в сервлете тоже имеет право на существование. Я его использовал когда нужно было стянуть логи
с себ-порта, а заказчик принципиально не давал нам никаких доступов к SSH.

а в скольких проектах вы не использовали println ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174620
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевОткровенно говоря одно противоречит другому. Попытка предусмотреть все приводит к тому, что кто-бы не пришел со стороны ему потребуется очень много времени въехать в проект.
не нахожу в цитируемом абзаце ничего о том, что понимать такую структуру в целом становится легче, чем если бы все было в одном супер-классе :( . так что не вижу противоречия

Сергей Арсеньев Другое дело, что при изменении вводных его приходится переделывать полностью чуть реже чем всегда.
именно, см. "модифицировать и расширять".


Сергей АрсеньевНо понять почему данные пришедшие в сервлет не записались в БД. При том, что метод состоит из одного query которое тут же забито в виде строковой константы гораздо проще, чем искать на каком слое абстракции остался клон сущности, о котором известно Хиберу и значениями которого он перезатрет то, что сохранилось в базу по коммиту.бывает. но в целом получается мы жертвуем качеством в угоду сиюминутной выгоды в простоте.

[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174637
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА println в сервлете тоже имеет право на существование. Я его использовал когда нужно было стянуть логи
с себ-порта, а заказчик принципиально не давал нам никаких доступов к SSH.
тут как-бы никто не против карандашей. мы против ковыряния ими в ушах ;) . да и то из чисто человеколюбивых соображений. хотя в данном случае изначально видно - все усилия бесполезны, спор не имеет смысла. с другой стороны у меня сегодня мало работы
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174647
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ника в скольких проектах вы не использовали println ?
Во всех остальных
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174668
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,

ДиезПредставьте, что вам достается в наследство код, подобный этому:

А код ревью на что? Такие гадости либо задокументированы хорошо должны быть, либо выброшены на этапе ревью. Будто на этих ваших Ц++ такого не бывает.

maytonЯ-бы по другому сказал. На Java всегда можно найти менторов или синьоров которые
могут объяснить то или другое поведение. Если сложная ситуация с реверс инжинирингом
или с анализом унаследованного кода возникнет в Scala - куда бежать-та? Сразу в Сан-Франциско?
Синьоров толком нету. И даже не суть в реверсе. Реверс-то любой студент сделает с дебаггером.

Ещё раз спрошу: Чем enterprise Java от enterprise Scala отличается?
Какие проблемы с вопросами? На Stackoverflow очень хорошо по Скале отвечают.
Читаем Scala in action, читаем Programming in Scala.
У Раста сообщество меньше - программируют как-то.



maytonИ какой смысл нам сейчас тут обсуждать рефакторинг и разделение
на layer этого сервлета если всё ТЗ мы нечитали и не знаем что с ним
будет дальше.

Можно игнорировать best practices и говнокодить чего душе угодно. А когда проект выйдет за рамки генерации персональных веб-страничек - получаем ворох проблем.


maytonак говорил пингвин Командор:
- Крякнем. Плюнем. И замотаем скотчем!

Отличный подход. На ПХП любили практиковать.


вадяутебя еще нет обращения к базе...
да за это количество строк ты получишь больше...
и ещё они в разных файлах
посмотреть в одном, переключиться на другой...

Действительно. Гораздо удобней говнячить всё в одном файле строк на 5К, правда?


mayton немного наивного
стремления следовать SOLID даже там где его не просили вообще.

Потому что человек работающий над большими, динамичными проектами привык делать всё так, чтобы потом не переписывать. Наверное потому сеньёры не занимаются "ТЗ с одним сервлетом".


Сергей АрсеньевГовнокод (по методу делаем самым простым способом) выигрывает у этого подхода в разы. Ибо понятно что делается и как можно поменять.

Legacy на С++ не случалось, значит? Ну-ну.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174715
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverЕщё раз спрошу: Чем enterprise Java от enterprise Scala отличается?
Какие проблемы с вопросами? На Stackoverflow очень хорошо по Скале отвечают.
Читаем Scala in action, читаем Programming in Scala.
У Раста сообщество меньше - программируют как-то.

По поводу отличий - сделаем по другому. Я просто буду
периодически поднимать в Java топики, ответы на которые я не нашёл
в Stackoverflow.

Обычно мои вопросы заключаются не в том "как это сделать"
а в том "почему сделано именно так" и "как еще можно было сделать".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton немного наивного
стремления следовать SOLID даже там где его не просили вообще.

Потому что человек работающий над большими, динамичными проектами привык делать всё так, чтобы потом не переписывать. Наверное потому сеньёры не занимаются "ТЗ с одним сервлетом".

Нет ли здесь противоречия с KISS или YAGNI ? Автора, написавшего JSP-страничку
с prinln ругали всем миром.

Но никто не видел ТЗ. Как вы считаете коллега, нет ли в этом какой-то натяжки?
Или лицемерия? Синьор не может себе позволить написать "прямой" код? Он обречён
hello-world писать через фабрику + синглтон + строитель?

Он не может себе позволить быть "простым и кротким" как говорил один
бородатый философ пару тыщ лет назад?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174725
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто оставлю это здесь...

[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174726
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverОтличный подход. На ПХП любили практиковать.

Это была шутка!
А на ПХП я никогда не писал вобщем-то.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174728
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если что, есть транскрипт
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174729
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Нафига вот это занудная игра в адвоката дьявола, если очевидно что "художник реально так видит"? Коллега чисто случайно забыл про существование String.format, ты сам-то веришь при таком раскладе в ТЗ на "прямой код"? У себя на заднем дворе можно хоть коннекты не закрывать, но на серьезных щах утверждать, что код отличный и вообще докажите что нет - это детский нигилизм.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174730
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashamayton
Нафига вот это занудная игра в адвоката дьявола, если очевидно что "художник реально так видит"? Коллега чисто случайно забыл про существование String.format, ты сам-то веришь при таком раскладе в ТЗ на "прямой код"? У себя на заднем дворе можно хоть коннекты не закрывать, но на серьезных щах утверждать, что код отличный и вообще докажите что нет - это детский нигилизм.
Я уделил этому коду ровно 2 секунды. И вообще он мне не интересен.
Мне было интересно другое. Предел комплексности при решении задачи
вывода 1 резалтсета из 1 сервлета.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174735
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМне было интересно другое. Предел комплексности при решении задачи
вывода 1 резалтсета из 1 сервлета.
а задача как звучит ;)?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174743
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDoSOfRedRiverпропущено...


Потому что человек работающий над большими, динамичными проектами привык делать всё так, чтобы потом не переписывать. Наверное потому сеньёры не занимаются "ТЗ с одним сервлетом".

Нет ли здесь противоречия с KISS или YAGNI ? Автора, написавшего JSP-страничку
с prinln ругали всем миром.


1) "S.O.L.I.D. сложные", - миф. Потому и противоречия нет. KISS и YAGNI - методологии, а не математика - сущности разного класса. Про их преимущества\недостатки достаточно хорошо известно, к тому же.
2) Синьор может позволить, вот только никто не нанимает программиста за 1.5К$ долларов писать Hello World'ы, смекаешь? На своих проектиках ведь можно что угодно делать. Речь идёт о больших и сложных вещах, в которых много людей участвует.


chpashaНафига вот это занудная игра в адвоката дьявола, если очевидно что "художник реально так видит"?
Неистово плюсую. Очевидно, что многое, чего тут написано - не имеет под собой объективной основы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174765
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читал только первую страницу.
у нас так:
Код: c#
1.
2.
3.
4.
 return text.Split("[ \\t,.?!:;\"()\\[\\]«»…]+".ToArray())
                .Where(w => !string.IsNullOrWhiteSpace(w))
                .GroupBy(w => w)
                .ToDictionary(w => w.Key, w => w.Count());
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174767
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так почище
Код: c#
1.
2.
3.
4.
  return text.ToUpper().Split("[ \\t,.?!:;\"()\\[\\]«»…]+".ToArray())
                .Where(w => !string.IsNullOrWhiteSpace(w) && w.All(char.IsLetter))
                .GroupBy(w => w)
                .ToDictionary(w => w.Key, w => w.Count());
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174820
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
"[ \\t,.?!:;\"()\\[\\]«»…]+"

Код: plaintext
 \W+ 
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174933
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никРазделение UI и серверной логики это азы, которое должно быть в каждом проекте
Но не должно быть самоцелью, а должно подчинятся общей логике решения задачи.
Другими словами если вам надо соединить линией две точки на карте, это можно сделать на клиенте (js) и на сервере (java), но где зависит от возможностей того и другого и целесообразности, а не как от необходимости выполнять правильный паттерн программирования. IMHO конечно. С другой стороны волшебная кнопка, это конечно моветон.

забыл ник вы только поощряете говнокодерство.
Не совсем - я не люблю быдлокодерства - у которого шаблон важнее сути.
Хуже в сопровождении только код гуру - ибо "почему это вообще работает" порой он даже сам вспомнить не может.

С другой стороны Вы правы
забыл никФигасе какие нежные разработчики.
Чем сложнее тем дороже. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174943
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaбывает. но в целом получается мы жертвуем качеством в угоду сиюминутной выгоды в простоте.
Вы не поняли, не сиюминутной. А с точки зрения сопровождения на предмет нахождения багов и вхерачивания костыля. С точки зрения развития функционала большое количество костылей может начать мешать настолько что придется все переделывать.
Другая крайность, когда из-за большого количества слоев универсальной абстракции теряется часть смысловой информации и, чтобы она появилась в нужном месте приходится все переделывать.
Собственно опыт "сеньёра" и позволяет найти подход, который не позволяя уйти в крайности решает задачу с приемлемым уровнем гибкости и масштабируемости программы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39174966
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно.
Никак не ожидал, что в теме по Java 8 будет обсуждаться слой VIEW где css+html+jsp+ResultSet в одном флаконе-файле.
Как справедливо написали выше, те кто ел устриц, знает где можно так писать.
А если кто не ел устриц - толку описывать различия вкуса.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39176543
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никmaytonЭто еще мой один брошеный камень в адрес "Фаулера головного мозга"
и болезни под названием хроническое недо-пере-проектирование всего и вся.


Ну давайте делать однострочные названия у переменных, называть классы A.java и B.java так ведь быстрее, не закрывать Reader, не проверять на нулл, все это излишнее.
Все-таки есть некоторые базовые принципы, которым надо следовать всегда и везде.


Java - язык в этом смысле абсолютно дебильный, нельзя в нем не писать классы, и иногда классы можно и нужно называть A или B.

Под однострочными переменным наверно имелось в виду однобуквенные, они тоже иногда допустимы. Формулы, или маленький компактный код, который не нуждается в осмысленности названия переменной.

так что нет никаких базовых принципов, которым нужно сделаю всегда и везде.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39176544
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
засрали топик, блин...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39176548
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivтак что нет никаких базовых принципов, которым нужно сделаю всегда и везде.
базовые это не абсолютные).
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39186678
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverИ чем таким enterprise Scala от enterprise Java отличается? Стеком и только?
И вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$.
Некто Девид Поллак рассуждает о человеческом факторе
в вопросе применения Scala на проектах.

https://habrahabr.ru/post/134897/
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39186704
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

занятный мужик.
здесь http://blog.goodstuff.im/golang
он описывает свои впечатления от GO:

Рассказывает про то, как он "на раз" въехал в GO.
И комфортно ему было в GO, как в домашних тапочках.
Но глупее, с его точки зрения, языка чем GO, не существует в природе.
Так как, там нет ... только представь... в этом самом нелепом GO - трай-кетча-то и нет совсем - ну прям как в замшелом си.
Не иначе, как тот GO конченные чудаки придумывали.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39186730
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyтрай-кетча-то и нет совсемэто тоже сахар (:
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39186833
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Поллак, конечно, жуткий сноб, и самомнения ему не занимать, но, в целом, верные вещи говорит. Достаточно посмотреть на мистификации вокруг Скалы или какого-нибудь ЛИСП о их сложности надуманной.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39186863
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton,

Поллак, конечно, жуткий сноб, и самомнения ему не занимать, но, в целом, верные вещи говорит. Достаточно посмотреть на мистификации вокруг Скалы или какого-нибудь ЛИСП о их сложности надуманной.
Lisp-то как раз не сложен. Он просто интересен своей memory-model.
И занимает мозг как brainfuck. На нём просто интересно что-то делать
для разминки мышления. Впрочем к практике это имеет мало отношения.

Я неоднократно пытался в одном проекте "присобачить" скалу или груви
для некоторых прикладых и некритичных задач типа кодо-генераторов или генераторов
стабов для самописных ORM но у меня к сожалению дело остановилось
из за поддержки команды. Три из трех разработчиков весьма прохладно
отнеслись к этому вопросу. А без кворума ничего не выходило.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39186957
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз к несчастному Поллаку.

https://habrahabr.ru/post/134897/ Ну, что касается меня, я могу решать интегралы
во сне, и я не смогу правильно написать слово
даже если от этого будет зависеть моя жизнь.
У разных людей — разные навыки.

Разные люди ценят разные вещи. Существует
целый класс людей, которые любят компьютеры
и любят писать код. Я среди них. И существует
класс людей, которые не поставили бы программирование
в топ-5 своих любимых занятий.
Я его очень понимаю. Я чувствую что даже сейчас
многие гуманитарные науки типа истории мне
в принципе недоступны. Так-же как и некоторые
религиозно-философские учения. И я очень плюсую
его мысли о навыках. Это глубже чем просто
школьная или университетская программа. Это
как способность воспринимать музыку. У некоторых
она есть. У некоторых нет. И я понимаю тех
разработчиков которые не хотят воспринимать
языки сложнее чем Java (что кстати им не мешает
быть эффективными решателями бизнес задач).
Такова селяви. Но мне всегда бизнес-задачи
были скушны. Даже в самых
сложных постановках задача сводилась к 4
арифметическим операциям над деньгами
(кортежами записей об услугах телефонии
или банкинга). Это как перекладывание
вещей из одной кошёлки в другую.
Словом - рутина с большой буквы.

Здесь Scala или Lisp или Haskell - это как философская
мысль. Как глоток свежего воздуха. Или как генерализация
всех-всех знаний накопленных за 100 лет от смерти Тьюринга.

По сути итог. Что мы вообще достигли за историю кибернетики...
И когда мне показывают перекладывание одних объектов
в другие с использованием модных фреймворков - мне
становится скушно.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187026
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реальность: https://habrahabr.ru/post/134897/ Но большинство-то делает ORM, CRUD, утилиты, и прочие штуки в стиле заполни-форму-и-сохрани-в-базе. Вот где большинство разработчиков и где деньги.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187042
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

авторза 100 лет от смерти Тьюринга.

Тьюринг отравился в 1954 году. Малек подождать до столетия надо.

А пока 100-летие не наступило - ну, смотайся в Питер - вдруг там какой-нибудь Котлин-2 замышляют, а ты тут с места на место перекладываешь crud.

А "селяви", имхо, не в том, что скучно, а в том, что единственное, что видит программист - это код.
Но, чем дальше, тем меньше у программиста даже отдаленного представления о том - как же он работает.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187289
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby Тьюринг отравился в 1954 году. Малек подождать до столетия надо.

Ну дай бог. Я наверное имел в виду дату его рождения (это примерно было в начале 20 века).

А пока 100-летие не наступило - ну, смотайся в Питер - вдруг там какой-нибудь Котлин-2 замышляют, а ты тут с места на место перекладываешь crud.

Я про Котлин узнал неделю назад если чесно. Лекции Андрея Бреслава качнул. Лежат на медиаплеере.
Буду ехать куда-нить - послушаю.

А "селяви", имхо, не в том, что скучно, а в том, что единственное, что видит программист - это код.
Но, чем дальше, тем меньше у программиста даже отдаленного представления о том - как же он работает.
Я вообще - ужасный идеалист и зануда. У меня есть хороший приятель мега синьорного
левла который мне всегда говорит одну и ту-же фразу - "мы не пишем КОД. Мы пишем
Бизнес-ФИЧИ". Я с ним до сих пор не согласен. Но не потому что он не прав а потому
что в сегменте It мы находим своё. Он находит проекты и оплату. Я нахожу - fun и удовольствие
от процесса решения головоломок. И каждая из них - challange. Вызов.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187294
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDoSOfRedRivermayton,

Поллак, конечно, жуткий сноб, и самомнения ему не занимать, но, в целом, верные вещи говорит. Достаточно посмотреть на мистификации вокруг Скалы или какого-нибудь ЛИСП о их сложности надуманной.
Lisp-то как раз не сложен. Он просто интересен своей memory-model.
И занимает мозг как brainfuck. На нём просто интересно что-то делать
для разминки мышления. Впрочем к практике это имеет мало отношения.

Я неоднократно пытался в одном проекте "присобачить" скалу или груви
для некоторых прикладых и некритичных задач типа кодо-генераторов или генераторов
стабов для самописных ORM но у меня к сожалению дело остановилось
из за поддержки команды. Три из трех разработчиков весьма прохладно
отнеслись к этому вопросу. А без кворума ничего не выходило.

А это нормальная ситуация. Я на сервере написал скрипт на ELisp небольшой, девять строк, дык мне ПМ говорит: "Перепиши на Питон, с твоей тарабарщиной потом никто не разберётся". И стоит ли ради девятистрочника тянуть дистрибутив питона на сервер?
Проблема современного программиста в том, что он не желает свой кругозор расширять. С поразительным упорством эти луддиты выступают против любого апгрейда, нововведения. Лучше бы работали так.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187356
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

я бы также сказал
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187357
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver, удивительно что у вас ПМ-ы так глубоко вникают в процесс.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187359
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverвыступают против любого апгрейда+256

Поэтому до сих пор старые JBoss'ы, где-то JDK 6-й и т.д.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187372
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Я нахожу - fun и удовольствие
от процесса решения головоломок. И каждая из них - challange. Вызов.
в очередной раз высказываешь мои мысли
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187588
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У клиентов нет задачи использовать последние версии JDK/JBoss/etc.
Есть задача "шопвсёработало", а миграция на новую версию далеко не всегда - тривиальная задача.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187595
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverА это нормальная ситуация. Я на сервере написал скрипт на ELisp небольшой, девять строк, дык мне ПМ говорит: "Перепиши на Питон, с твоей тарабарщиной потом никто не разберётся". И стоит ли ради девятистрочника тянуть дистрибутив питона на сервер?

Что-то у меня не сходится. Раз надо тянуть дистрибутив Питона, то на сервере не Линух, а Винда? Но если Винда, то ELisp-а там вроде по умолчанию тоже нет. То есть дистрибутив ELisp тянуть ради девятистрочника стоило.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39187623
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak,

А я не помню, может и был Питон. Емакс уже стоял как рабочий редактор. Здесь суть сам диалог.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39193026
13-й Пилигрим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Есть метод
Код: java
1.
2.
3.
public void someMethod(Object[] arrayOfObject) {
        someOtherMethod(arrayOfObject)
    }


необходимо в массиве объектов все строки привести к нижнему регистру. Решил поиграться с Stream API. Получилось как-то так
Код: java
1.
2.
3.
4.
5.
6.
public void someMethod(Object[] arrayOfObject) {
        someOtherMethod(Arrays.stream(arrayOfObject)
                .map(obj -> obj instanceof String ? ((String) obj).toLowerCase() : obj)
                .toArray()
        )
    }


Насколько это коряво? Можно ли лучше?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39193068
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Foo {

  def toLower(arr : Array[Object]) : Array[Object] = {
    arr.map {
      case s: String => s.toLowerCase
      case element => element
    }
    
  }

}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39193070
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й Пилигримнеобходимо в массиве объектов все строки привести к нижнему регистру.
Насколько это коряво? Можно ли лучше?
Гетерогенные коллекции и массивы это уже коряво само по себе, как и использование типа Object.
Корявые входные данные требуют от вас корявых решений.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39194882
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz13-й Пилигримнеобходимо в массиве объектов все строки привести к нижнему регистру.
Насколько это коряво? Можно ли лучше?
Гетерогенные коллекции и массивы это уже коряво само по себе, как и использование типа Object.
Корявые входные данные требуют от вас корявых решений.

На самом деле, не гетерогенные. Гетерогенность подразумевает разнородность данных, здесь же хранится массив указателей на Object.
Свойство этого массива хранить ссылки на другие объекты называется ковариантностью.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195033
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,
Тот случай когда хотел сумничать а в результате пернул в лужу. Причём тут вообще свойства массива? Речь исключительно о данных внутри, гетерогенность которых приводит к необходимости делать проверку типа в коде.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195588
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Blazkowiczот случай когда хотел сумничать а в результате пернул в лужу.

Я тоже вот что-то такое подумал, когда твоё сообщение прочитал.
Где тут гетерогенность то? Чем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195599
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverЯ тоже вот что-то такое подумал, когда твоё сообщение прочитал.

Что-то подумал, но не понял что?

DoSOfRedRiverГде тут гетерогенность то?
В данных. Сколько раз это нужно написать чтобы до тебя дошло?

DoSOfRedRiverЧем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ?
У тебя ещё и с логикой туго? То что коллекция может содержать гетерогенные данные ещё не значит что данные в ней действительно гетерогенные. И то что данные гетерогенные в данном конкретном случае, ещё не значит что все коллекции имеют гетерогенные данные. Урок логики окончен. Переваривай.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195605
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля?
Или ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты?
Может TC действие, в котором важно, что там строка или не строка важно только раз в год.
А во всех остальных случаях нужен именно Object.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, DosOfRedRiver

девочки не ссортьесь. Пустяк ведь. Топик нормальный. Нормально обсуждаем. К чему нам закрытие.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195662
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевВместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля?
Да, прописные истины , вроде

From Effective C++, by Scott MeyersAnytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else," slap yourself

Касательно проверки на тип. Гетерогенные данные приводят к тому что тебе нужно писать такую проверку в каждом месте, где ты собрался их использовать.
Касательно проверки поля, это практически так же плохо, так как доступ к полю не виртуален. Мало того он ещё и инкапсуляцию, в большинстве случаев, нарушает, учитывая приведенный код.

Сергей АрсеньевИли ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты?

И эти люди предлагают мне не спорить о терминологии. "Тождественность" здесь каким боком вообще. Я предлагаю не хранить в коллекциях объекты разных типов. Если у тебя массив типа Object, то оперировать ты должен только методами типа Object с этим массивом. Если тебе приходится смотреть внутрь каждого объекта, чтобы понять можешь ли ты им оперировать, то значит где-то ты уже наговнокодил.

Сергей Арсеньев Может TC действие, в котором важно, что там строка или не строка важно только раз в год.
А во всех остальных случаях нужен именно Object.
Может это уже обсуждение сферических коней в вакууме? Частота выполнения кода как относится к его качеству вообще? Или опять качество меряем производительностью?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195756
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczDoSOfRedRiverГде тут гетерогенность то?
В данных. Сколько раз это нужно написать чтобы до тебя дошло?

DoSOfRedRiverЧем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ?
У тебя ещё и с логикой туго? То что коллекция может содержать гетерогенные данные ещё не значит что данные в ней действительно гетерогенные. И то что данные гетерогенные в данном конкретном случае, ещё не значит что все коллекции имеют гетерогенные данные. Урок логики окончен. Переваривай.

Ага. То есть, сначала у нас были:

BlazkowiczГетерогенные коллекции и массивы

а теперь появились "гетерогенные данные". Можно узнать, что это за отношение гетерогенности такое?

Давай ещё раз, постарайся: Object [] - это массив указателей на Object. Он [массив] не является гетерогенным, не содержит "гетерогенных данных". Что такое гетерогенная коллекция я уже объяснил. Есть что по существу возразить?


mayton,

Обсуждение терминологии - важная часть индустрии. А по стилистике - всё ОК, никто на личности не переходит.
Самому хочется знать. ВДРУГ я не прав.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195762
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевВместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля?
Или ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты?
Может TC действие, в котором важно, что там строка или не строка важно только раз в год.
А во всех остальных случаях нужен именно Object.

Тут соглашусь с Blazkowicz. Как правило, такие вот сигнатуры - зло во коде, и нафиг не нужны. Почти любую функцию можно переписать без Object.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195792
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

Натянул сову на глобус. Молодец.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195805
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverМожно узнать, что это за отношение гетерогенности такое?
То самое, которое требует instanceof String

DoSOfRedRiverОн [массив] не является гетерогенным, не содержит "гетерогенных данных".
Весь интернет пользуется, а у тебя "не является".
http://stackoverflow.com/questions/16363547/how-to-declare-an-array-of-different-data-types

DoSOfRedRiverЧто такое гетерогенная коллекция я уже объяснил.
Объяснил он. Теперь гуглу объясни:
https://www.google.com/search?q=define: heterogenous collection
https://wiki.haskell.org/Heterogenous_collections Does some kind of collection of objects with different types in Haskell exist?
Вопросы?

DoSOfRedRiverЕсть что по существу возразить?

Ты тут не первый кто пытается таким способом самоутвердится. Но уж если обосрался, имей смелость в этом признаться хотя бы себе.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39196217
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Слушай, ты меня утомил.

BlazkowiczТо самое, которое требует instanceof String
instanceof требуется чтобы не словить ошибку приведения типов.
А это твоё отношение как-то записывается, или оно только в твоей голове существует, и на математический язык не перекладывается?


BlazkowiczDoes some kind of collection of objects with different types in Haskell exist?
Классно, выдрал цитатку из статьи про ДРУГОЙ ЯЗЫК который НЕ ПОДДЕРЖИВАЕТ ООП. Я могу тебе эссе на "Идиота" Достоевского запостить сюда.
btw, если дальше читал, там написано следующее:
https://wiki.haskell.org/Heterogenous_collections Obviously, tuples are an example, but they have a fixed length. To compare tuples vs lists:
Tuples - Heterogeneous
Lists - Homogeneous

Ты так и не ответил на вопрос:
DoSOfRedRiverЧо теперь, любая ковариантная коллекция в Джаве стала гетерогенной?

Если так, то можешь не отвечать дальше, нам не о чем поговорить будет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39196746
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverСлушай, ты меня утомил.

Хорошая попытка вызвать жалость. Но нет.

DoSOfRedRiverА это твоё отношение как-то записывается, или оно только в твоей голове существует, и на математический язык не перекладывается?
Какой нахрен математический язык? Мы тут что дисер защищаем?

DoSOfRedRiverКлассно, выдрал цитатку из статьи про ДРУГОЙ ЯЗЫК который НЕ ПОДДЕРЖИВАЕТ ООП. Я могу тебе эссе на "Идиота" Достоевского запостить сюда.

Тебе удобно не замечать всех остальных ссылок из гугла. Ну, что же. Бывает. ООП тут вообще при чем??? Типизация есть? Так вот речь о ней.

DoSOfRedRivertuples vs lists:
Tuples - Heterogeneous
Lists - Homogeneous
А вот это уже конкретика хаскеля. Но тебя этот факт мало волнует. Ты готов за любую нелепость зацепиться?

DoSOfRedRiverТы так и не ответил на вопрос:
DoSOfRedRiverЧо теперь, любая ковариантная коллекция в Джаве стала гетерогенной?
Ты так и не понял ответ. Речь не о коллекции как типе и её свойствах, речь о коллекции как наборе данных.

DoSOfRedRiverЕсли так, то можешь не отвечать дальше, нам не о чем поговорить будет.
Ну, так и не истери, если тебе не о чем говорить.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39196753
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот никому не известный сайт пишет:
Коллекция может хранить объекты только одного или различных типов. Во втором случае говорят о гетерогенной коллекции.

А вот никому не известный автор
http://www.k-press.ru/cs/2008/3/generic/generic.asp Теория и практика Java. Эксперименты с generic-методами
Автор: Брайен Гетц
...
С другой стороны, raw-тип List является гетерогенным;
...

Оригинал, если вдруг кто-то решит что это отсебятина переводчика
http://www.ibm.com/developerworks/library/j-jtp04298/

Ну, что? Тут уже не так просто ляпнуть, что Хаскель это не ООП язык, поэтому термины типизации там совсем не такие?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39197167
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

Всё я понял, причину твоего заблуждения. Ты увидел, что тип параметра Object[], и ты знаешь что это не очень хорошо и решил что именно по этой причине я называю такой массив гетерогенным. А это не так. Object[] это, конечно, не очень хорошо, но это не корень проблемы, а её следствие. Проблема в том что автор в этом массиве хранит гетерогенную коллекцию, которая требует от него явных проверок на тип. Это ключевая проблема. То есть речь идёт не о коллекции-типе, как тебе показалось, а о коллекции-объекте, как состоянии. И это не только ключевая проблема, но и на много более критичная проблема, по сравнению с использованием типа Object[]. Что тоже не фонтан, но, не вызывает таких проблем.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198035
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczКасательно проверки на тип. Гетерогенные данные приводят к тому что тебе нужно писать такую проверку в каждом месте, где ты собрался их использовать.

Этак мы дойдем до - нафиг нужно наследование? Или куча хреновый способ размещать объекты в памяти - все превращает в свалку. :)
Не везде где собрался использвать, а там гда от этого что-то зависит.
Если у людей вся логика построена на вызове метода hashCode() и equals()
Или вообще это коллекция со списком мониторов. Зачем им разные списки?

Да ТС может захотел на время засунуть туда логгер для строк - ему надо проверять строка не строка. Но основную логику перефигачивать ради такой задачи глупо, IMHO.


Blazkowicz Я предлагаю не хранить в коллекциях объекты разных типов.

Хорошее решение в 99% случаев.

BlazkowiczМожет это уже обсуждение сферических коней в вакууме? Частота выполнения кода как относится к его качеству вообще? Или опять качество меряем производительностью?
Он самый в вакууме. Хороший код это тот, который делает то что нужно и не делает того, что не нужно. Если этот код выполняет что-то нужное за приемлемое время, а с разнесеннием по 100500 коллекций простую операцию получения итератора превращает в танцы с бубном, то это плохо.
Если же для каждого типа объекта нужен свой обработчик, то свалка это плохо.

P.S. Да и свалка у ТС могла возникнуть по наследству. В этом случае совет - это плохо равнозначен совету игроку в тетрис - не туда надо было. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198044
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев Этак мы дойдем до - нафиг нужно наследование?

Для наследования есть полиморфизм, который проблему решает.

Сергей Арсеньев Если у людей вся логика построена на вызове метода hashCode() и equals()
Когда вся логика построена на hashCode() и equals(), то список у нас условно гомогенный. Когда человеку нужно писать if(o instanceof String), то список резко становиться гетерогенным. Потому что для нас по критерию String/не String уже как минимум два разных типа.

Сергей Арсеньев Или вообще это коллекция со списком мониторов. Зачем им разные списки?
Зачем монитору toLowerCase()?

Сергей Арсеньев Да ТС может захотел на время засунуть туда логгер для строк - ему надо проверять строка не строка. Но основную логику перефигачивать ради такой задачи глупо, IMHO.
Глупо потом писать if ... instanceof в каждом методе где используется эта коллекция.

Сергей АрсеньевP.S. Да и свалка у ТС могла возникнуть по наследству. В этом случае совет - это плохо равнозначен совету игроку в тетрис - не туда надо было. :)
И автор вместо того чтобы разгрести свалку переводит код на стримы. Да?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198079
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСергей Арсеньев Или вообще это коллекция со списком мониторов. Зачем им разные списки?
Зачем монитору toLowerCase()?
...
И автор вместо того чтобы разгрести свалку переводит код на стримы. Да?
Автору могли дать вспомогательную задачу. Ну там отследить что за хрень стала появляться? А для основной (мониторы) toLowerCase нафиг не нужна.
Это одна ситуация.

Если же toLowerCase нужна постоянно в основной логике - совсем другая.

Вот и все что я хотел сказать. То что гомогенно для одного, может быть гетерогенно для другого.

P.S. Хотя использовать String как монитор, например, уже само по себе можно считать моветоном. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198185
13-й Пилигрим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, хотелось бы пояснить необходимость Object[] и toLowerCase() и, по возможности, выслушать советы по улучшению.

Вся задача вертится вокруг Infinispan в целом и Querying via the Java Hot Rod client в частности.
Для работы с кэшем, размещенным на удаленном сервере, Infinispan Предлагает использовать собственный протокол Hot Rod , а для поиска собственный же Query DSL

Примерно вот так это выглядит
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import org.infinispan.client.hotrod.*;
import org.infinispan.query.dsl.*;
...

RemoteCacheManager remoteCacheManager = ...;
RemoteCache<Integer, Book> remoteCache = remoteCacheManager.getCache();

Book book1 = new Book();
book1.setTitle("Hibernate in Action");
remoteCache.put(1, book1);

Book book2 = new Book();
book2.setTile("Infinispan Data Grid Platform");
remoteCache.put(2, book2);

QueryFactory qf = Search.getQueryFactory(remoteCache);
Query query = qf.from(Book.class)
            .having("title").in("Hibernate in Action", "Infinispan Data Grid Platform").toBuilder()
            .build();

List<Book> list = query.list(); // Voila! We have our book back from the cache!



Т.е.
Код: java
1.
FilterConditionContext in(Object... values);


ну, или
Код: java
1.
FilterConditionContext in(Collection values);



Имеется собственная обертка - что-то типа QueryBuilderWrapper, которая строит query. Враппер в качестве параметра принимает некий SearchBean
Код: java
1.
2.
3.
4.
public class SearchBean {
	private String field;
	private Object[] values;
}


Т.к. враппер строит query для любых полей и, соответственно, любых типов хранимых значений, требуется Object. А т.к. значений для поиска м.б. несколько, требуется Object[]

А toLowerCase нужен для регистронезависимого поиска.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198214
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й ПилигримА toLowerCase нужен для регистронезависимого поиска.
Спасибо за разъяснения, но они никак не объясняют надобности в гетерогенных значениях для поиска.
field у вас один. Значит все values должны соответствовать его типу. Так ведь? Значит там либо все String, либо все Integer, либо все значения другого одинакового типа. Поэтому вполне можно, например, через method overload конструировать SearchBean для String не так как для других типов (с нормализацией регистра). Из каких данных вы этот SearchBean собираете? Почему там не String[], например?
Как у вас в values может попасть одновременно String и другой тип?

Ну, и безотносительно проблемы, нормализация параметров поиска требует ведь и нормализации данных. То есть к регистронезависимому поиску такое решение не особо относится.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198247
13-й Пилигрим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСпасибо за разъяснения, но они никак не объясняют надобности в гетерогенных значениях для поиска.
field у вас один. Значит все values должны соответствовать его типу. Так ведь? Значит там либо все String, либо все Integer, либо все значения другого одинакового типа.
Да, верно - для одного филда значения могут быть только одного типа.

BlazkowiczПоэтому вполне можно, например, через method overload конструировать SearchBean для String не так как для других типов (с нормализацией регистра).
Да, этот вариант выглядит предпочтительным.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
	public SearchBean(String field, Object... values){
		this.field = field;
		this.values = values;
	}

	public SearchBean(String field, String... values){
		this.field = field;
		this.values = Arrays.stream(values).map(String::toLowerCase).toArray();
	}



BlazkowiczКак у вас в values может попасть одновременно String и другой тип?
Правильно, не может.

BlazkowiczНу, и безотносительно проблемы, нормализация параметров поиска требует ведь и нормализации данных. То есть к регистронезависимому поиску такое решение не особо относится.
Конечно, данные в кэше тоже нормализованы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198253
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й ПилигримДа, этот вариант выглядит предпочтительным.

Скажем решительное "нет" копипасте и "да" самодокументированому коду.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	public SearchBean(String field, Object... values){
		this.field = field;
		this.values = values;
	}

	public SearchBean(String field, String... values){
		this(field, toLowerCase(values)));
	}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198277
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
2.
3.
	public SearchBean(String field, String... values){
		this(field, toLowerCase(values)));
	}


А может и так.
Код: java
1.
2.
3.
	public SearchBean(String field, String... values){
		this(field, transform(values, String::toLowerCase)));
	}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39199825
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСкажем решительное "нет" копипасте и "да" самодокументированому коду.

Главное, чтоб это самодокументация дошла до разработчиков того сервиса, которые будут дергать бин. А то веди их будет ждать сюрприз, когда они пришлют Object[] содержащий строки и они не преобразуются к маленьким буквам.
Но скорее всего это сам ТС и он в курсе. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39199831
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Это не сервис же.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сабжу.

Прошло уже немало (сколько?) лет с момента публикации пары статей некого Африканца
под названием Околожабство.

http://izm.izvm.net/zhaba/java-a.htm

http://izm.izvm.net/zhaba/java-b.htm

Я не предлагаю сейчас обсуждать его личность или сами статьи а просто
хочу посмотреть и добавить что изменилось с тех пор и что уже не есть TRUE.

Поскольку в чтениях статей и - медленный покемон - то можете
писать свои каменты раньше меня.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202315
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
толи ещё будет https://habrahabr.ru/post/280188/
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202318
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202328
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanвадя,

var (справочник по C#)
но для написания в ide лучше четко определить - ide будет проще конторолировать.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202336
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал. ПОЛНОСТЬЮ плюсуюсь. Человек верно пишет. Все так и есть (((
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202405
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://izm.izvm.net/zhaba/java-a.htm 17) Одно из замечательных изобретений Вирта - перечислимый тип. Жаль, что он от него отказался в Обероне. В каком-то виде этот тип пробрался даже в С. В Жабе его нет, и это очень неудобно. Вместо него - просто целые "константы", которые вовсе и не константы. Никакой проверки типов (которая была бы естественна для "надежного" языка). Иные удальцы применяют классы для этого - то есть передают указатели там, где нужно целое значение, и используют функции там, где нужно число, закодированное этим значением. В итоге программа становится совершенно нечитаемой, и к тому же на пустом месте теряется эффективность.

Я не знаю (еще раз) какой датой датируется эта статья.
Возможно автор апеллирует к спекам 1.4. Кроме того он часто упоминает Microsoft Visual J++.
Проект который уже давно мёртв. Но ключевое слово enum работает начиная с Java 1.5 (5)
и позволяет спокойно описывать перечислимые типы и даже набор методов над ними.

Код: java
1.
2.
3.
enum Days{
   MON, TUE, WEN....
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202406
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27) Сама библиотека оставляет желать лучшего. Почему, например, для узнавания текущей даты я должен выделять в памяти объект? А вот еще задачка, достойная пера. Напечатать текущую дату в формате

дд.мм.гггг чч:мм:чч.МММ (МММ - миллисекунды).

Ну все сделано, чтобы только сделать это невозможным! Вообще, опыт практического использования библиотеки заставляет подумать, что она была сделана левой ногой пьяного матроса.
Необходимо пересмотреть с учотом Java8 (java.time.*)

Код: java
1.
2.
LocalDate date = LocalDate.now();
String datePrefix = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));



Возможно аллоцирование форматтеров перенесено в пулы и т.п.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202409
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только сейчас получил:

java.lang.Error: Unresolved compilation problem:

Б...! Этот язык компилирующий или что? Какая нафиг compilation problem в момент выполнения?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202412
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: java
1.
2.
LocalDate date = LocalDate.now();
String datePrefix = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));


Возможно аллоцирование форматтеров перенесено в пулы и т.п.
Если следовать логике автора, то immutable объекты это совсем за гранью. Там ведь не просто объект аллоцируется! Он на каждую операцию аллоцируется! А то что производительность GC от количества мусора почти не зависит, это ведь ещё знать надо.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202413
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29) При написании на С много внимания уделяется всяким случаям вроде "А что если функция malloc вернула NULL?" Так вот, в Жабе считается, что память всегда есть. В общем-то никаких оснований для этого нет. А когда память кончится, будет брошена эксепция вроде OutOfMemoryException, которая есть объект и должна быть выделена в куче...
В данном тезисе автор лихо играет софизмами и парадоксами (почеркнуто)
тоесть не по сути.

Аллокация new действительно всегда работает OK и память всегда есть.
Ситуация когда ее нет - не перехватываемая ошибка и с точки зрения
приложения - это авария и на ее решение вобщем-то нет рецепта нигде.

Возможно behaviour систем версии 1.4 был действительно иной.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202415
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczmayton
Код: java
1.
2.
LocalDate date = LocalDate.now();
String datePrefix = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));


Возможно аллоцирование форматтеров перенесено в пулы и т.п.
Если следовать логике автора, то immutable объекты это совсем за гранью. Там ведь не просто объект аллоцируется! Он на каждую операцию аллоцируется! А то что производительность GC от количества мусора почти не зависит, это ведь ещё знать надо.
Станно но введение immutable объектов повысило производительность Card-Raytracer.
Можно найти даже конкретный коммит где я оптимизирую Vector добавляя в него
final и переписываю логику таким образом что координаты x,y,z внутри вектора
отдельно не мутируют.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202419
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли следовать логике автора, то immutable объекты это совсем за гранью. Там ведь не просто объект аллоцируется! Он на каждую операцию аллоцируется! А то что производительность GC от количества мусора почти не зависит, это ведь ещё знать надо.
А оно не так?

А производительность GC от количества мусора и размера кучи зависит очень сильно. По крайне мере в 1.6. Очень бы хотелось понять, что за GC алгоритм такой чудесный, что "почти не зависит".

Да и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202422
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
31) Меня очень раздражает оператор "+" для строк. Не люблю исключений. Вообще, значит, операторы не переопределяются, а вот для строк пожалуйста. При этом, если объект не строка, вызывается специальный метод со специальным именем toString... Ну зачем превращать язык в BASIC? Ясно же, что все так и будут применять этот оператор для складывания строк, плюя на эффективность. Есть класс StringBuffer, а кто им пользуется?


Я наблюдал эволюцию компиллятора. И сегодня мы можем
больше использовать оператор + (к примеру при перегрузке
toString()) и не париться о том что конкатенация будет собрана
через StringBuffer StringBuilder.

Опять-же тезисы автора касались весьма древних компилляторов.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202427
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА оно не так?
А производительность GC от количества мусора и размера кучи зависит очень сильно. По крайне мере в 1.6. Очень бы хотелось понять, что за GC алгоритм такой чудесный, что "почти не зависит".
Да и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная.
GC сканирует и перемещает живые объекты. Мусор при этом целиком и полностью отмирает как единое целое. Хоть его мегабайт был, хоть сто. Не важно. А вот сканирование живых объектов занимает время.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202430
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДа и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная.
Тут надо ставить на обе чаши весов очень много аргументов. new в С++ может
быть в заведомо неблагоприятных условиях. Работать по фрагментированной
куче где free вроде-бы есть но целым экстентом выделить невозможно на данный
момент без каких-то дополнительных действий по уплотнению. В Java - аллокация
идет как на стеке без поисковых операций поэтому накладые могут быть меньше.
Вобщем это уравнение со многими неизвестными. И сравнение стоимостей
new/free надо делать в бенчмарках с возможностью многократного повторяемого
воспроизведения условий.

Я такие бенчмарки не смог создать. Хотя и обещал в части своих тяпничных блогов.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202435
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто нибудь знает этого африканца?

Киньте ему ссылочку сюда если можете.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202446
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczLeonid KudryavtsevА оно не так?
А производительность GC от количества мусора и размера кучи зависит очень сильно. По крайне мере в 1.6. Очень бы хотелось понять, что за GC алгоритм такой чудесный, что "почти не зависит".
Да и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная.
GC сканирует и перемещает живые объекты. Мусор при этом целиком и полностью отмирает как единое целое. Хоть его мегабайт был, хоть сто. Не важно. А вот сканирование живых объектов занимает время.
Дьявол кроется в мелочах:
1. Eden область: Copy GC
2. Old область: Mark Sweep GC

Выделение объектов ---> больше потребление памяти --> чаще вызов GC. Т.к. copy gc крайне быстро работает, то пофиг

Массивное выделение объектов + частый вызов minor GC + несколько потоков - есть риск, что temporary объекты из Eden области попадуть в old область heap. А вот это уже очень плохо ((( Т.к. мусор в old области в heap - распухание heap и значительно замедление и без того медленного Mark Sweep.

AFAIK

note: в терминах могу ошибаться, но смысл думаю ясен

Blazkowicz...Мусор при этом целиком и полностью отмирает как единое целое. Хоть его мегабайт был, хоть сто...
В реальной жизни ситуации когда из Eden мусор проникает в Old - как грязи, как Eden не выкручивай.

Хотя, на прошлой работе добились того, что при многозадачной работе Oracle Customer Care & Billing mark sweep GC запускался всего 1-2 раза за целый рабочий день предприятия ))) До настройки памяти (default значения) было раз в 1.5 - 2 сек + периодические out of memory.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202448
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВ реальной жизни ситуации когда из Eden мусор проникает в Old - как грязи, как Eden не выкручивай.

Вот уж не знаю. Мы через ratio сводили это к минимуму.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202460
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВот уж не знаю. Мы через ratio сводили это к минимуму.
А просто Eden задирал до максимуму (1/2 памяти). Остальные параметры читал, но если памяти под Eden достаточно - то и бог с ними, если мало - как мертвому припарка.

Тот же Oracle Customer Care & Billing.

ОДИН И ТОТ ЖЕ код выставления счета, запускаемый из Web-морды (over 300-400 Mb всякого GUI барахла в Heap) и из Batch processing (отдельная VM, в Heap мусора нет) - во втором случае работал в разы (2-3 раза) быстрее.

Но у них при каждом выставлении одного счета по 200-300 Mb temporary объектов (Copy Book) создается. В общем, память гадят знатно
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202468
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s.
При этом одним временем на GC не объяснимо. Т.к. на GC уходит пусть и больше времени, но не намного. Возможно какие-то скрытые эффекты, типа фрагментации кучи и лучшего использования кэша процессора. Загадочно, но факт.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202475
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только мне кажется, что оптимальный код генерации счетов даст в разы бОльший эффект, чем возня с оптимизацией сборки мусора?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202477
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТолько мне кажется, что оптимальный код генерации счетов даст в разы бОльший эффект, чем возня с оптимизацией сборки мусора?
Всё зависит от трудоёмкости оптимизации этого кода.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202496
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это понятно. Непонятно другое.
Есть проблема.
Есть известный путь решения с некими затратами. Гарантированное решение с, более-менее, гарантированными затратами.
Но есть ещё "эффективный менеджмент", который сразу заявляет: "Это дорого". И начинает неопределённое время сношать мозг и заказчику и самому себе.
Вот чего я не могу понять.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202498
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И сама возможность оптимизации.

Код покупной. Гей-архитектор где-то на западном побережье. Код пишут пара сотен манильцев. Кому оптимизировать ? )))

Там и так, все в лучших традициях ООП - патерн на патерне и патерном погоняет. Самая крутой патерн - Copy book. Дает работу огромному кол-ву манильцев. Без него, кол-во бедных в маниле было бы намного больше )))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202500
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov...Есть проблема....
Да нет там проблемы.
1 .Решение масштабируемое - купите еще N серверов, считать будет в N раз быстрее.
2. Выставляется счет через интерфейс за 1 сек или за 3 сек - пользователю в целом пофиг.
3. При ситуациях "когда ночной batch процесс не успевает за ночь закончится" ( C ) см. п. 1 Или сервер можно перевезти в Варкуту. Там зимой ночи длиннее )))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202632
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКто нибудь знает этого африканца?

Киньте ему ссылочку сюда если можете.
зачем?

Выбери, чего ты чего на самом деле хочешь:
- узнать, как изменилось его мнение с тех пор
- спросить - почему не оправдались его прогнозы о недолгой жизни обсуждаемого им сабжа
- хочешь, поспорив с ним по каким-то конкретным деталям, опровергнуть его взгляд в целом
?

Последнее, имхо, бессмысленно.

Прими в расчет следующее:
- тот сайт литературный , и предложенные тобой заметки, по сути,
являются литературным произведением для программистов.
- На том сайте последнее сообщение размещено в 2008 году, а обсуждаемые заметки я склонен отнести по косвенным признакам к 2000-му году, т.е. ко времени jdk 1.3
- (имхо) в целом, сам по себе текст Африканца в техническом плане весьма приличного качества. Но, писался в , как мне кажется, несколько второпях, преследуя больше литературные цели, чем цель последовательного "опровержения" языка.
Его литературная задача мне понятна - заявить, что вместе с явой в мир программирования
громко и напористо приходит агрессивный непрофессионализм, активно порождающий собственный мир не просто заявляющий право на существование, а претендующий на абсолютное заполнение всего пространства программирования.
(Это умом объять невозможно - говорят, что в мире уже 19 миллионов java-программистов, а скоро станет 25.
Т.е. уже больше 2.5 java-программистов на каждую 1000 душ населения Земли.
Для сравнения: в 1904 году в городах Западной Европы в среднем было 4 извозчика на 1000 городских душ.
В России, правда, заметно больше - от 3.38 в Лодзи с пригородами (это ровно как если бы уже сейчас было 25 миллионов java-программистов в расчете на 1000 ныне живущего на Земле населения) до 18.8 в Москве.
)
По технике его замечания касаются синтаксиса, быстродействия, пригодности к созданию "больших проектов". По части синтаксиса - это больше "вопросы вкуса", даже там, где это касается простоты или сложности или "наивности" предполагаемого компилятора.
По части всего остального - общий ответ примерно такой - java никогда (до сих пор) не
позиционировалась как средство создания критичных по производительности систем или систем реального времени. Уж как минимум - не позиционировалась так создателями языка.
Для задачи доставки компактных аплетов в браузер клиента в ней с самого начала всего достаточно. И вряд ли стоит упрекать создателей в том, что у языка фактическая жизнь оказалась и дольше, чем можно было бы ожидать, и, в конце концов, совсем другого
назначения. Решения сорта жить или умирать принимаются не ими.
Даже если это кому-нибудь обидно (например - Вирту).

PS
Все сказанное выше исключительно "по моему скромному мнению".
Кто такой Африканец я не знаю.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202645
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
32) С определяет int как "наиболее эффективное целое число, не короче, чем 16 бит". То есть если на машине длина слова 18 бит, то и целое будет 18 бит. Жаба же определяет int как ровно 32 бита, а long как ровно 64. И если на машине нет 32-битных чисел (например, есть только 64-битные), придется моделировать. Мне это не нравится. Отсутствие беззнаковых чисел мне тоже не нравится.
По данному пункту. Скорее всего я просто констатирую что ничего не изменилось в Java.
int - 32х битный и это правильно. Это упрощает жизнь.

Добавлю что новые ЯП такие как Golang вводят встроенные типы: uint16, uint32 e.t.c.
с жестко заданной разрядностью.

Rust также вводит типы: u16, u32 e.t.c с фиксированной сеткой. Машинно-зависимые типы
такие как usize/isize у него изначально зарезервированы под platform pointer's type.
Это правильно. Не будет соблазна толкать их в общий поток целочисленых вычислений.

Далее я нарушу своё правило и позволю обсудить то что уже давно обсуждалось.
Не сосем понятен камент
И если на машине нет 32-битных чисел (например, есть только 64-битные), придется моделировать
Что моделировать? Что за инженерная задача? Построение компиллятора? JVM ? Особое железо? Сопряжение через
network с гетерогенной Java-системой?

Те кто поняли о каких-таких трудностях толкует автор - прошу прояснить.

По поводу отсутствия беззнаковых чисел. Я здесь соглашусь. Мне-бы не помешала семантика UINT64 для
точного толкования return значения из функции.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby, ого ты букв написал. Ну не знаю что тебе ответить. Подумаю и отпишу позже.

А по поводу Африканца - ну и буй с ним. Пускай отдыхает старичок. Без него разберёмся.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202652
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
33) Жаба предоставляет некоторые особо высокоуровневые возможности, такие, как клонирование (глубокое копирование) объектов и сериализация. Обе опасны в неумелых руках. Чайник, не задумываясь, склонирует (или сериализует) громадный граф, лишь бы добиться какой-то сиюминутной цели. Сериализация уже привела к тому, что программмы хранят свои настройки не в приятных для глаза ini-файлах, и не в Registry, а в многочисленных файлах, полученных путем сериализации объектов.
Положение сериализации на сегодняшний день.

Совершенная мифология. Возможно автор экстраполировал прочитанное в книжках
на некую реальность или представлял как-бы он делал. Но серилизацию делают
через Orm-ы и специализированные библиотеки такие как Cryo. Вообще сама
по себе проблематика искусственна и высосана из пальца. Всё давно завернуто
в entity-beans и аннотировано и завёрнуто в фрейморки и формализовано
для избежания ошибок.

Жуткая ситуация с сериализацией графа - невозможна (я гарантирую это) т.к.
для графов юзают JUNG, JGraphT и прочее где этот вопрос урегулирован.

Конечно нубас может запилить глубокое копирование графа но если учесть что
сама по себе уже работа с графами нетривиальна то обсуждать сериализацию
безсмысленно. Это капля дерьма в огромную кучу того-же дерьма. Уже хуже не станет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202657
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,


31), 32) и 33) изложены предельно слабо.
Но в целом они есть часть "претензий" из "мира C/C++" к "миру java", при этом внутри первого из миров по каждому из пунктов существуют идущие десятилетиями внутренние междусобойчики.
31) - сугубо от академического мира претензия. т.к. "+" в математике операция коммутативная, то не стоит ломать школьные привычки и рисовать + для некоммутативного случая:
"foo" + "bar" != "bar" + "foo"

32) Изложена сугубо сишная проблема. Сказать-то он хотел примерно следующее - "про С известно, что ее целочисленная арифметика быстрая, т.к. она машинная, а про яву мы ничего не знаем - какая она окажется. Может, вдруг, и библиотечной оказаться".
При ином чтении - это чистой воды переброс с больной головы на здоровую - Там где реализация норовит положить int в "наличное машинное слово", начиная с 32-разрядных систем int перестает отличаться от long, что в общем случае ведет к проблемам interoperability
и binary compatibility, заставляя плодить нестандартные типы, в общем случае - ах да - конечно с "библиотречной поддержкой" , от операционной системы, например.

33) кролики - это не только ценный мех, но и 3-4 килограмма диетического, легкоусвояемого мяса. (@Кролики)
"глубокое копирование" самая - самая базовая проблема в "типизированном императивном программировании"
Что должен делать оператор присваивания a=b? И что должен делать оператор сравнения? Когда тебе рассказывают, что присваивание должно втыкать в a ссылку на тот же объект, ссылка на который сидит в b или сравнение должно сравнивать ссылки, сидящие в a и b и считать значения в переменной равными, только если ссылки равны, то тебе рассказывают, что "глубокое копирование" настолько дорого, что никакой возможности ни присваивать, ни передавать по значению, ни сравнивать по значению в нашем языке нет.
У нас есть только mutable, причем несравнимо mutable.
Но КАК? Как вообще программировать, если возможности сравнивать по значению ничего кроме ссылок нет. Так может не оказаться возможности выяснить, что 2 + 2 = 4, просто потому, что ссылка на 2 + 2 не совпадает со ссылкой на 4.
А и как программировать mutable в многопоточном окружении без очередей и дедлоков?

А когда тебе говорят - чтобы твоя программа работала быстро и потоки были независимы по данным - используй immutable - приходит Африканец и спрашивает: ну, и как ты будешь теперь "глубоко копировать" свой граф, или хотя бы часть его? Твой ответ Африканцу - а мои immutable будут махонькими, я их в честь этого даже обучу сравниваться по значению через equals.

Сериализация - т.е. двоичная передача кода вместе с данными, стандартизированная в языке - вещь неведомая для мира С.
это еж с ужом, которого и назвать-то с ходу не получается.
В яве сериализация - это "наш ответ министерству обороны" - Аде, в которой DIANA изначально задумывалась для приблизительно аналогичных целей - машинно-независимого представления алгоритмов, структур данных и самих данных.
То есть - создателям явы захотелось быть тоже в танке. Это казалось исключительно крутой идеей.
Предъявлять со стороны С здесь претензию большого смысла не имеет.
Но можно мелко покуражиться. Не обращай внимания. Хорошо это может получиться у тех, кто умеет целиком обновить через космическую связь программное обеспечение летящего самолета не прекращая работы автопилота.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202669
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяUsmanвадя,

var (справочник по C#)
но для написания в ide лучше четко определить - ide будет проще конторолировать.Ок. Директива using (Справочник по C#) (см. директива псевдонима using)
На фоне этого бриллиантовый оператор начинает тускнеть (:
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202718
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby31) - сугубо от академического мира претензия. т.к. "+" в математике операция коммутативная, то не стоит ломать школьные привычки и рисовать + для некоммутативного случая:
"foo" + "bar" != "bar" + "foo"

Я полностью согласен с некоммутативностью. Но ведь это вообще не по адесу. Это не околожабство
а около-сиплюсовость.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202721
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
32) Изложена сугубо сишная проблема. Сказать-то он хотел примерно следующее - "про С известно, что ее целочисленная арифметика быстрая, т.к. она машинная, а про яву мы ничего не знаем - какая она окажется. Может, вдруг, и библиотечной оказаться".
При ином чтении - это чистой воды переброс с больной головы на здоровую - Там где реализация норовит положить int в "наличное машинное слово", начиная с 32-разрядных систем int перестает отличаться от long, что в общем случае ведет к проблемам interoperability
и binary compatibility, заставляя плодить нестандартные типы, в общем случае - ах да - конечно с "библиотречной поддержкой" , от операционной системы, например.
Я себе пытаюсь воспроизвести рассуждения Гослинга. И возможно он думал так.
"Проблема производительности целочисленных вычислений на регистрах не стоит
так остро как проблема бинарной совместимости или интероперабельности. Нам
важнее обеспечить второе т.к. это ключевой момент для платформера а скорость
всегда можно подтянуть, просто дорабатывая саму JVM. Пускай скорость станет
проблемой JVM а не разработчика".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202921
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ данном тезисе автор лихо играет софизмами и парадоксами (почеркнуто)
тоесть не по сути.

Аллокация new действительно всегда работает OK и память всегда есть.
Ситуация когда ее нет - не перехватываемая ошибка и с точки зрения
приложения - это авария и на ее решение вобщем-то нет рецепта нигде.

Нет - автор просто склонен к системному программированию не прикладному, где подобные ситуации вполне нормальное поведение.
Для этого java действительно неподходящий язык. И многие его ограничения действительно чисто идеологические - авторы посчитали, что так правильно.
Это еще, что на одной конференции всплывал вопрос как решается на java задача с размещением нескольких полей объекта в одном cache-line. Только отдельная программа на каждый вид, с определенными знаниями как конкретный компилятор ее скомпилирует и конкретная jvm запустит.
Почему-то макросы и условная компиляция воспринимались авторами java исключительно как
Код: plaintext
1.
#define true false


YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202925
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСовершенная мифология.
Причем старая - сам же пишешь стандартной сериализацией никто не пользуется. Используют сторонние библиотеки.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202950
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyСериализация - т.е. двоичная передача кода вместе с данными,
Сериализация, это не передача кода и даже не данных.
Африканец рассуждал про вау фичу:
Код: java
1.
outputStream.writeObject(YourObject);


Часто Вы этим пользуетесь?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202971
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

mayton33) Жаба предоставляет некоторые особо высокоуровневые возможности, такие, как клонирование (глубокое копирование) объектов и сериализация. Обе опасны в неумелых руках. Чайник, не задумываясь, склонирует (или сериализует) громадный граф, лишь бы добиться какой-то сиюминутной цели. Сериализация уже привела к тому, что программмы хранят свои настройки не в приятных для глаза ini-файлах, и не в Registry, а в многочисленных файлах, полученных путем сериализации объектов.

Положение сериализации на сегодняшний день.

Совершенная мифология. Возможно автор экстраполировал прочитанное в книжках
на некую реальность или представлял как-бы он делал. Но серилизацию делают
через Orm-ы и специализированные библиотеки такие как Cryo. Вообще сама
по себе проблематика искусственна и высосана из пальца. Всё давно завернуто
в entity-beans и аннотировано и завёрнуто в фрейморки и формализовано
для избежания ошибок.

Жуткая ситуация с сериализацией графа - невозможна (я гарантирую это) т.к.
для графов юзают JUNG, JGraphT и прочее где этот вопрос урегулирован.

Конечно нубас может запилить глубокое копирование графа но если учесть что
сама по себе уже работа с графами нетривиальна то обсуждать сериализацию
безсмысленно. Это капля дерьма в огромную кучу того-же дерьма. Уже хуже не станет.

Автор пишет о сериализации вполне корректно:
1) ...Обе опасны в неумелых руках ...
2) ..."что программмы хранят свои настройки не в приятных для глаза ini-файлах...а в многочисленных файлах, полученных путем сериализации объектов"
Где автор такое видел, не знаю. Но с его негодованием полностью согласен.

Понятно, что в большей мере вина программистов.

3) Сейчас плотно с RMI работаю, Serializable медленная до жути. Планирую перевести на Externalizable, но руки не доходят.

Ну так об этом и негодование автора, что есть удобные и не правильные механизмы (Serializable) и более правильные, но менее удобные (Externalizable). Какой механизм для использования выберет программист.... такая программа и получится.

Я выяснил, что Serializable для моей программы не очень подходит... но времени все равно не выкроил. Что окажется в продакшен, ктож его знает )))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202993
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев...За это действительно приходится расплачиваться отсутствием HashTable<int,..>

FastUtils

Сергей АрсеньевДа GC потом съест кучу лишних оберток не поморщившись, но выделять то память под них будет нужно, хотя и действительно не обязательно.

"не поморщившись" и GC ?
Мне кажется Вы преувеличиваете. Если HelloWorld то да, а если WebServer и серьезное приложение, то в каком месте раскидали "кучу оберток" - пойди найди

Копатся в дампе кучи, что бы понять, где leak, это еще то удовольствие. Когда в Top'е видишь 600 000 объектов byte[] и 585 000 объектов String....

IMHO Может я конечно просто не умею. Но радости смотреть на 2-3 Gb дамп кучи от нагруженного продакшена - нет никакого.

Сергей АрсеньевТезис про deprecated - это показатель, что язык живой (вон см. LocalDate и пр. - теперь модно так). Но и показатель, что не устоявшийся.

Просто куча ошибок, которые можно было СРАЗУ не делать.

Calendar,
DateTime
LocalDate и etc

ПОЧЕМУ в одних классах МЕСЯЦ нумеруется с 0, а в других с 1 ????

Я понимаю, когда в разных языках. Но Б...Ь в одном языке можно сделать единообразно?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203056
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevСергей Арсеньев...За это действительно приходится расплачиваться отсутствием HashTable<int,..>

FastUtils

Я не про реализацию, я про то как сделать код одинаковым и для long и для int.
В java примитивы вынесены в отдельную группу. И с ними много чего делать нельзя - потому что работа с примитивами это моветон. Такое впечатление, что авторы языка от них бы с радостью отказались. Но...

Leonid KudryavtsevЯ понимаю, когда в разных языках. Но Б...Ь в одном языке можно сделать единообразно?
То один порулит, то другой. Нормальный жизненный процесс. Гы.
По большому счету языку все равно, какой там тип даты. Это ж не примитив, а все остальное - хоть с марта считай, а февраль делай отрицательным. Как раз и отсутствие беззнакового числа тебе в помощь.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203079
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевЯ не про реализацию, я про то как сделать код одинаковым и для long и для int.
В java примитивы вынесены в отдельную группу. И с ними много чего делать нельзя - потому что работа с примитивами это моветон. Такое впечатление, что авторы языка от них бы с радостью отказались. Но...

Меня это сейчас жутко раздражает.

Программа - фактически калькулятор по бруд-форсе алгоритму. Нужно просматривать миллионы вариантов на графе.

Почти все данные замечательно укладываются в int/long. Поэтому его и использую ))) Просто, быстро.... но неудобно.

Фиг поймешь, что в конкретном месте этот int/long обозначает. В одном месте - код из БД, в другом - код но другого объекта, номер node в графе, номер node в "графе после обработки", время и так далее.

В языке C хотя бы была инструкция typedef. Она вроде на корректность во время компиляции не проверяла, но хотя бы можно в описании ф-ции типы параметров нормально указывать.

А так у ф-ции 10-ь параметров и все int. Что под этим подразумевается - только в комментария. Ни какой даже самой минимальной проверки и/или удобства на этапе написания кода.

(((

IMHO
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203098
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевЭто еще, что на одной конференции всплывал вопрос как решается на java задача с размещением нескольких полей объекта в одном cache-line. Только отдельная программа на каждый вид, с определенными знаниями как конкретный компилятор ее скомпилирует и конкретная jvm запустит.
Не оно? http://openjdk.java.net/jeps/142

А вообще из бреда по ссылке реально крутая фича, это вот это:
22) Каждый раз, когда мы описываем структуру (она же запись, она же класс), происходит выделение памяти в куче. Каждый раз, когда мы ее потом используем, происходит обращение по указателю. Зачем? Я понимаю, все это может быть полезно для "классов" - из-за возможного наследования их как раз полезно в куче размещать. Но что, если мы просто определили структуру Point с двумя полями, x и y - ну зачем тут куча? А представьте себе, что мы определили "линию" как две точки:
Особенно для системного программирования, которой нет в Java это наличие Си'шных struct'ов, как следствие потом появляются доклады типо такого
YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203257
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22) Каждый раз, когда мы описываем структуру (она же запись, она же класс), происходит выделение памяти в куче. Каждый раз, когда мы ее потом используем, происходит обращение по указателю. Зачем?

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis

Но тут есть одно "но". Когда я экспериментировал с шестеркой, то пришел к выводу, что в ней массивы всегда выделяются в куче. Возможно, сейчас это починено.

А вот насчет доклада Елизарова - действительно все сложно. Классы можно писать либо удобно - либо быстро, но не и то и другое одновременно. Так чтобы наиболее удобное написание оказалось самым быстрым - еще нигде не придумали. Но все равно, по сумме это лучше с++, где удобства вообще не существует.

помоему, одно из немногих где он правд это во второй части:

8) Еще одно техническое околожабство - так называемые методы доступа. Написав любую структуру. любой жабовский программист всегда первым делом начинает писать методы доступа.
вот это я не могу понять. Сейчас оракловцы всерьез подумывают о var-val, устраивают холивары, но это var экономит что? экономится четверть одной строчки. Ага, наглядней. Лучше бы сделали нормально сеттеры с геттерами. И multiline-строки.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203265
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapok22) Каждый раз, когда мы описываем структуру (она же запись, она же класс), происходит выделение памяти в куче. Каждый раз, когда мы ее потом используем, происходит обращение по указателю. Зачем?

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis

Но тут есть одно "но". Когда я экспериментировал с шестеркой, то пришел к выводу, что в ней массивы всегда выделяются в куче. Возможно, сейчас это починено.
....

По Вашей ссылки:

"..It does NOT replace a heap allocation with a stack allocation for non-globally escaping objects..."
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203310
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
а в чем профит от аллокации на стеке, вместо аллокации в хипе? На сколько я понимаю важно, чтобы нужные данные были непрерывным куском в памяти, тогда процессор при обработке такого массива сможет "угадывать", какие данные понадобятся и предзагружать их в кэш. Или я ошибаюсь?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203315
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokА вот насчет доклада Елизарова - действительно все сложно. Классы можно писать либо удобно - либо быстро, но не и то и другое одновременно. Так чтобы наиболее удобное написание оказалось самым быстрым - еще нигде не придумали. Но все равно, по сумме это лучше с++, где удобства вообще не существует.
Я не понимаю, что мешает добавить некий признак (ключевое слово, аннотацию и т.д.), который будет подсказывать JVM, что в массиве сразу за ссылкой идет непосредственно сам объект?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203322
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirа в чем профит от аллокации на стеке, вместо аллокации в хипе
скорость
уменьшение нагрузки на подсистему памяти (new, GC) => уменьшение (экономия) требований приложения к объему памяти для нормальной(комфортной) работы

just_vladimir...что в массиве сразу за ссылкой идет непосредственно сам объект?
Это как?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203366
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimir...что в массиве сразу за ссылкой идет непосредственно сам объект?
Это как?
Да немного бред написал, в общем если я верно понимаю ради чего выполняются упражнения, о которых рассказывается в докладе, то возникают они из-за того, что массив объектов в Java это массив ссылок на объекты и из-за этого есть проблема, что нет гарантии того, что непосредственно сами объекты, на которые указывают эти ссылки будут располагаться где то в виде непрерывного куска памяти и как следствие процессору очень не удобно ходить постоянно в разные места памяти. Соответственно нужно как то уметь подсказывать JVM, чтобы сами объекты были точно так же за аллоцированы непрерывным куском памяти (хотя вообще странно, что JVM по умолчанию именно так и не поступает, а может и поступает и я не понял этой части доклада :-) ).
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203397
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirДа немного бред написал, в общем если я верно понимаю ради чего выполняются упражнения, о которых рассказывается в докладе, то возникают они из-за того, что массив объектов в Java это массив ссылок на объекты и из-за этого есть проблема, что нет гарантии того, что непосредственно сами объекты, на которые указывают эти ссылки будут располагаться где то в виде непрерывного куска памяти и как следствие процессору очень не удобно ходить постоянно в разные места памяти. Соответственно нужно как то уметь подсказывать JVM, чтобы сами объекты были точно так же за аллоцированы непрерывным куском памяти (хотя вообще странно, что JVM по умолчанию именно так и не поступает, а может и поступает и я не понял этой части доклада :-) ).
Доклад не смотрел. У меня наушников нет.

AFAIK

Java так память и выделяет. Есть 2-е Eden области, одна из которых заполняется __последовательно__ с начала в конец, когда она заполнится, запускается Copy GC и начинает заполняться вторая Eden область. Так попеременно и работают.

Мало того, для ускорения работы, каждому Thread заранее выделяется свой кусок.

Т.ч. by default, при двух последовательных вызовах new, очень велика вероятность, что объекты окажутся рядом в куче.

Разумеется, это верно для Eden области, в Old, скорее всего, фрагментация сильнее. Хотя, нужно читать.

Но смысла "развертывать" class/stucture по полям, что в C, что в Java может быть много.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203508
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНо смысла "развертывать" class/stucture по полям, что в C, что в Java может быть много.Насколько я понимаю, именно этим занимается "анализ убегания". И если JIT сочтёт скаляризацию возможной итоговый код может быть сильно оптимальнее.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203725
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirа в чем профит от аллокации на стеке, вместо аллокации в хипе?
меньше засирается хип, gc проще чистить память. GC работает неидеально.

Leonid KudryavtsevДоклад не смотрел. У меня наушников нет.

Доклад Елизарова смотрел давно, но кратко по нему и другим различным докладам:

У каждого инстанса есть заголовок со служебной информацией, насколько помню в хотспоте то ли 12 байт, то ли 11.
Каждый инстанс выравнивается по 8 байтам.

В массиве же все лежит подряд.
Это значит, что если в кэш подгружается больше данных, то реже происходят кэшмиссы. А кэшмисс - это очень плохо, потому, что если данных не оказалось в L1, и не оказалось в L2 - в L3(он общий для всех) никто лезть за ними не спешит. Эти данные могут быть в L2 других ядер. Но если уже пошла подгрузка данных в L3, то там могут быть остановлены другие ядра, потому что мэппинг L3 на память хранится в аппаратной хэшмапе, а она однопоточна.

По этой причине, каждый кэш-промах - это сотни "утерянных" тактов.

Плюс работа различных аппаратных предсказателей, параллелизаторов, префетчеров, ускорителей.

И если мы нашу программу так оптимайзим, то получается нечто, что не блещет красотой, но зато быстро работает. Но критики java забывают, что на С такое тоже не блестало бы красотой. Обычно сишники таким вообще не заморачиваются.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203727
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с выравниванием данных все становится еще интереснее если учитывать false-sharing, который приходится учитывать. В идеале конечно элемент массива должен попадать на один кэш лайн, именно поэтому в старом коде нередко можно увидеть классы, в которых одно "боевое" поле и оно добито long-ами до 64 или 128 байт(самое смешное что оптимизаторы jvm если видят что поле не юзается вроде как могут его выпилить:)). Но так как эти самые кэш лайны у разных процессоров могут быть разной длины, то приходится писать под определенное железо. Кто-то даже предлагал ввести аннтоацию для jvm именно для таких случаев, не знаю чем закончилось.

Если честно я утерял нить спора уже, имхо прелесть javы в том что 99% процентов времени ты будешь писать как тебе удобно не думаю о низкоуровневых деталях, на то есть JVM, а в редких случаях есть возможность и подшаманить, и как правильно сказали оптимизации будут некрасивыми что на С что на java
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203733
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К докладу Елизарова я-бы добавил годичной давности семинар по LMAX Disruptor.
Там тоже рассматривались общие вопросы оптимизации очередей и отдельно
кеши и выравнивание и работа GC.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203757
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде где-то писали/говорили, что есть sun.misc.Contended для этого. Но использовать его стремно. Лучше б они сделали ее не в sun*. Вон пишут, что в девятке от unsafe хотят отказаться, и плюс Reflection.getCallerClass() тоже норовят грохнуть, помоему даже грохали. С этим Contended лучше не связываться, по возможности.

армы и x86 процессоров имеют по 64 байта кэшлайна. Насчет остальных архитектур - не знаю.
Данные выравнивают, хотя на x86 это необязательно, но это делают все равно - для унификации.

Насчет выпиливания полей - помоему это байка-страшилка. jvm позволяет подгружать классы. Где гарантия, что когда-нибудь кто-нибудь не попросит подгрузить класс, а этот класс не полезет в выпиленное поле? никаких ведь FieldSawOutException в этом случае не бросится! Значит и поле должно быть. И даже классы необязательно подгружать, потому что нет гарантий, что в это поле никто не полезет через рефлекшен. ИМХО, максимум что можно - это если сработал escape analyze, то не хранить такие поля в стеке. Но там тоже могут быть приколы с рефлекшеном, так что ИМХО, никакого выпиливания полей вообще не существует. Но инфа не 100%

забыл никЕсли честно я утерял нить спора
нет никакого спора
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203758
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonгодичной давности семинар по LMAX Disruptor.
а где его взять?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203835
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirа в чем профит от аллокации на стеке, вместо аллокации в хипе?
Сборщиком мусора. Одна инструкция и память свободна. :)
Естественно если это не примитив и нужен деструктор все не так просто. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39203841
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokmaytonгодичной давности семинар по LMAX Disruptor.
а где его взять?
Вроде это

YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204288
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевСборщиком мусора. Одна инструкция и память свободна. :)... ценой жёсткой связи порядка выделения и освобождения памяти.
Вы правда готовы работать при таких ограничениях?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204330
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наваял небольшой JMH бенчмарк, у меня вообще получается, что работа с массивом объектов идет даже быстрее, чем с массивом int'ов, при условии, что все объекты алоцированны подряд (почему пока не разобрался, нужно смотреть асемблерный код, а там на винде нужны лишние приседания для получения бинарника hsdis). Если же при наполнении массива параллельно создавать разные мусорные объекты, чтобы наши целевые объекты не занимали сплошной кусок памяти, то тогда уже начинается серьезная просадка по производительности.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204333
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые тезисы Елизарова я зафиксил на бумаге.
К сожалению перец очень быстро говорит и флудит
посторонними мыслями поэтому привожу не цитаты
а некоторые купированные фразы.

ЕлизаровGC

1. Идеальная ситуация - все объекты короткоживущие.
2. Долгоживущие объекты лежат корректируют
только примитивные поля или вообще не меняются.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204345
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕлизаровGC
1. Идеальная ситуация - все объекты короткоживущие.
2. Долгоживущие объекты лежат корректируют
только примитивные поля или вообще не меняются.

Смотри. GC это всегда trade off
https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/tuning_tradeoffs.html
Короткоживущие объекты и перманентный Tenured это как раз способ избавиться от пауз в CMS. Но при этом максимальной производительности такой GC не даст.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204381
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirНаваял небольшой JMH бенчмарк, у меня вообще получается, что работа с массивом объектов идет даже быстрее, чем с массивом int'ов, при условии, что все объекты алоцированны подряд (почему пока не разобрался, нужно смотреть асемблерный код, а там на винде нужны лишние приседания для получения бинарника hsdis). Если же при наполнении массива параллельно создавать разные мусорные объекты, чтобы наши целевые объекты не занимали сплошной кусок памяти, то тогда уже начинается серьезная просадка по производительности.

???

Не верю ( C )

Код и что это за "работа" можно посмотреть.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204423
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimirНаваял небольшой JMH бенчмарк, у меня вообще получается, что работа с массивом объектов идет даже быстрее, чем с массивом int'ов, при условии, что все объекты алоцированны подряд (почему пока не разобрался, нужно смотреть асемблерный код, а там на винде нужны лишние приседания для получения бинарника hsdis). Если же при наполнении массива параллельно создавать разные мусорные объекты, чтобы наши целевые объекты не занимали сплошной кусок памяти, то тогда уже начинается серьезная просадка по производительности.

???

Не верю ( C )

Код и что это за "работа" можно посмотреть.
Да, конечно можно, вполне возможно я где то ошибся в тесте или неверно его интерпретирую или не учитываю влияние GC или еще что нибудь. Работа это сложение int'ов, сравнивал два кейса класс Foo, в нем 3 int'овых филда (a,b,c) и int'овый массив.

Код бенчмарка:
Код: 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.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Fork(value = 3, jvmArgsAppend = {"-XX:+UseParallelGC", "-Xms4g", "-Xmx4g"})
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class MyBenchmark {

    @Param({"10000"})
    int size;
	
	@Param({"0", "1000", "10000"})
    int trashSize;

    Foo[] objArr;
	Foo[][] objArrTrash;
	int[] intArr;

    @Setup
    public void setup() {
		
		objArr = new Foo[size];
		
		objArrTrash = new Foo[trashSize][size];
		
		intArr = new int[size * 3];
		for(int i = 0; i < size; i++){
			intArr[i * 3] = 1;
			intArr[i * 3 + 1] = 2;
			intArr[i * 3 + 2] = 3;
			
			objArr[i] = new Foo();
			
			for(int j = 0; j < trashSize; j++){
				objArrTrash[j][i] = new Foo();
			}
		}
    }

    @Benchmark
    public void objArray(Blackhole blackhole) {
		long total = 0;
		for(int i = 0; i < size; i++){
			Foo obj = objArr[i];
			total += obj.getA() + obj.getB() + obj.getC();
		}
		blackhole.consume(total);
    }
	
    @Benchmark
    public void intArray(Blackhole blackhole) {
		long total = 0;
		for(int i = 0; i < size; i++){
			total += intArr[i*3] + intArr[i*3 + 1] + intArr[i*3 + 2];
		}
		blackhole.consume(total);
    }
	
    public static class Foo {
		
		private int a;
		private int b;
		private int c;
		
		public int getA(){
			return this.a;
		}
		public int getB(){
			return this.b;
		}
		public int getC(){
			return this.c;
		}

		public Foo() {
			this.a = 1;
			this.b = 2;
			this.c = 3;
		}

		@Override
		public String toString() {
			return "Foo [a=" + a + ", b=" + b + ", c=" + c + "]";
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + a;
			result = prime * result + b;
			result = prime * result + c;
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Foo other = (Foo) obj;
			if (a != other.a)
				return false;
			if (b != other.b)
				return false;
			if (c != other.c)
				return false;
			return true;
		}

	}

}



Что получилось на выходе:
jmh_outputBenchmark (size) (trashSize) Mode Samples Score Score error Units
MyBenchmark.intArray 10000 0 avgt 15 38352.732 996.941 ns/op
MyBenchmark.intArray 10000 1000 avgt 15 36765.030 2141.320 ns/op
MyBenchmark.intArray 10000 10000 avgt 15 34888.401 4205.767 ns/op
MyBenchmark.objArray 10000 0 avgt 15 26143.195 1200.436 ns/op
MyBenchmark.objArray 10000 1000 avgt 15 215898.867 19812.714 ns/op
MyBenchmark.objArray 10000 10000 avgt 15 106175.759 6576.237 ns/op


И чисто для objArray с разным trashSize:
jmh_outputBenchmark (size) (trashSize) Mode Samples Score Score error Units
MyBenchmark.objArray 10000 0 avgt 15 26862.265 1014.527 ns/op
MyBenchmark.objArray 10000 100 avgt 15 99337.478 5626.104 ns/op
MyBenchmark.objArray 10000 500 avgt 15 188794.983 17663.827 ns/op
MyBenchmark.objArray 10000 1000 avgt 15 217068.808 9772.326 ns/op
MyBenchmark.objArray 10000 2000 avgt 15 248142.848 6822.500 ns/op
MyBenchmark.objArray 10000 3000 avgt 15 251596.867 23983.232 ns/op
MyBenchmark.objArray 10000 5000 avgt 15 108882.238 4594.514 ns/op
MyBenchmark.objArray 10000 10000 avgt 15 104778.494 9427.842 ns/op


Буду рад, если кто-нибудь объяснит наблюдаемые эффекты:
1. Почему int array оказывается медленнее obj array, при условии удачной аллокации объектов?
2. Почему начиная с trashSize = 5000 (может чуть раньше) скорость начинает расти?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204431
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах да:
java - versionjava version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

verMicrosoft Windows [Version 6.3.9600]

hardwareCore i5 - 2400 3,3 Ghz, L1 - 256 kb, L2 - 1Mb, L3 - 6Mb
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204483
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO Вы просто не умеете их готовить.

p.s. сейчас с тестом поиграюсь, хотя параметры подсократил. У меня AMD, ждать > 5 мин. на тест - перебор
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204495
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Код: 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.
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.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
package my.my1;

import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.concurrent.TimeUnit;

@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Fork(value = 3, jvmArgsAppend = {"-XX:+UseParallelGC", "-Xms4g", "-Xmx4g"})
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class MyBenchmark {
	
    @Param({"10000"})
    int size;
	
//	Param({"0", "1000", "10000"})
	@Param({"0"})
    int trashSize;

    Foo[] objArr;
	Foo[][] objArrTrash;
	int[] intArr;

    @Setup
    public void setup() {
		
		objArr = new Foo[size];
		
		objArrTrash = new Foo[trashSize][size];
		
		intArr = new int[size * 3];
		for(int i = 0; i < size; i++){
			intArr[i * 3] = 1;
			intArr[i * 3 + 1] = 2;
			intArr[i * 3 + 2] = 3;
			
			objArr[i] = new Foo();
			
			for(int j = 0; j < trashSize; j++){
				objArrTrash[j][i] = new Foo();
			}
		}
    }

    @Benchmark
    public void objArray(Blackhole blackhole) {
		long total = 0;
		for(int i = 0; i < size; i++){
			Foo obj = objArr[i];
			total += obj.getA() + obj.getB() + obj.getC();
		}
		blackhole.consume(total);
    }
	
    @Benchmark
    public void intArray(Blackhole blackhole) {
		long total = 0;
		for(int i = 0; i < size; i++){
			total += intArr[i*3] + intArr[i*3 + 1] + intArr[i*3 + 2];
		}
		blackhole.consume(total);
    }

    @Benchmark
    public void intArray2(Blackhole blackhole) {
		long total = 0;
		// IMHO Правильно так
		for(int i = 0; i < intArr.length; i++){
			total += intArr[i];
		}
		blackhole.consume(total);
    }
	
    @Benchmark
    public void intArray3(Blackhole blackhole) {
		long total = 0;
		// IMHO Или, в крайнем случае, так
		for(int i = 0; i < intArr.length-2; i+=3 ){
			total += intArr[i+0] + intArr[i+1] + intArr[i+2];
		}
		blackhole.consume(total);
    }
	
    public static class Foo {
		
		private int a;
		private int b;
		private int c;
		
		public int getA(){
			return this.a;
		}
		public int getB(){
			return this.b;
		}
		public int getC(){
			return this.c;
		}

		public Foo() {
			this.a = 1;
			this.b = 2;
			this.c = 3;
		}

		@Override
		public String toString() {
			return "Foo [a=" + a + ", b=" + b + ", c=" + c + "]";
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + a;
			result = prime * result + b;
			result = prime * result + c;
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Foo other = (Foo) obj;
			if (a != other.a)
				return false;
			if (b != other.b)
				return false;
			if (c != other.c)
				return false;
			return true;
		}

	}



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

		Options options = new OptionsBuilder()
				.include( MyBenchmark.class.getSimpleName() ).build();
		new Runner(options).run();
	}
}




Код: plaintext
1.
2.
3.
4.
5.
Benchmark              (size)  (trashSize)  Mode  Cnt      Score    Error  Units
MyBenchmark.intArray    10000            0  avgt   15  17796.849 ± 15.440  ns/op
MyBenchmark.intArray2   10000            0  avgt   15  12433.204 ± 10.562  ns/op
MyBenchmark.intArray3   10000            0  avgt   15   9869.107 ± 68.348  ns/op
MyBenchmark.objArray    10000            0  avgt   15  11780.634 ± 22.755  ns/op

Надеюсь в коде не ошибся. Вроде все 3-и методо intArrayN должны давать одинаковый результат. Не проверял.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204505
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
ну кажется понял свою ошибку, что терял лишнее время на умножениях, из Ваших вариантов с intArray2 не совсем соглашусь, т.к. все таки надо двигаться по массиву честно по одному объекту, а вот intArray3 то что нужно.

А как на счет эффектов, когда при увеличении количества мусорных объектов скорость растет, вместо ожидаемого падения?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204524
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirLeonid Kudryavtsev,
ну кажется понял свою ошибку, что терял лишнее время на умножениях, из Ваших вариантов с intArray2 не совсем соглашусь, т.к. все таки надо двигаться по массиву честно по одному объекту, а вот intArray3 то что нужно.

IMHO Дело не в умножении. А в оптимизации JIT проверки на выход за пределы массива
just_vladimirА как на счет эффектов, когда при увеличении количества мусорных объектов скорость растет, вместо ожидаемого падения?
А где она растет?

Мне вообще кажется, что там какие-то очень странные/случайные числа начинают генерироваться. Ну и мусору НУ ОЧЕНЬ много. Патерн > 5000 мусорных объектов на один рабочий - это какой-то трешь. Возможно сборщик мусора паралельно еще какую-то дефрагментацию проводит. До какого-то момента она не сказывается, потом начинает сказываться и ситуация немного улучшается (но все равно ЗНАЧИТЕЛЬНО ХУЖЕ /5 раз/, чем без мусора)

IMHO
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39204989
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
соглашусь, что такое количество мусора перебор. И еще чуток по игрался с мусорными объектами, сделал с шагом в 500 от 0 до 10 000, получил следующую картинку:
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205006
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirполучил следующую картинку
График и цифры на нем наводят на воспоминания....
4000, 8000... ничего не напоминает?

4000 (правда байт) - размер Memory Page.

Фактически при таком кол-ве мусора, получается выравнивание объекта по Memory Page. Мусор оказывается в полностью неиспользуемых страницах, радостно "свопится" (не на диск, а в данном случае просто из кэша процессора или рабочего набора процесса) и больше не мешает )))

IMHO
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205013
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Факт интересный своей искусственностью. Но совершенно и 100% чистая синтетика. Никакого практического применения не имеет. IMHO
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205058
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо-бы допилить некоторый хинт или ключевое слово языка.

К примеру я инстанциирую синглтон и заведомо знаю что он будет лежать в OldGen/Metaspace.

И я хочу заведомо подсказать аллокатору чтобы он не кидал этот объект в Eden
а сразу ложил туда куда мне нужно.

Код: java
1.
2.
3.
4.
5.
6.
7.
@OldGen
public static MaytonsFuckenSingleton getInstance(){
   if (inst==null){
     inst=new Maytons......();
   }
   return inst;
}


По сути на уровне разработки дать больше инструментов для управления аллокацией.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205078
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonК примеру я инстанциирую синглтон и заведомо знаю что он будет лежать в OldGen/Metaspace.
И я хочу заведомо подсказать аллокатору чтобы он не кидал этот объект в Eden

IMHO бессмысленный хинт. Экономия копеек. Eden и так крайне быстр.

Скорее надо наоборот, подсказка, что объект временный. Но тогда такую подсказку нужно будет у 99% объектов указывать, а это - треш и угар. Ну и разумеется, при недостатке памяти, у RunTime будет не богатый выбор: или падать с out of memory или все равно, не смотря на подсказку, в old вытеснить. Т.ч. тоже механика работы такой подсказки не понятна


Возможно, можно было бы на уровне VM сделать Thread кучи. Т.е. все объекты созданные в рамках Thread относятся к "своей" кучи. При смерти Thread или по каким-то событием (например, завершение обработки HTTP запроса в рамках Web/Application Сервера), выжившие объекты переносятся в Old, плюс чистится мусор относящийся к данному Thread в Old.

Получаем:
1. Для разных HTTP запросов (с разным временем выполнения) - можно сделать свою метрику обработки Eden области. Меньше сессионного мусора будет уходить в Old
2. Процесс можно осмысленно побить по кусочкам. Получим своего рода incremental mark sweep.
3. Потенциально, можно сделать 2-х уровневый Eden.
Если места в Eden Thread'а/HTTP-запроса мало, туда добавляются блоки из Old. Eden для конкретного Thread'а/HTTP-запроса расширяется.
По окончанию Thread'а/HTTP-запроса, вся область грохается, а выжившие объекты перемешаются в Old.

Нужно читать более подробно Читать:
1. о G1 garbage коллектор, вроде там похожая идея была.
2. как работает процесс пометки живой/мертвый объектов в Eden области. Х.з. Но minor GC крайне быстрый. Если пометка живой/мертвый в рамках привязки к Thread/HTTP-запросу можно сделать очень быстро, то осмысленно.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205094
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Развивая идею. Матричный Eden. Или сегментированный.

Поскольку чистка это в общем случае решение задачи из области теории графов
(проверка достижимости узлов из некого корня) то ее надо оптимизировать
исходя из сходных по своей природе узлов (объектов).

Например мы деаем какую-то активность. И много всего аллоцируем. А после
этого чистим всё. Чтобы не флудить в общем eden мы аллоцируем сегмент
и работаем в нем.

Во время фазы уборки GC учитывает наличие связей только внутри сегмента
и быстро убирает мусор не отвлекаясь на анализ всего графа. По сути
чистит подграф.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205126
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Во время фазы уборки GC учитывает наличие связей только внутри сегмента
и быстро убирает мусор не отвлекаясь на анализ всего графа. По сути
чистит подграф.
Не отвлекаться не может. Т.к. ссылки могли быть переданы в какой-то "глобальный" объект, и "только внутри" не получится. Но в случае с eden, он как-то такие ситуации разгуливает.

Вместо одного глобального eden, хочется много мелких "локальных". На уровне thread, http-запроса и т.д. В принципе, даже некоторые методы можно было бы помечать локально-эденистыми. Где известно, что будет идти большое выделение памяти внутри.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205130
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При этом minor (eden) GC вроде работает в параллельном режиме. Т.ч. даже VM на такую уборку можно не останавливать. А делать в параллель, в фоне.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205131
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Возможно, можно было бы на уровне VM сделать Thread кучи. Т.е. все объекты созданные в рамках Thread относятся к "своей" кучи.

Так оно так и работает насколько я себя помню, у каждого Thread есть свой TLAB(thread local allocation buffer)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205147
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никLeonid KudryavtsevВозможно, можно было бы на уровне VM сделать Thread кучи. Т.е. все объекты созданные в рамках Thread относятся к "своей" кучи.

Так оно так и работает насколько я себя помню, у каждого Thread есть свой TLAB(thread local allocation buffer)

thread local allocation buffer - для алоцирования
А Eden область и сборка мусора - общая. AFAIK
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205151
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но нужно читать. Сейчас есть G1 коллектор, когда я разбирался - его еще не было. Т.ч. мои знания могут быть устаревшими.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205157
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevthread local allocation buffer - для алоцирования
А Eden область и сборка мусора - общая. AFAIK

Не совсем понял, TLAB же выделяется в Eden, или ваша идея в том чтобы у каждого потока была та же куча только в миниатюре? Со своим eden и Old? И в чем профит?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205173
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никСо своим eden и Old?
ну я только о Eden говорил. Т.к. поделить Old будет значительно сложнее.

забыл никИ в чем профит?
много букв получится

Разные задачи/приложения/запросы - разные требования к памяти. А в JVM приходится грести все под одну гребенку. Или часть задач принудительно выносить в другую JVM, что бы свои настройки кучи дать.

HTTP сервер - хочется по максимому Eden и по минимому Old
Задачи вроде MemCache - наоборот

А когда и те и другие задачи начинают работает в рамках одной JVM, одного application server'а - помойка получается

IMHO & AFAIK
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205746
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПо сути на уровне разработки дать больше инструментов для управления аллокацией.
Ну ты б еще выравнивание адресов и вообще структуры нормальные попросил. Это ж java - здесь такое просить странно. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205852
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевmaytonПо сути на уровне разработки дать больше инструментов для управления аллокацией.
Ну ты б еще выравнивание адресов и вообще структуры нормальные попросил. Это ж java - здесь такое просить странно. :)
Страницу или две назад именно это и просили :-)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205924
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевmaytonПо сути на уровне разработки дать больше инструментов для управления аллокацией.
Ну ты б еще выравнивание адресов и вообще структуры нормальные попросил. Это ж java - здесь такое просить странно. :)
На некоторых собеседованиях на Java-dev спрашивают про размер Object.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39205931
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНа некоторых собеседованиях на Java-dev спрашивают про размер Object.
И какой у него размер?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39206129
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Елизаров бухтит что-то про intern(). А я вот щас такой код пишу. Страна - регион - город -- справочники из гео
глассификатора IP-blocks (где-то я выше тему поднимал).

Код: 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.
@Immutable
public final class Location {

    final int    locId;
    final String country;
    final String region;
    final String city;
    final String postalCode;
    final double latitude;
    final double longitude;
    final String dmaCode;
    final String areaCode;

    public Location(@Nonnull String locId, String country, String region, String city, String postalCode, 
                    @Nonnull String latitude, 
                    @Nonnull String longitude, String dmaCode, String areaCode) {
        this.locId      = Integer.valueOf(locId);
        // TODO: Check intern() for effectivity
        this.country    = country.intern();
        this.region     = region.intern();
        this.city       = city.intern();
        this.postalCode = postalCode;
        this.latitude   = Double.parseDouble(latitude);
        this.longitude  = Double.parseDouble(longitude);
        this.dmaCode    = dmaCode;
        this.areaCode   = areaCode;
    }
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39206138
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня примерно такие же справочники, при этом везде коды 2-3 латинские заглавные буквы

Я вместо строк банально коды в int перегнал, т.ч. по программе везде int'ы гуляют.

А в первый байт закодировал еще и тип справочника. Т.к. иногда коды из разных справочников совпадают, т.ч. я еще всегда знаю, не перепутал ли я справочники.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39206142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevmaytonНа некоторых собеседованиях на Java-dev спрашивают про размер Object.
И какой у него размер?
Это очень хороший вопрос бро. Спека пишет следующее

JVM 8 spec 2.7 Representation of Objects

The Java Virtual Machine does not mandate any particular internal structure for objects.

In some of Oracle’s implementations of the Java Virtual Machine, a reference to a class instance is a pointer to a handle that is itself a pair of pointers: one to a table containing the methods of the object and a pointer to the Class object that represents the type of the object, and the other to the memory allocated from the heap for the object data.

Я часто ошибался в ответах на подобные вопросы и прошу коллег сначала высказать свои
ответы. А я подом че нить добавлю или поддакну.

С уважением.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39206145
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно было бы конечно и интернировать... Но я еще дальше пошел. У меня обрабатываются маршруты "из-в", если я все такие пары буду интернировать - боюсь память сразу же закончится. А так long - два int.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39206274
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevmaytonНа некоторых собеседованиях на Java-dev спрашивают про размер Object.
И какой у него размер?

http://openjdk.java.net/projects/code-tools/jol/

Зависит от архитектуры. Или 8 байт на x32, или 12(16 с учетом выравнивания) байт на х64.
На арм проверить нечем, но скорей всего то же самое.

Там еще по идее можно глянуть спеку jvm. Там может что-то быть по теме, т.к. для jni это может быть нужно и оно может быть стандартизовано. Но спеку я не смотрел.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39246470
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже сейчас на стримах задачку делал. Жесть какая-то. Пока непривычно.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39246477
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне интересны стримы в части упрощения работы с БД. Например в jOOQ есть расширение jOO(Lamdba)
для поддержки функций высокого порядка при работе с БД. Тюториалы и примеры завлекают
но как щас прикрутить это к своему проекту - ХЗ. Сложно пока. Особенно в части выброса
исключений.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250098
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriycheMasterZiv,

Если уж использовать Java 8, то только на полную катушку
Код: 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.
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

import static java.lang.System.out;

public class Main {

    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {
            printDictionary("words",
                    reader.lines()
                            .filter(line -> !line.isEmpty())
                            .flatMap(line -> Arrays.stream(line.split(WORD_DELIMITERS_REGEX)))
                            .filter(word -> !word.isEmpty())
                            .map(String::toLowerCase)
                            .collect(
                                    Collectors.toMap(
                                            word -> word,
                                            word -> 1,
                                            (count1, count2) -> count1 + count2
                                    )
                            )
            );
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}



Какой ужасный, нечитаемый, неотлаживаемый код! Я в шоке! Ниже я написал аналог с итерациями, а ещё ниже более менее читаемый код с оперциями над коллекциями.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            Map<String, Integer> dictionary = new HashMap<>();
            for (String line: Files.readAllLines(Paths.get("text.txt"))) {
                if (!line.isEmpty()) {
                    for (String token : line.split(WORD_DELIMITERS_REGEX)) {
                        if (!token.isEmpty()) {
                            token = token.toLowerCase();
                            dictionary.put(token, dictionary.getOrDefault(token, 1));
                        }
                    }
                }
            }




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
                Stream<String> fileLines = Files.lines(Paths.get("text.txt")); // for line: Files.readAllLines
                Stream<String> notEmptyLines = fileLines.filter(s -> !s.isEmpty()); // if (!line.isEmpty()) {
                Stream<String> allTokens = notEmptyLines.flatMap((String s) -> Arrays.stream(s.split(WORD_DELIMITERS_REGEX)));// for token: line.split
                Stream<String> notEmptyTokens = allTokens.filter(s -> !s.isEmpty()); // if !token.isEmpty
                Stream<String> lowercasedTokens = notEmptyTokens.map(String::toLowerCase); // token = token.toLowerCase()
                Map<String, Integer> dictionary = lowercasedTokens.collect( // dictionary = new HashMap<>()
                        Collectors.toMap(k -> (String) k, k -> 1, (Integer v1, Integer v2) -> v1 + v2) // dictionary.put
                );



Как мы видем итерации соотносятся с операциями над коллекциями один-к-одному. Отсюда вопрос: а нахрена народ то кипятком писает от нового Stream api. Никакой экономии места он не даёт.

Он мог бы улучшить читаемость если бы Оракл не реализовала этот API так по-дебильному: надо коллекцию превращать в стрим, а потом собирать коллектором. При этом итерции по стриму не работают. Для пользователей нормальных языков это выглядит полным безумием. Кроме того: модифицировать в лямбдах ничего нельзя, даже простейший счётчик не вставишь.

Ну и нафига нужен этот маразм?? Уж лучше его не было бы! Переходите уже на груви/котлин и не мучайте уже этот труп.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250103
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тешу себя надеждой что будет преимущество в части Parallelism.

https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html

Чуть позже если найду - приведу пример где это явно имело преимущество
(Apache Spark). Но там была инфраструктура вычислительного кластера.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250175
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ужас смотрю на ява8 - такое ощущение что это вообще не ява.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250178
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ява - это мотоцикл. Смотри... завалят на собесе на 1-м вопросе
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250217
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯва - это мотоцикл. Смотри... завалят на собесе на 1-м вопросе
не понял
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250239
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый вопрос - что такое Ява? :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250260
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПервый вопрос - что такое Ява? :)
язык программирования. только давай вот без американизмов. :) ты же кафе говоришь а не кэффэй )) ну или аэропорт а не эйрпоат.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250263
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTmaytonПервый вопрос - что такое Ява? :)
язык программирования. только давай вот без американизмов. :) ты же кафе говоришь а не кэффэй )) ну или аэропорт а не эйрпоат.
Щас еще минус 1 балл будет! Не спорь с интервьюером. Хочешь работать в команде - будь добр
перенимай терминологию.

Но это так... шутка. Но за каждой шуткой есть....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250266
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ой, я забыл что я на собесе. да, коненчо же вы правы - джава это джава а ява - это остров такой. и сорт кофе кажется. а еще мот о котором мой дедушка мечтал.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39250274
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще чай такой был, зеленый. И вполне себе неплохой )))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251805
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
        .collect(
                                    Collectors.toMap(
                                            word -> word,
                                            word -> 1,
                                            (count1, count2) -> count1 + count2
                                    )
                            )



можно и более выразительно :

Код: java
1.
2.
  .collect(groupingBy(identity(),counting()))  // identity() === t->t
  .forEach((k, v) -> System.out.println(k +" : " + v));
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251809
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251811
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach
Странно от тебя такое читать. Ты должен был написать, на кой она нужна та Java 8, если и на Java 7 можно всё написать.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251915
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach

9 достаточно скучна .... ничего прорывного , если смотреть на 8 ....

возможно будет стринг в виде ansi строки а не utf , в тех случаях когда все символы ascii . одна оптимизация и перфоманс ...


по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего ... :) ну и так еще по мелочам накидали классов ... хелперов ....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251920
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего
Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251956
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадячто спорит о восьмерке - уже девятка на подходе
https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach
Странно от тебя такое читать. Ты должен был написать, на кой она нужна та Java 8, если и на Java 7 можно всё написать.
это была шутка юмора.
я против такой скорости обновления, только потому, что не успели опубликовать использования всех тонкостей, одной версии, как уже другая, и всё по новой. пока инфу найдешь, пока исследуешь...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39251989
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAtum1по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего
Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная.

Поподробнее можно ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252015
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Поподробнее можно ?
YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252020
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говнопарсер убил ссылки. В общем, на 1:09:07 Куксенко рассказывает про детали реализации.
На 23:38 Шипилев рассказывает о том что в поведении отличий от анонимных классов нет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252110
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Blazkowiczпропущено...

Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная.

Поподробнее можно ?
Она собирается как static метод в том классе где используется ЕМНИП. Но я это тестил на самых ранних
первых версиях Jdk8
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252466
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczГовнопарсер убил ссылки. В общем, на 1:09:07 Куксенко рассказывает про детали реализации.
На 23:38 Шипилев рассказывает о том что в поведении отличий от анонимных классов нет.

ну вроде да - либо вдолженный класс на лету либо метод-хендлер

вообще как сейчас и в каждом конкретном случае нужно смотреть что там будет - самый простой тест :

Взять самую простую ламбду - в виде анонимного класса и ламбы -и декомпельнуть javap - и посмотреть что будет ....
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252562
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

@Warmup(iterations = 3)
@Measurement(iterations = 10)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class MicroTest {

    public interface Foo {

        public Object foor();
    }

    @Benchmark
    public Foo inner() {
        return new Foo() {

            @Override
            public Object foor() {
                return "42";
            }
        };
    }
    
    @Benchmark
    public Foo lambda() {
        return () -> "42";
    }
    
    public static void main(String[] args) throws RunnerException {
        
        Options opt = new OptionsBuilder()
                .include(MicroTest.class.getSimpleName())
                .forks(1)
                .build();

        new Runner(opt).run();
    }

}



Код: java
1.
2.
3.
4.
5.
# Run complete. Total time: 00:00:27

Benchmark         Mode  Cnt  Score   Error  Units
MicroTest.inner   avgt   10  6,419 ± 1,052  ns/op
MicroTest.lambda  avgt   10  2,855 ± 0,065  ns/op



Код: 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.
$ javap -c MicroTest.class 
Compiled from "MicroTest.java"
public class ru.isalnikov.benchmarkfactorial.MicroTest {
  public ru.isalnikov.benchmarkfactorial.MicroTest();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public ru.isalnikov.benchmarkfactorial.MicroTest$Foo inner();
    Code:
       0: new           #2                  // class ru/isalnikov/benchmarkfactorial/MicroTest$1
       3: dup
       4: aload_0
       5: invokespecial #3                  // Method ru/isalnikov/benchmarkfactorial/MicroTest$1."<init>":(Lru/isalnikov/benchmarkfactorial/MicroTest;)V
       8: areturn

  public ru.isalnikov.benchmarkfactorial.MicroTest$Foo lambda();
    Code:
       0: invokedynamic #4,  0              // InvokeDynamic #0:foor:()Lru/isalnikov/benchmarkfactorial/MicroTest$Foo;
       5: areturn

  public static void main(java.lang.String[]) throws org.openjdk.jmh.runner.RunnerException;
    Code:
       0: new           #5                  // class org/openjdk/jmh/runner/options/OptionsBuilder
       3: dup
       4: invokespecial #6                  // Method org/openjdk/jmh/runner/options/OptionsBuilder."<init>":()V
       7: ldc           #7                  // class ru/isalnikov/benchmarkfactorial/MicroTest
       9: invokevirtual #8                  // Method java/lang/Class.getSimpleName:()Ljava/lang/String;
      12: invokevirtual #9                  // Method org/openjdk/jmh/runner/options/OptionsBuilder.include:(Ljava/lang/String;)Lorg/openjdk/jmh/runner/options/ChainedOptionsBuilder;
      15: iconst_1
      16: invokeinterface #10,  2           // InterfaceMethod org/openjdk/jmh/runner/options/ChainedOptionsBuilder.forks:(I)Lorg/openjdk/jmh/runner/options/ChainedOptionsBuilder;
      21: invokeinterface #11,  1           // InterfaceMethod org/openjdk/jmh/runner/options/ChainedOptionsBuilder.build:()Lorg/openjdk/jmh/runner/options/Options;
      26: astore_1
      27: new           #12                 // class org/openjdk/jmh/runner/Runner
      30: dup
      31: aload_1
      32: invokespecial #13                 // Method org/openjdk/jmh/runner/Runner."<init>":(Lorg/openjdk/jmh/runner/options/Options;)V
      35: invokevirtual #14                 // Method org/openjdk/jmh/runner/Runner.run:()Ljava/util/Collection;
      38: pop
      39: return
}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39252587
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    private Foo cached = new Foo() {

        @Override
        public Object foor() {
            return "42";
        }
    };
    
    @Benchmark
    public Foo inner_cache() {
        return cached;
    }



Код: java
1.
2.
3.
4.
Benchmark              Mode  Cnt  Score   Error  Units
MicroTest.inner        avgt   10  6,395 ± 0,501  ns/op
MicroTest.inner_cache  avgt   10  3,915 ± 0,721  ns/op
MicroTest.lambda       avgt   10  3,330 ± 0,744  ns/op
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39379745
twr143
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered
Код: java
1.
    dictionary.put(token, dictionary.getOrDefault(token, 1));



->
Код: java
1.
    dictionary.put(token, dictionary.getOrDefault(token, 0)+1);
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Java 8 - уже не совсем Java?
    #40045304
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за резкий UP.

Искал где были стримы, доклады и конференции по теме Java. Не нашел. Пускай будет здесь.

Основные инженеры, которые заняты перформансом, компилляторами и GC собрались дать краткий обзор
по текущему состоянию релизов Java8/11/15/16/17.

YouTube Video
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046404
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тебе геттеры? Опять - поддержкать еще один никому не нужный тяжелый фреймворк?
Если фреймворк не осилит рекорды - то значит они ему и не нужны. А мир двигается дальше.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046427
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сеттеры в рекордах? Рекорды же иммутабельные были по определению. В начале по крайней мере.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046434
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

я думаю осилит- вопрос в том сколько все тогда поломается- код то старый нужно поддерживать
поэтому проще все name() написать getName() и все будут счастливы и фреймворки и рекорды взлетят
пока это не юзабельно ибо сериализиторы без гетов не могут объект собрать .
Я не пойму почему рекорд сделали по ломбоковски- типо getter это name() а setter ->name(String name)
это ломает всю систему


тебе нужно попытаться какой-нить кодогенератор или интроспектор написать и ощутить всю боль на себе: у полей префиксы типа is/has несут вполне ощутимую смысловую нагрузку, а когда мы начинаем пользоваться "конвенциями", где для булевских полей у нас геттеры должны называться (is|get)FieldName то сразу сталкиваемся с кучей трудностей. Называть геттеры точно также как и поля - это великая веха в истории жавы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046438
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
Андрей Панфилов


тебе нужно попытаться какой-нить кодогенератор или интроспектор написать и ощутить всю боль на себе: у полей префиксы типа is/has несут вполне ощутимую смысловую нагрузку, а когда мы начинаем пользоваться "конвенциями", где для булевских полей у нас геттеры должны называться (is|get)FieldName то сразу сталкиваемся с кучей трудностей. Называть геттеры точно также как и поля - это великая веха в истории жавы.

попаболь с генерацией булевых полей я уже ощутил на себе
когда какой то му_дак аналитик называет поле isImIdiot - и сразу ломается ломбок тут
по итогу ты судорожно ищешь такие поля и делаешь им ручные гет/сет
getIsImIdion /setIsImIdiot

на счет вехи не уверен- веха эта уже имеется в виде ломбока @Accecor(true)


Не ну твое software кунфу конечно сильное. Попробую в следующий раз бизнесу отписать - фича не может быть реализована, потому что ломбок б...ь
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046443
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

я думаю осилит- вопрос в том сколько все тогда поломается- код то старый нужно поддерживать
поэтому проще все name() написать getName() и все будут счастливы и фреймворки и рекорды взлетят
пока это не юзабельно ибо сериализиторы без гетов не могут объект собрать .
Я не пойму почему рекорд сделали по ломбоковски- типо getter это name() а setter ->name(String name)
это ломает всю систему

Ломбок здесь вообще непричем. По моему скромному мнению records это некие предтечи функционального
программирования в Java. Я не зря поднимал топик о смерти ООП. Но это было просто гипертрофированная
фантастика. Реальность примерно такова. Середина 20-го века прошла под флагом логического и функционального
программирования. Это было время сильной математики. И точных наук. В конце 20 века пришел бизнес.
И программирование стало на службе у обычной бухгалтерской арифметики. Там не нужен был вывод
остаточных процедур и доказательтво свойства у какой-то функции. Нужно было просто еб*шить код.
Много кода. И требования к самим кодерам должны быть снижены. ООП подходил идеально.

Сегодня имеет место процесс переосмысления. Когда программисты ищут нового. Ищут коротких языков.
DSL-подобных. И безопасных. И открылись некоторые предметные области (bigdata/Spark) где свойства ФП
(такие как неизменяемость переменных) дают преимущества. В самом деле. Если переменная с момента
объявления никогда не меняется (это похоже на final в Java но посложнее) то синхронизация с ней
черезе synchronized или другие API становится ненужной. В самом деле. Потоки всегда видят одно
value. Уходит целый пласт проблем гонок и голоданий в мультипоточке. Уходят ошибки (code-smells) повторного
использования переменной в методе в другой роли. Об этом часто пишут Фаулер и дядко Боб.

И это только вершина айсберга. Настоящее ФП постулирует также неизменяемость коллекций.
Отсюда кстати вытекает одна важная рекомендация в использовании Java Streams которую джависты
обычно нечитают и не понимают зачем она. В ФП (Scala) декларирован генерик Stream[A]/LazyList[A] который
програмным образом позволяет создать бесконечные коллекции. Коллекции с отложенной инициализацией.
Генераторы. В спарке работа с RDD очень напоминает чистое ФП хотя сами по себе RDD происходят
как исторический срез какой-то базы данныз.

Конечно взамен мы получаем новые вопросы. Как - использовать в цикле Java-Records? Как декларировать
что Stream - ленивый и бесконечный. Но это будет некое итеративное развитие спецификации языка.

Насколько я вижу - главные идеологи JLS - очень осторожны в этом смысле.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем идут такие тектонические изменения, что обсуждать Spring и Lombok неинтересно.
Они - просто бюрократический обвес.

Будет менятся мышление разработчиков.

P.S. Да конечно ООП останется. Никто его не уберет. Мультипарадигменность - будет важнее чем культ Спринга или Ломбока.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046478
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Атомики решают часть задач мультипоточки.

Могу придумать задачу, которую ты не решишь только на них.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40046763
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только мало понятно, что же за задачка такая.
дабы и блокировки и все остальное - реализуются чисто через память. Т.ч. даже атомики вроде избыточны, вполне volatile должно хватать. IMHO AFAIK

не специалист по многопоточке.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048226
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
...
дабы и блокировки и все остальное..
...
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048227
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. избыточность != нунжы и востребованы

Ваш К.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048232
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это один из вопросов который может прилететь на собесах. Сначала спросят про обеспечение уникальности
счетчика (или PK) в рамках одного JavaProcess.

Если у нас есть распределённая система (10 cluster nodes) и для всех них нужен некий генератор уникальности
(в рамках Integer или Long или String) то атомик становится не особо полезен. Тоесть он конешно полезен но накладные
расходы будут не в самом атомике а вообще в архитектуре сети. Тут можно делать генерацию на базе UUID или
просто побив диапазон целых например по известной формуле.

На прошлом проекте я придумывал динамическое разбиение диапазона Long при условии что изначально число
узлов - неизвестною. Но каждый из потребителей не должен испытвать проблем с номерной ёмкостью ключей.

Это к сожалению не зашло в прод. Но идея у меня осталась.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048233
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
atomic и сделаны через volatile. Можно исходный код погуглить.

То, что "классы разные нужны, классы многие важны" - никто и не спорит

возьмут волатайл по вашему совету
у меня где-то был такой совет?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048234
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну уникальные ID-шники это такое...

Например в CC&B ID-шники генерировались как случайные числа. Долго изумлялся, потом прочитал, что это чуть ли не стандарт в написании высоконагруженных приложений для СУБД ))). А сиквенсы - вообще отстой и торзмоз )))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048236
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[censored]

Смысл моего поста был, что через volatile МОЖНО написать ЛЮБОЕ многопоточное приложение. Т.к. даже блокировки (synchronize, lock) тоже через них делаются. Т.е. избыточны, в моем понимании данного слова.

Но избыточны и можно НЕ РАВНО [censored] "удобно", "отлично подходит", "предлагал".
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048237
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и да... ждем обещанной задачи от знатоков многопоточки
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048245
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Ну и да... ждем обещанной задачи от знатоков многопоточки

Ну вообще-то volatile никак не может заменить atomic. Volatile переменная в сорцах отвечает только за корректность метода get, т.е чтение. Модификация же заимплеменчена через Unsafe, который в свою очередь использует нативные инструкции процессора - CAS(compare and swap). Ну и собственно любая задача, где нужно обновить переменную, учитывая ее значение не может быть реализована на одном volatile. Стас конечно редко дело говорит, но в данном случае он ближе к правде
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048256
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни JVM не JLS не регламентируют как должен быть реализован Atomic. Это всё - особенности железа и native
библиотек Java. На JVM/Intel - это может быть Atomic -> Unsafe -> CAS, на каком-нибудь JVM/Эльбрус-Байкал это может быть
что-то другое Atomic -> .... e.t.c.

И непонятно чего мы спорим. Стек атомика реализован опытными людьми, которые прошли много редактуры
кода JVM. Там - каждая строка - выстрадана и вылизана до предела.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048259
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
пс. Леня ты собсвенно прежде ответа - изучи матчасть
Он прав в том, что volatile достаточен для синхронизации многопоточных вычислений.
Проблема в том, что организация многопоточности только через volatile - очень неэффективна. Тратить процессорное время, в основном, на ожидание захвата очередного семафора - так себе вариант.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048275
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79,
>вот сейчас я пилю сервис
= этот топик курилка что ли?
Кончай подымать топики по надцать страниц.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048318
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
----
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048443
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

И непонятно чего мы спорим. Стек атомика реализован опытными людьми, которые прошли много редактуры
кода JVM. Там - каждая строка - выстрадана и вылизана до предела.

Одно время читал livejournal человека который учился и серьезно разбирался в многопоточке. Там все сильно плохо ))) сказать что "каждая строка выстрадана и вылизана до предела" это сильно большое приувеличение. На стандартные библиотеки от Java __очень__ много критики и достаточно много альтернативных реализаций.

Те же самые Atomic'и появились не так уж и давно (по меркам Java). До этого их просто не было. Фактически единственный "многопоток" который был в Java более-менее изначально ConcurrentLinkedQueue. Да и тот ругали, что используемый там алгоритм приводить к memory leak'у. Но когда я пытался повторить test case, у меня повторить не получилось, возможно на тот момент уже подправили или я чего-то недопонял (возможно проблема затрагивает только minor сборщик мусора).

AFAIK

Например Sun/Oracle авторы Java библиотек на коллизии при доступе к данным в одной строке кеша - клали и, как я подозреваю, продолжают класть с высокой колокольни. Возможно в Open JDK что-то изменилось. Но не факт. Не знаю.

Набор конкарент коллекций так же достаточно убогий. Или просто blocking обертка поверх стандартных коллекций или раз-два и все. Например отсутвуют нормальные многопотоковые bounded коллекции.

Хотя для любого более-менее нормального сервиса/сервира, проверка на переполнение очереди сообщение как-то ну крайне желательна. Т.е. ConcurrentLinkedQueue для очереди сообщений - ну сильно не оптимальный выбор, а другого в стандартных библиотеках вроде то и нет.

В результате нарываешься на костыли и велосипеды, где классы используются совершенно НЕ по их назначению. Например берут ConcurrentLinkedQueue и поверх навешивают 100500 счетчиков на AtomicInteger, что бы банальный size коллекции считать и проверять (видел такое в реальных проектах). А то что получается в итоге, еще и эффективным многопотоком обзывают ))) хотя это не многопоток, а помойка из отбросов ))).
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048449
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
[censored]
Смысл моего поста был, что через volatile МОЖНО написать ЛЮБОЕ многопоточное приложение.

ИМХО довольно спорное утверждение. Как к примеру чисто на волатайлах сделать простой лок? Можно пример кода? - пусть даже не эффективного
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048463
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
Leonid Kudryavtsev
[censored]
Смысл моего поста был, что через volatile МОЖНО написать ЛЮБОЕ многопоточное приложение.

ИМХО довольно спорное утверждение. Как к примеру чисто на волатайлах сделать простой лок? Можно пример кода? - пусть даже не эффективного

Циклы крутить.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048464
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Те же самые Atomic'и появились не так уж и давно (по меркам Java)
1.5 и backport в 1.4.2 это, типа, вчера???
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048466
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
SpringMan
пропущено...

ИМХО довольно спорное утверждение. Как к примеру чисто на волатайлах сделать простой лок? Можно пример кода? - пусть даже не эффективного

Циклы крутить.

Ну у меня есть предположение, в каком виде вы хотите его написать) Но я сомневаюсь, что в таком виде он будет правильно работать. Поэтому и прошу пример кода - мало ли я что-то не так понимаю
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048473
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну как минимум:
1. никто не мешает сделать поток-диспетчер, который всегда выполняется и отслеживает блокировок/атомарных операций
поскольку к этим структурам доступ есть только у него, продлемы с многопотоком нет
2. в пользовательских потоках: посылаем в него сообщение, встаем в цикл, ждем ответа

Для передачи сообщений для каждого пользовательского/управляемого-потока, заводим банально по переменной. Если она пустая - пред. сообщение потоком-диспетчером обработалось, пишем сообщение в данную переменную. Если не пустая - стоим/ждем

переменная используется в качестве вырожденного Single Producer - Single Consumer Queue на одно сообщение. В потоке-диспетчере пробегаем в цикле все очереди.

IMHO
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048475
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Набор конкарент коллекций так же достаточно убогий. Или просто blocking обертка поверх стандартных коллекций или раз-два и все. Например отсутвуют нормальные многопотоковые bounded коллекции.

Хотя для любого более-менее нормального сервиса/сервира, проверка на переполнение очереди сообщение как-то ну крайне желательна. Т.е. ConcurrentLinkedQueue для очереди сообщений - ну сильно не оптимальный выбор, а другого в стандартных библиотеках вроде то и нет.
ArrayBlockingQueue вам чем не угодил?
Ограничен в размерах? Да.
Можно проверить размер конкретной очереди? Да.
Можно проверить количество доступных слотов? Да.
Можно "на авось" подождать (заданное время) при помещении элемента в переполненную очередь? Да, хотя это - сомнительное решение.
Требуются сложные дисциплины обслуживания? Да, придётся ручками.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048479
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
...типа, вчера???

был не прав.
Атомики и ConcurrentLinkedQueue одновременно появились. Мне почему-то казалось, что это более позднее дополнение.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048483
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно изначально было в пакете Doug Lea EDU.oswedu.чего-то.там.util.concurent.
Я запомнил, поскольку у нас был сервис на 1.4.2, где использовался именно этот пакет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048514
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

Doug Lea

У меня такое чувство, что это чуть ли не единственный человек, который занимался этими пакетами. Он точно читает лекции и ведет курсы, где учит многопоточке. В том числе, lock free алгоритмам начиная с Circle Ring Buffer.

Почему он пропихнул именно и исключительно ConcurrentLinkedQueue в стандартные библиотеки, то ведомо только ему ))) возможно просто в тот момент ему именно данный lock free алгоритм был интересен. В общем, планомерной работы по конкаррент ( lock free, wait free ) коллекциям - не заметно. Одни случайные классы/алгоритмы (как уже выяснилось по данной дискуссии "полезные" ))) ) добавили, другие, не менее, а возможно и более полезные и классические алгоритмы - нет.

ConcurrentLinkedQueue есть, а более простой и производительный Circle Ring Buffer нет.

AFAIK

"Нормальные библиотеки" ( TM ) сразу же включают в себя целую кучу алгоритмов:

SingleProducerSingleConsumer
MultiProducerSingleConsumer
SingleProducerMultiConsumer
MultiProducerMultiConsumer....

Bounded / unbounded и так далее.....

А Doug Lea из всей кучи выдернул одинокий ConcurrentLinkedQueue и включил его в стандартные либы. И по факту везде в проектах ConcurrentLinkedQueue и к месту и не к месту. Дабы других lock free и не дали.

В целом стандартная Java Lib в очень многих местах выглядит как дикая помойка. Например 100500 разных классов для работы с датами. Не говоря уже о том, что в одних стандартных классах месяц нумеруется с 0, в других месяцы нумеруются с 1. Историческая помойка.
Когда понадобилась более-менее нормальная работа с датами, пришлось взять JodaTime
Когда понадобились более-менее нормальные коллекции (производительность, потребление памяти) - опять таки пришлось брать сторонние либы.
Т.ч. многопоточка не исключение )))

IMHO
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40048536
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этот блог мне очень понравился. Очень интересные посты. Он учился у Doug Lea и писал/оптимизировал свой lock free коллекцию. В общем, как человек степ бай степ успешно учился многопоточки и оптимизации. Поскольку степ бай степ - то даже мне местами было понятно )))

http://psy-lob-saw.blogspot.com

Я так понимаю, он сейчас один из авторов org.jctools

https://github.com/JCTools/JCTools

Применительно собственно к теме топика (новые версии Java). Интересный факт, что изменение garbage collection на новый lock free алгоритмы запортило )))

http://psy-lob-saw.blogspot.com/2018/01/what-difference-jvm-makes.html

Oracle8u144:
pollsMade | 361.161 ± 4.126 ops/us

Oracle9.0.1:
pollsMade | 26.182 ± 2.273 ops/us

изучаешь изучаешь lock free алгоритмы, а тут приходит новый garbage collector и сам всюду блокировки раставляет )))
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40049059
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
ну как минимум:
1. никто не мешает сделать поток-диспетчер, который всегда выполняется и отслеживает блокировок/атомарных операций
поскольку к этим структурам доступ есть только у него, продлемы с многопотоком нет
2. в пользовательских потоках: посылаем в него сообщение, встаем в цикл, ждем ответа

Для передачи сообщений для каждого пользовательского/управляемого-потока, заводим банально по переменной. Если она пустая - пред. сообщение потоком-диспетчером обработалось, пишем сообщение в данную переменную. Если не пустая - стоим/ждем

переменная используется в качестве вырожденного Single Producer - Single Consumer Queue на одно сообщение. В потоке-диспетчере пробегаем в цикле все очереди.
IMHO


Ну я ожидал без диспетчера, но это походу мои проблемы) А так да, как решение похоже подходит
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #40058609
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Релизнулась 16 версия. И хотя это еще не LTS. Предлагаю обсудить че так и как.
...
Рейтинг: 0 / 0
448 сообщений из 448, показаны все 18 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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