Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Java

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 10.05.2009, 12:43   #16
EfremoffPaul
Новичок
 
Пол:Мужской
Регистрация: 09.05.2009
Сообщений: 1
Репутация: 0
По умолчанию Re: Простые (ли?) задачки по JAVA

int i = 5; i = ++i + ++i;
см. http://lurkmore.ru/%2B%2Bi_%2B_%2B%2Bi

Цитата:
Сообщение от refactorer Посмотреть сообщение
как напечатать "Hello, world" в консоли без функции main()

Это сделать просто, описано в литературе.

Этот тест родился в результате изучения загрузки классов.
Код:
public class InitTest {
	public static void main(String[] args) {
		BB x = new BB();
		System.out.println("b="+Integer.toString(x.b));
	}
}//main

class AA{
	protected void init(){}
	public AA(){
		init();
	}
}

class BB extends AA{
	int b = 1;
	protected void init(){
		b=2;
	}
	public BB(){}
}
EfremoffPaul вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: hp m211dwфильм жажда славыкупить серьги для девочкиМебельный магазин: кровать складная - Переходи на сайт!мозырь лясковичи


Старый 11.05.2009, 22:34   #17
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от EfremoffPaul Посмотреть сообщение
int i = 5; i = ++i + ++i;

В Java это 6 + 7 , без вариантов


Цитата:
Сообщение от EfremoffPaul Посмотреть сообщение
Цитата:

Сообщение от refactorer Посмотреть сообщение



как напечатать "Hello, world" в консоли без функции main()


Это сделать просто, описано в литературе.

Ссылочку если можно... .


Цитата:
Сообщение от EfremoffPaul Посмотреть сообщение
Этот тест родился в результате изучения загрузки классов.

А подробней нельзя? В чём тут соль?

... На мой последний вопрос по сборке мусора, кто нибудь знает ответ?
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...
ana вне форума
 
Ответить с цитированием Вверх
Старый 12.05.2009, 12:55   #18
Ignoramus
Неактивный пользователь
 
Пол:Мужской
Регистрация: 16.01.2009
Сообщений: 38
Репутация: 11
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от ana Посмотреть сообщение
... На мой последний вопрос по сборке мусора, кто нибудь знает ответ?

После выхода из цикла не останется ни одной ссылки на объект (так как переменная объявлена внутри цикла и ее область видимости - тело цикла, ограниченное {}). Значит сборщик мусора получит все объекты, созданные в теле цикла.
Ignoramus вне форума
 
Ответить с цитированием Вверх
Старый 13.05.2009, 21:29   #19
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от Ignoramus Посмотреть сообщение
Значит сборщик мусора получит все объекты, созданные в теле цикла.

Значит по Вашему получается 4 объекта? У меня получается 1 объект... .
Попробую обосновать > В цикле создаётся новый объект 4 раза, но ссылка на
все объекты одна. Значит когда создаётся скажем второй объект, ссылка
на первый созданный объект пропадает. А вроде бы, если на объект нет никакой
ссылки, то незаметно подкрадывается ... garbage collector и хавает объект за милую
душу. Блин! Как это проверить програмно? Кто знает?

По моему так, или?
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...

Последний раз редактировалось ana; 13.05.2009 в 21:32..
ana вне форума
 
Ответить с цитированием Вверх
Старый 13.05.2009, 22:28   #20
refactorer
Неактивный пользователь
 
Регистрация: 18.01.2008
Сообщений: 7
Репутация: 1
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от ana Посмотреть сообщение
Все объекты, которые создаются в скобках {} там же и остаются... Вот что выдаст например Eclipse >

Так, что вопрос остаётся, сколько объектов после выхода из цикла
получит мусорщик?

"там же и остаются" - это только область видимости внутри скобок.
Переменные, созданные где-либо в методе, создаются в стеке и уничтожаются только после возвращения из метода.
refactorer вне форума
 
Ответить с цитированием Вверх
Старый 15.05.2009, 07:39   #21
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

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

Так они удаляются после выхода из области видимости, или при выходе из метода?
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...
ana вне форума
 
Ответить с цитированием Вверх
Старый 18.05.2009, 11:35   #22
Ignoramus
Неактивный пользователь
 
Пол:Мужской
Регистрация: 16.01.2009
Сообщений: 38
Репутация: 11
По умолчанию Re: Простые (ли?) задачки по JAVA

