Как стать автором
Обновить
3
0

Пользователь

Отправить сообщение
разница в том, что первый вариант — это оператор присваивания, а второй — создание нового объекта в хипе (который впоследствии может быть и удален из хипа) ну и присваивание тоже. возьмите декомпилятор и проверьте. от присваивания переменной [допустимого для ее типа] значения размер хипа и его фрагментация не изменяется. Не знаю как найти в официальной документации по жаве такую банальную вещь. Предлагаю вам самостоятельно проверить и аргументированно опровергнуть, если вас что-то в моих словах не устраивает. В конце концов, ну запустите вы фуу и бар и посмотрите как будет вести себя хип и как будет работать GC
побойтесь бога! если бы конструкция String a=«hello»; размещала бы (на этапе рантайма программы, разумеется) в хипе новый объект типа String, то откуда вообще в этом стринге возьмутся последовательно составленные символы h-e-l-l-o? Дело как раз в том и состоит, что код навроде вот такого никаким боком ничего не меняет в хипе

public void foo ( )
{
  while ( true )
  {
    String a = "hello";
    String b = "apple";
    String c = "banana";
    String d = "apricot";
    String e = "pear";
//
    a = null;
    b = null;
    c = null;
    e = null;
  }
}

в отличии от вот такого:
public void bar ( )
{
  while ( true )
  {
    String a = new String ( "hello" );
    String b = new String ( "apple" );
    String c = new String ( "banana" );
    String d = new String ( "apricot" );
    String e = new String ( "pear" );
//
    a = null;
    b = null;
    c = null;
    e = null;
  }
}

на что я и постарался обратить внимание топикстартера
я принимаю претензию о неверной терминологии. я имел в виду, что объект типа String будет создан на стадии загрузки класса и не будет выгружен. далее в программе манипуляции типа String a=«hello»; String b=a; a=null; b=«world»; b=null; ничего с хипом не делают вообще(!). Перечитайте оригинальную статью начиная со слов «Давайте посмотрим на пример. Допустим, у нас есть следующий код:» и посмотрите на код.
зачем эксепшены? в x86 для этого carry-флаг есть.
  add    RAX,RBX
  jc     >label
Надо понимать, что «сложение» и «сложение xx-битных чисел в компьютере» вообще говоря разные операции. Эксепшен — это «все, финиш, приехали». А переполнение при том же сложении — это заранее оговоренная в документации особенность работы конкретного процессора.
> но в некоторых особо точных расчётах и его может не хватить

вот это я и пытаюсь спросить — каким образом вы собираетесь делать «особо точные расчеты», если не использовать те же алгоритмы с увеличенной разрядностью? ладно, умножение в столбик я представляю как реализовать. а деление и прочие синусы?
Хорошо, предположим что ваш тезис о недопустимости финансовых расчетов с помощью арифметики с плавающей точкой верен. А какие в таком случае альтернативы? Если имеется счет, на который была внесена сумма в ххх.xx рублей с процентной ставкой yy.yy% в месяц и накопительным процентом (я забыл как называется этот термин правильно) — то какая сумма должна быть на счете через z1 дней, если через z2 дней клиент захочет снять треть вклада? Посчитайте это без использования плавающей точки, перемножьте на количество клиентов в банке и сравните получившиеся погрешности. Так или иначе придется «вручную» совершать те же операции нормализации и округления до приемлемых порядков.
> Множество действительных чисел, конечно.

[каламбур]Множество действительных чисел бесконечно[/каламбур]
Велик и могуч русский язык :) Но как раз слово «конечно» в обиходе является синонимом «обозримо мозгом, имеет начало и конец» и поэтому будет антонимом для «несчетно, неисчислимо, бесконечно».
String a = «hello»;
// делаем чего-нибудь
a = null;
При этой операции сама строка «hello» никуда из памяти не денется. Ибо это вообще константная строка, которая загружается раз и навсегда при загрузке класса. Так что хипа от операции «a = null» больше не станет. И фрагментация хипа существено не изменится.
Разбиение описания (в том числе программы) на отдельные фрагменты служит единственной цели — уменьшению сложности описания объекта. Даже пятилетнему ребенку можно объяснить что самолет — это фюзеляж, хвост и два крыла и он летает. Подробности создания дюралюминия для заклепок корпуса, принципа действия двигателя реактивной тяги и основы аэродинамики жесткого крыла скрыто в имплементации (то бишь в подзадачах).
я живу в мире, в котором используется jdk1.3 и jdk1.4
имя этому миру — j2me

да в общем-то не в этом примере дело — подобные подходы, когда за счет какого-то ловкого фокуса можно достичь определенного результата существуют в разных языках (и даже сферах отличных от айти). если заранее в формулировке задания про ФиззБузз работодатель не сообщает дополнительные сведения, то соискатель с очень большой долей вероятности «промахнется» мимо того решения, которое предполагал работодатель как идеальное.
а что, собственно вас смутило в этом коде?

я сперва по привычке пролистнул комментарий в начале класса и просто начал читать методы.

на четвёртом методе понял, что меня дурачат, пролистал вниз (и вправо), на 5 секунд задумался о том, зачем это нужно было автору, прикинул что единственный известный мне резон поступать так — это оптимизировать то, что по каким-то причинам не оптимизируется компилятором/обфускатором.

вернулся на начало текста, прокитал комментарий и подтвердился в своей правоте (хотя еще проверю потом сам в помощью java-декомпилятора). может быть и воспользуюсь сам таким фокусом в моей программ, ибо как в некоторых случаях (в моем случае по крайней мере) я соглашусь на некоторую потерю «читабельности» кода ради выигрыша по памяти, объему, [скорости].

так что у меня к этому комментарий «УУУУУУУУУУУУУ!!!!!!»
В принципе, если меня попросят «выписать рецепт на аспирин» — я тоже «зависну» на пару дней, потому что заканчивал вовсе не медицинский факультет. Да и на перле, руби, питоне этот пример не напишу сходу. Да что там говорить — на бейсике не смогу, так как последний раз писал на бейсике 20 лет назад на ямахе MSX. Специалист подобен флюсу — он однобок. Я лично не пытаюсь перечислить в CV языки, на которых я могу написать только «Hello, World»
А в чем подвох-то?

public class FizzBuzz
{
  public static void main ( final String[] args )
  {
    for ( int i = 1; i <= 100; i++ )
      if ( ( i % 15 ) == 0 )
        System.out.print ( "FizzBuzz " );
      else if ( ( i % 3 ) == 0 )
        System.out.print ( "Fizz " );
      else if ( ( i % 5 ) == 0 )
        System.out.print ( "Buzz " );
      else
        System.out.print ( i + " " );
  }
}

M.Agent Java никакого отношения к Smaper Java не имеет. Ни одной строчки кода, ни одной иконки графики… Впрочем, вы все равно не поверите :)
Пожалуйста, поясните какие бенефиты получат пользователи и компания mail.ru если протокол агента будет изменен на xmpp.
могу предположить, что ДАМ билет в руках не держал
установите на своем телефоне верную дату перед тем как скачиваете подписанную сертификатом версию
12 ...
64

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность