В большинстве языков программирования вопрос времени существования переменной всегда был важен для программистов. Как долго должна существовать переменная? Когда следует её освободить? Проблемы с временем существования переменных могут привести к множеству ошибок в программах. В следующих разделах будет объяснено, как Java помогает нам решать все вопросы освобождения памяти, что значительно упрощает эту задачу.
Большинство языков программирования предоставляют концепцию области видимости. Для имени, определённого в области видимости, область одновременно определяет его видимость и время существования. В C, C++ и Java области видимости определяются положением фигурных скобок. Рассмотрим пример:
{
int x = 12;
/* доступна только x */
{
int q = 96;
/* доступны x и q */
}
/* доступна только x */
/* q "за пределами области видимости" */
}
Как переменная, определённая в области видимости, она может использоваться только до окончания этой области видимости.
В приведённом выше примере отступы делают Java-код более читаемым. Поскольку Java является свободно форматируемым языком, дополнительные пробелы, табуляция и переходы строки не влияют на конечный код программы.Обратите внимание, что хотя такой код допустим в C и C++, он недопустим в Java:
{
int x = 12;
{
int x = 96; /* Недопустимо */
}
}
Компилятор будет считать, что переменная x
уже была определена. Поэтому в C и C++ можно было бы "скрывать" одну переменную внутри другой области видимости. Однако это недопустимо в Java, так как дизайнеры этого языка считают, что такое поведение усложняет понимание программы.
Java-объекты не имеют такого же времени существования, как примитивные типы данных. При создании Java-объекта с помощью ключевого слова new
, он выходит за рамки своей области видимости. Таким образом, если используется следующий фрагмент кода:
{
String s = new String("строка");
} /* Конец области видимости */
```То есть ссылка `s` исчезнет при достижении конца области видимости. Тем не менее, объект `String`, на который указывает `s`, всё ещё будет занимать место в памяти. В данном случае нет возможности получить доступ к этому объекту, поскольку единственная ссылка на него выходит за пределы области видимости. В последующих главах будут рассмотрены способы передачи и копирования ссылок на объекты во время выполнения программы. Результатом этого является то, что объекты, созданные с помощью `new`, будут продолжать существовать до тех пор, пока мы сами их не освободим. Эта проблема особенно актуальна в C и C++. В случае с C++, она становится наиболее сложной: поскольку язык не предоставляет никакой помощи, невозможно гарантировать доступность объектов, когда они нужны. Более того, в C++ после завершения работы обязательно требуется очистка объектов. Это приводит к интересному вопросу. Как Java позволяет объектам существовать без ограничений, как можно предотвратить их накопление в памяти и последующее "залипание" программы? В C++, этот вопрос является наиболее болезненным для программистов. Однако с появлением Java ситуация изменилась. У Java есть специальный "управляемый сборщик мусора", который просматривает все объекты, созданные с помощью `new`, и определяет, какие из них больше не используются.Затем он автоматически освобождает память, занятую этими невостребованными объектами, чтобы она могла использоваться новыми объектами. Это означает, что нам не нужно беспокоиться о процессах очистки памяти. Мы просто создаем объекты, а когда они больше не нужны, они автоматически удаляются. Таким образом, мы можем избежать одной из самых распространённых проблем программирования в C++ — ошибки "переполнение памяти", вызванной забывчивостью программиста при освобождении памяти.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )