![]() |
|
Модераторы: LSD, AntonSaburov Страницы: (80) « Первая ... 15 16 [17] 18 19 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
хм, спору нет, но вот вообще в С++ сообществе считается хорошим тоном не заставлять конструктор делать что-то кроме своих прямых обязанностей, т. е. инициаллизации полей _начальными_, а не появляющимися в процессе работы значениями. Думаю, если и можно придумать пример, в котором это правило будет нарушено и нарушение оправдано, то это получится довольно натянуто. Неговоря уже о тяжелой воспринимаемости такого кода (нужно лишний раз соображать что и где вызовется). В вышеприведенном примере я бы вынес все эти действия в функцию типа init_0() и явно вызывал бы ее.
-------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
А что ж тут плохого? Я инициализирую суперкласс в init().
Для инициализации сабкласса мне нуzhно чо-то другое отпарсить, вот и все. Если учесть возможность того, что саблассы могут по-другому инициализировать поля, наследованные от суперкласса, то как раз все ок. Если не ошибаюсь, в C++ есть такая штука как "resource acquisition is initialization". Да и вызов init() вполне нормальное явление, см. Stroustrup, The C++ Programming Language, 2000, 14.4.1. Using Constructors and Destructors. init() , initParsers() могут инициализировать различные ресурсы, соответственно, можно один init() разбит' на несколько методов. Это сообщение отредактировал(а) Domestic Cat - 20.8.2004, 16:23 -------------------- |
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
вобщем здесь я уже немного "не в теме", поэтому не буду говорить и утверждать глупостей, но вот у Страуструпа насколько я понял идет речь как раз об использовании ресурсов, ну то есть памяти, а когда вы парсите там что то, то это уже никак нельзя назвать просто захватом ресурсов.
И вот ещё (опять же на правах чистого имхо) : если ваш детёнок инициализирует поля родителя по-другому нежели родитель, то стоило ли его вообще делать детёнком этого родителя ? -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Например:
Это сообщение отредактировал(а) Domestic Cat - 20.8.2004, 17:20 -------------------- |
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Давайте вернемся к теме.
Вопрос: какие проблемы могут возникнуть при запуске программы:
-------------------- |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
А эта строчка специально с пробелом (String []) ?
А вообще 10000*10000 = 100 000 000 да еще на размер целого. Вывалится по нехватке памяти, если конечно опциями не добавить. |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
А разве на что-то влияет?
Хм. А сборщик мусора? Разве не должен он убирать все эти массивы? Добавлено @ 17:54 Ведь сразу после 1 пробега цикла ссылки на объект в памяти нет! -------------------- |
||||
|
|||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
а сборщик мусора когда захочет, тогда и соберет - вовсе не обязательно сразуже
и вот еще такой вопрос : собственно где и какая ссылка на объект класса Test появляется после выполнения new Test() ? понятно, что эивет она в фигурных скобочках цикла только - но тогда, кстати, все объекты будут жить, пока цикл не закончится и GC нам тут уж никак не поможет -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Если создается много объектов - он начнет работать. Зуб даю. Редиской буду. Ну а проверить можно, запуская с флагом -verbose:gc. В данном случае сбоки мусора будут, но незначительные.
А ее нету - прoграмма на объект не ссылается, следовательно , он подлежит сборке
Чтобы проверить, нужно поставить в цикл просто int[] array = new int[10000]; и запустить с тем же флагом. Уууупс -------------------- |
||||||
|
|||||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
насчет GC - ну это хорошо, но формально никаких гарантий нет и полагаться на это нельзя совсем. А то сделаем из Sun ещё один M$ (http://www.joelonsoftware.com/articles/APIWar.html)
а насчет времени жизни - это я ошибся, т. е. не знал =) забавно получается - создаем объект и он сразу может умирать -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
В общем, проблема такая: если поставить в main
то окажется, что new Test() забивает память очень серьeзно; а gc работать и не собирается (хотя он на самом деле чего-то собирает, по нескольку килобайт несколько раз Заменим new Test() чем-нибудь другим- будь то new Object(), new Integer() или int[] arr = new int[10000] - все ок, в конце память почти не истрачена, да и gc трудится хорошо. Вопрос: почему? Подсказка n1 : в коде есть логическая ошибка. Но даже если ее найти, то почему gc не убирает мертвые объекты? -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Для этого в сях есть виртуальность |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Объекты не "мертвые". Они находятся в состоянии NEW.
GC не трогает объект класса Thread до тех пор, пока он не окажется в состоянии TERMINATED |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
А можно поподробнее - что-то я такого не встречал (все знать нельзя |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
http://java.sun.com/j2se/1.5.0/docs/api/ja...read.State.html
http://www.codeguru.com/java/tij/tij0155.shtml#Heading483 When main( ) creates the Thread objects it isn’t capturing the handles for any of them. An ordinary object would be fair game for garbage collection, but not a Thread. Each Thread “registers” itself so there is actually a reference to it someplace and the garbage collector can’t clean it up until the thread exits its run( ) and dies |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |