Size: a a a

2020 September 13

T

Tagir in pro.jvm
Стрим можно обходить через tryAdvance и через forEachRemaining. Часто первый способ медленнее, потому что надо состояние в полях сохранять после каждого вызова. Бывает что он сильно медленнее. Через tryAdvance вычисляются стримы, которые потенциально короткозамкнутые. Потому что forEachRemaining не может остановиться. Вот была идея кидать control flow исключение из forEachRemaining. Часто это ускоряет
источник

A

Aleksandr in pro.jvm
Тут случайно залез в исходник HyperSQL (http://hsqldb.org/).

Конкретно в JDBCDriver.getConnection(String url, Properties info)

И там увидел логику подобного характера


long timeout = 0;

if (info != null) {
   timeout = HsqlProperties.getIntegerProperty(info, "loginTimeout", 0);
}

props.addProperties(info);

if (timeout == 0) {
   timeout = DriverManager.getLoginTimeout();
}

// @todo:  maybe impose some sort of sane restriction
//         on network connections regardless of user
//         specification?
if (timeout == 0) {

   // no timeout restriction
   return new JDBCConnection(props);
}


// @todo: Better: ThreadPool? HsqlTimer with callback?
final JDBCConnection[] conn = new JDBCConnection[1];
final SQLException[]   ex   = new SQLException[1];
Thread                 t    = new Thread() {

   public void run() {

       try {
           conn[0] = new JDBCConnection(props);
       } catch (SQLException se) {
           ex[0] = se;
       }
   }
};

t.start();

try {
   t.join(1000 * timeout);
} catch (InterruptedException ie) {
}

try {

   // PRE:
   // deprecated, but should be ok, since neither
   // the HSQLClientConnection or the HTTPClientConnection
   // constructor will ever hold monitors on objects in
   // an inconsistent state, such that damaged objects
   // become visible to other threads with the
   // potential of arbitrary behavior.
   t.stop();
} catch (Exception e) {
} finally {
   try {
       t.setContextClassLoader(null);
   } catch (Throwable th) {
   }
}


В общем-то смутило то, что имитация таймаута происходит через join(1000 * timeout).
Почему не банальный sleep(100 * timeout)?
Может кто-нибудь в курсе зачем так сделано?
источник

ИМ

Иван Михейкин... in pro.jvm
Так задача не поспать, а подождать коннекта максимум timeout времени. join с таймаутом тут как раз и подходит. try с join-ом либо успешно завершится, если удалось установить коннект меньше, чем за 1000*timeout, либо завершится с исключением, если прошло больше чем 1000*timeout.
источник

A

Aleksandr in pro.jvm
Но под “подождать коннекта” мы тут понимаем аллокацию объекта и запись его в массив
источник
2020 September 14

Lr

Larymar r.sorokin in pro.jvm
Добрый вечер
подскажите как поменять значение интернированной строки
я с шарпа заскочил, там я могу провернуть красивый фокус
к примеру интернировать "TRUE" потом поменять интернирование значение на "FALSE" и и далее при true.toStrng() получать "FALSE"
хочу попробовать провернуть в java
но никак не могу найти как подступиться
источник

AE

Alexandr Emelyanov in pro.jvm
Larymar r.sorokin
Добрый вечер
подскажите как поменять значение интернированной строки
я с шарпа заскочил, там я могу провернуть красивый фокус
к примеру интернировать "TRUE" потом поменять интернирование значение на "FALSE" и и далее при true.toStrng() получать "FALSE"
хочу попробовать провернуть в java
но никак не могу найти как подступиться
Строки не изменяемы, но можно похачить рефлексией
источник

AE

Alexandr Emelyanov in pro.jvm
Larymar r.sorokin
Добрый вечер
подскажите как поменять значение интернированной строки
я с шарпа заскочил, там я могу провернуть красивый фокус
к примеру интернировать "TRUE" потом поменять интернирование значение на "FALSE" и и далее при true.toStrng() получать "FALSE"
хочу попробовать провернуть в java
но никак не могу найти как подступиться
А для чего это?
источник

Lr

Larymar r.sorokin in pro.jvm
Alexandr Emelyanov
Строки не изменяемы, но можно похачить рефлексией
спасибо, я в курсе
как именно можно сдлеать это рефлексией)
источник

Lr

Larymar r.sorokin in pro.jvm
Alexandr Emelyanov
А для чего это?
чисто ради лулзов и опыта
источник

AE

Alexandr Emelyanov in pro.jvm
Larymar r.sorokin
чисто ради лулзов и опыта
Показать девочкам?
источник

а

а это кто in pro.jvm
Показать студентам
источник

Lr

Larymar r.sorokin in pro.jvm
Alexandr Emelyanov
Показать девочкам?
показать девочкам пишущим на жабе
источник

AE

Alexandr Emelyanov in pro.jvm
Для опыта как не то совсем понятно... Можно более интересные и полезные вещи поделать
источник

AE

Alexandr Emelyanov in pro.jvm
Larymar r.sorokin
показать девочкам пишущим на жабе
На самом деле они сначала посмеются над шарпом что там так можно
источник

Lr

Larymar r.sorokin in pro.jvm
а это кто
Показать студентам
именно так
мне вполне уютно на своих шарпах
но я хотел бы продемонстрировать забавную аналогичную функциональность в java
заинтерисовывать подрастающее поколение это благое дело
источник

Lr

Larymar r.sorokin in pro.jvm
Alexandr Emelyanov
На самом деле они сначала посмеются над шарпом что там так можно
там это тоже через рефлекшн работает)
источник

QH

Quantum Harmonizer in pro.jvm
Larymar r.sorokin
Добрый вечер
подскажите как поменять значение интернированной строки
я с шарпа заскочил, там я могу провернуть красивый фокус
к примеру интернировать "TRUE" потом поменять интернирование значение на "FALSE" и и далее при true.toStrng() получать "FALSE"
хочу попробовать провернуть в java
но никак не могу найти как подступиться
рефлекшен
источник

Lr

Larymar r.sorokin in pro.jvm
Quantum Harmonizer
рефлекшен
какой именно класс
их много
я ищу аналог шарпового MemoryMarshal
источник

QH

Quantum Harmonizer in pro.jvm
Larymar r.sorokin
какой именно класс
их много
я ищу аналог шарпового MemoryMarshal
String
источник

Lr

Larymar r.sorokin in pro.jvm
это через стринг делается?
звучит забавно
если мы друг друга корректно поняли
источник