Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545

Java и оперативка

12.01.2015, 16:32. Показов 5274. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не пугайтесь, что вопрос большой, на самом деле он супер простой, просто я хочу быть как можно более информативным.

Решил попробовать Java, имея хорошие знания по С++/Qt. Начал чтение Шилдта, с первых страниц все так радужно и прекрасно, многое и так уже известно, поетому решил читать выборочно, чтобы легко перевести знания по С++ на Java (понимать где различия и т.д.). Благо все знакомо и я решил пойти сразу же в GUI (JavaFX).

С первых же минут меня расстроил Eclipse и его 400 Мб оперативы со старта и 550 во время работы над проектом, но дело не об этом.

Установил плагины для работы с JavaFX и запустил следующий пример:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package application;
    
import javafx.application.Application;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
 
 
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root,400,400);
            //Button btn = new Button();закоментировано пока
                          //btn.setText("Say 'Hello World'");
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.setTitle("GUI");
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Запустилось пустое окно,посмотрел в диспетчере задач на оперативку для этого приложения и был очень сильно удивлен (сразу скажу, что я понимаю, что диспетчер задач не дает точную инфу, но приблизительное представление он все же дает). Итак этот код сожрал 47МБ, хм, действительно? Добавил кнопку(то есть разкоментировал то, что в коде выше), теперь 55 МБ, хм, ничего себе! Понимаю, что приложение запускаеться из-под той виртуальной машины, поетому запустил простейший код

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.IOException;
 
public class main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
         System.out.println("Hello World!");
         try {
            System.in.read();//просто нужно остановить приложение чтобы оно висело в диспетчере
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         System.out.println("After!");
         
    }
 
}
Диспетчер показал 11МБ, то есть вывод, машина жрет столько же примерно. То есть мое пустое окно жрет 55 - 11, думаю, может сделать его как jar? Экспортировал и запустил, ничего нового, все так же 55. Остаеться у меня последнее - делать из этого exe? Но поможет ли это или же просто уберет те 11 МБ, которые виртуальная машина ест( то есть экзешник возьмет лишь 55 - 11, или же он каким-то образом существенно уменьшит использование оперативы)?

Спрашиваю я это потому что в C++/Qt пустое окно ест 15 МБ, а добавление кнопки почти не увеличивает использование оперативы и мне почему-то кажеться, что может я где-то не прав и из-за незнания(ведь новичок в Java) мои проги и жрут столько.

Есть ли способы уменьшить использование оперативы, поможет ли мне экзешник или это просто моя криворукость и у гуру таких проблем нет.

P.S. Приняв во внимание то, сколько жрет Eclipse и то, что собственно на Java он и написан, я пока думаю, что это у всех так и эти 50МБ для пустого окна это норма, однако хочу чтобы более опытные программисты все же подвердили это или опровергли и сказали пути обхода.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2015, 16:32
Ответы с готовыми решениями:

Оперативка на 4 Гб
Куплена память 2 планки 1Gb DDR2 PC6400 800MHz Hynix , была 1 ГБ kingston и 1гб Samsung, материнская плата p5kpl. По две планкки отдельно...

Оперативка
Здравствуйте! Подскажите пожалуйста 1) В описании к материнской плате написано что объем оперативной памяти можно расширить максимум...

оперативка
что значит зарезервировано? и как исправить? 64х ОС был в биусе- все видит...

3
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
13.01.2015, 00:40
Лучший ответ Сообщение было отмечено Chernobyl как решение

Решение

В java память выделяется про запас, чтобы уменьшить overhead при создании новых объектов.
Для контроля размера heap-а, есть два параметра. -Xms/-Xmx для начального размера хипа и для максимального.
Пример
Java
1
java -Xms15M -Xmx30M -jar myJarFile.jar
Размер heap-а по умолчанию зависит от ОС, размера оперативной памяти и версии JVM.
Можете поиграться с этими параметрами и последить за ошибками(может вылететь OutOfMemory)/нагрузкой на CPU (если памяти хватает "впритык", GC будет запускаться чаще). И выяснить какие значения подходят для вашей программы.

PS. 50MB это очень мало
1
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545
13.01.2015, 11:31  [ТС]
turbanoff, Понятно, спасибо за ответ, я конечно же читал, что программы на Java берут очень много оперативки, но не думал, что настолько много. Как понимаю перевод этого всего в exe файл ситуацию тоже не улучшит?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
13.01.2015, 16:02
Лучший ответ Сообщение было отмечено Chernobyl как решение

Решение

Chernobyl, Вы про какой перевод говорите?
Канонический способ запуска java программ - из jar/class файлов. Никакого перевода в exe изначально не задумывалось.

Сейчас же, для удобства пользователя, придумали пару способов, как создать *.exe из java программы:
1. Всякие обертки, вроде launch4j, jar2exe и т.п. Это просто кастомный лаунчер, внутри которого лежат те же самые *.class файлы. Естественно, никакого выигрыша в потреблении памяти это не дает.
2. Честная компиляция с помощью Excelsior JET. Это коммерческий продукт (есть полнофункциональный триал на 90 дней). Это AOT компилятор для java. Он компилирует ваше приложение в настоящий exe. Тут уже выигрыша в потреблении памяти можно достичь. Хотя, так как используются стандартная библиотека та же самая (OpenJDK), то выигрыша может и не быть. Надо проверять.

PS. Потребление памяти зависит от того какую JVM вы используете. А их на рынке, как ни странно, больше чем 1.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.01.2015, 16:02
Помогаю со студенческими работами здесь

Оперативка
Компьютер использует только 1GB оперативной памяти. Всего 2GB. Как сделать так, чтобы использовал все 2 GB ...

Оперативка
Кто знает купил оперативку а вход не подходит, будет работать она если я там одну вещь сломаю чтоб она влезала


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru