2010-07-11 3 views
0

1) Почему Java хранится в ОЗУ и не сохраняется на жестком диске. 2) И в чем преимущество статической переменной над нормальной переменной. Независимо от того, занимает ли нормальная переменная большее пространство памяти, поскольку объекты классов имеют свою собственную копию.Java-RAM & Преимущество статической переменной

+0

Ваш первый вопрос непонятен и кажется, что вы уже знаете ответ на свой второй вопрос. – Dolph

+0

Все запущенные программы идут на жесткий диск. Только одна копия статической varibale, созданная для всех объектов в памяти. – Laz

+1

@Ram Bhat: Нет, запущенные программы не находятся на диске. – Dolph

ответ

4
  • Java не «не хранится на жестком диске». Переводчик Java загружается из постоянного хранилища. Как и файлы классов, которые составляют вашу программу Java. Во время выполнения все должно быть в ОЗУ (ну, без учета пейджинга), которое будет использоваться процессором - так работают компьютеры!
  • Если переменная является статической, в памяти будет либо одна, либо нулевая копия. Если это переменная экземпляра, у вас будет одна копия на экземпляр класса. Так что да, статическая переменная будет использовать меньше памяти в целом, если класс создается несколько раз.
2

Почему Java хранится в оперативной памяти, а не хранится на жестком диске

Если вы говорите о переменных, хранения переменных в ОЗУ позволяет для быстрого доступа на чтение/запись, порядки быстрее, чем диск. Java также может обращаться к диску.

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

Статические переменные не привязаны к конкретному экземпляру класса, поэтому вы можете получить доступ, не создавая объект, но эта статическая переменная будет разделяться между каждым фрагментом кода, который имеет ссылку на него.

ли нормальная переменная занимают больше места памяти, так как объекты классов иметь свою собственную копию.

Каждый раз, когда вы создаете экземпляр объекта, он занимает пространство в памяти. Иногда это именно то, что вам нужно.

Пример:

public class Bicycle{ 

    private int cadence; 
    private int gear; 
    private int speed; 

    // add an instance variable for the object ID 
    private int id; 

    // add a class variable for the number of Bicycle objects instantiated 
    private static int numberOfBicycles = 0; 
    ...... 
} 

Каждый раз, когда вы делаете new Bicycle() вы будете создавать новый объект (таким образом, используя больше памяти) со всеми его атрибутами для numberOfBicycles кроме, будет только один этого атрибута для все экземпляры Bicycle.

1

Все запущенные программы хранятся в памяти независимо от языка программирования. Я предполагаю, что вы имеете в виду, зачем использовать .class файлы вместо .exes. Это для переносимости, среда выполнения в основном преобразует файлы .class в .exe во время выполнения, поэтому один и тот же двоичный файл можно запускать на любой платформе, а не предоставлять другой файл для каждой платформы.

Да, переменные экземпляра используют больше памяти, чем переменные класса, поскольку каждый экземпляр имеет свою собственную копию. Статические переменные имеют все экземпляры, имеющие одну и ту же копию. Если вы считаете человека, у каждого человека есть свое имя (переменная экземпляра), в то время как у людей с постоянными взглядами постоянный для всех, запрет врожденных дефектов и несчастных случаев (переменная класса). Переменные класса и экземпляра служат для разных целей.