Сборщик мусора - весьма загадочная штука. Он может "отработать" сразу после того, как ссылок на объект не стало, а может и вообще не быть вызван. Поэтому конкретно сказать, в какой момент какие объекты будут именно "собраны" сборщиком я затрудняюсь...
Ignoramus вне форума
 
Ответить с цитированием Вверх
Старый 19.05.2009, 23:58   #23
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от Ignoramus Посмотреть сообщение
Сборщик мусора - весьма загадочная штука.

Это можно лекго проверить, сделаем для этого простой класс со статическими переменными...

Код:
class Nowa {
	static int created = 0;
	static int finalized = 0;
	int i;

	Nowa() {
		i = ++created;
		System.out.println("Object NOWA created: " + i);
	}

	public void finalize() {
		finalized++;

	}
}
Как это работает?
При вызове конструктора мы увеличиваем статическую переменную и пишем в консоль, какой по счёту объект мы создали.

А в методе finalize() [Кто не знает, он вызывается перед уборкой мусора]
увеличиваем другую статическую переменную, что бы узнать, а сколько раз был вызван этот метод,
или другими словами, сколько раз сборщик мусора прошёлся по нашему объекту безжалостно
его уничтожая и освобождая такую нужную память, для более высоких дел ...

Теперь вернёмся к нашей задаче и попробуем разобраться, а сколько
объектов будет доступно для garbage collector после выполнения цикла в main?

Код:
public class Garbage {
	public static void main(String[] args) {

		for (int i = 1; i < 5; i++) {
			Nowa nowa = new Nowa();
		}
		System.gc();
		System.out.println("Total finalized = " + Nowa.finalized);

	}
}
Ну и кого сколько получилось?
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...

Последний раз редактировалось ana; 21.05.2009 в 07:48..
ana вне форума
 
Ответить с цитированием Вверх
Старый 21.05.2009, 12:41   #24
Ignoramus
Неактивный пользователь
 
Пол:Мужской
Регистрация: 16.01.2009
Сообщений: 38
Репутация: 11
По умолчанию Re: Простые (ли?) задачки по JAVA

У меня получилось 0. Что говорит о том, что сборщик мусора, по всей вероятности, вообще не запускался не смотря на System.gc().
Ignoramus вне форума
 
Ответить с цитированием Вверх
Старый 21.05.2009, 13:24   #25
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от Ignoramus Посмотреть сообщение
У меня получилось 0

У меня тоже, пока не понял почему ...

А сколько получится если создать объекты без указателя?
т.е. вместо
Код:
Nowa nowa = new Nowa();
Код:
new Nowa();
A если изменить параметры цикла? Допустим увеличить число итераций?
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...

Последний раз редактировалось ana; 22.05.2009 в 08:57..
ana вне форума
 
Ответить с цитированием Вверх
Старый 13.06.2009, 09:11   #26
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

Если увеличить число итераций, то можно увидеть как и когда начинает срабатывать сборщик мусора.

Цитата:
Сообщение от Ignoramus Посмотреть сообщение
Сборщик мусора - весьма загадочная штука. Он может "отработать" сразу после того, как ссылок на объект не стало, а может и вообще не быть вызван. Поэтому конкретно сказать, в какой момент какие объекты будут именно "собраны" сборщиком я затрудняюсь...

Если увеличить количество итераций например до 100, тогда можно будет увидеть как включается сборщик мусора>
Код:
package cc.nowa;

/**
 * Демонстрация сборщика мусора и финализации
 */

class Nowa {
	static int created = 0;
	static int finalized = 0;
	int i;

	Nowa() {
		i = ++created;
	}

	public void finalize() {
		finalized++;

	}
}

public class Garbage {
	public static void main(String[] args) {

		for (int i = 0; i < 100; i++) {
			Nowa nowa = new Nowa();
		}
		System.gc();
		System.out.println("... and total finalized = " + Nowa.finalized);

	}
} // /:~
Число будет зависеть от многих параметров, например сколько памяти выделенно под виртуальную машину Java например. Поочерёдно запуская скрипт можно увидеть, что число удалённых объектов разное.

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

Вот код>
Код:
package cc.nowa;

/**
 * Демонстрация сборщика мусора и финализации
 */

class Nowa {
	static int created = 0;
	static int finalized = 0;
	int i;

	Nowa() {
		i = ++created;
	}

	public void finalize() {
		finalized++;

	}
}

 class RunGarbage {
	public static void start() {

		for (int i = 0; i < 100; i++) {
			Nowa nowa = new Nowa();
		}
		System.gc();
		System.out.println("... and total finalized = " + Nowa.finalized);

	}
} 

 public class Garbage{
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			new RunGarbage().start();			
		}
	}
}


// /:~
А вот, что у меня получилось>
Код:
... and total finalized = 31
... and total finalized = 147
... and total finalized = 277
... and total finalized = 349
... and total finalized = 400
... and total finalized = 481
... and total finalized = 652
... and total finalized = 700
... and total finalized = 703
... and total finalized = 818
Получилось, что где то 200 Объектов остались навечно в памяти...
но не народной, а в виртуальной, блин!

Подводим итоги, по задаче> все объекты которые вне области видимости (другими словами за фигурными скобками например), подлежат полному и беспощадному уничтожению! НО! Уборщик мусора такой толстый и ленивый, что не хочет перегружаться работой и оставляет в памяти ещё кучу мусора, которая грузит память...
Многие жалуются, что Java работает медленно. Это одна из причин. Если ещё при программирование не учитывать время жизни объектов, то ... без комментариев.

Кстати если допустим поменять строку

Nowa nowa = new Nowa();

на

new Nowa();

Т.е. создать объект без указателя, то и результат будет другим>

Код:
... and total finalized = 100
... and total finalized = 200
... and total finalized = 300
... and total finalized = 300
... and total finalized = 600
... and total finalized = 600
... and total finalized = 700
... and total finalized = 823
... and total finalized = 900
Есть о чём подумать...
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...
ana вне форума
 
Ответить с цитированием Вверх
Старый 02.07.2009, 11:53   #27
Varvar
Новичок
 
Пол:Мужской
Регистрация: 02.11.2007
Сообщений: 26
Репутация: 14
По умолчанию Re: Простые (ли?) задачки по JAVA

Цитата:
Сообщение от ana Посмотреть сообщение
Почему? Ведь уборщик мусора по идее начинает убирать объект, если на него нет ссылок,


Полностью согласен, но после выхода из цикла имеется только одна (!) ссылка на объект! Или нет?

После выхода из цикла ссылка на этот объект теряется, т.к. происходит выход из области видимости, и соответственно сборщик муссора начинает свою работу
Varvar вне форума
 
Ответить с цитированием Вверх
Старый 07.09.2009, 21:34   #28
ana
Модератор
 
Аватар для ana
 
Пол:Мужской
Регистрация: 20.10.2004
Адрес: Germany
Сообщений: 543
Репутация: 312
По умолчанию Re: Простые (ли?) задачки по JAVA

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

Код:
class Test
{
    public static void main(String args[])
    {
        int i=0, j=0;
        X1: for(i = 0; i < 3; i++)
        {
            X2: for(j = 3; j > 0; j--)
            {
                if(i < j) continue X1;
                else break X2;
            }
        }
        System.out.println(i+" "+j);
    }
}
А вообще, кто нибудь пишет программы с метками?

PS. Задача взята с экзамена SCJP
__________________
Лучше сидеть в маленькой душной пивной , чем работать на большом светлом заводе...
ana вне форума
 
Ответить с цитированием Вверх
Старый 13.09.2009, 20:20   #29
adv23
Неактивный пользователь
 
Регистрация: 13.09.2009
Сообщений: 1
Репутация: 0
По умолчанию Re: Простые (ли?) задачки по JAVA

Правильный ответ : 3 0. Хотя что то я не уверен.
adv23 вне форума
 
Ответить с цитированием Вверх
Старый 22.09.2009, 22:25   #30
iskandarchik
Неактивный пользователь
 
Регистрация: 22.09.2009
Сообщений: 2
Репутация: 0
По умолчанию Re: Простые (ли?) задачки по JAVA

в методе finalize поле finelized остается = 0,наверное.Ведь ссылка то одна

Последний раз редактировалось iskandarchik; 22.09.2009 в 23:04..
iskandarchik вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загадки и задачки Nu Je Юмор 202 17.05.2025 11:56
Java начинающему. Что нужно для разработки Java-приложения? mrzed Java 37 24.03.2011 16:31
Помогите решить задачки Vladylbkin Программирование 1 07.10.2009 22:44

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 14:55. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.08707 секунды с 13 запросами