Почему мое приложение запускается более чем за 2 минуты?

Я запускаю графическое приложение java, созданное с помощью swing на моем компьютере с 64-разрядными 64-битными окнами.

Мое приложение - это исполняемый файл jar, который я запускаю из своей командной строки, используя следующую команду:

C:\path\to\jre\java.exe -jar myProg.jar

Моя проблема в том, что я получаю огромные проблемы с производительностью при использовании JRE8 32 бит, а не при использовании JRE7 32bits или JRE8 64bit. Обратите внимание, что приложение запускается с тем же файлом jar; единственная разница в том, что он управляется разными JRE.

Я попробовал другую версию JRE8, и проблемы сохраняются...

Когда я сравниваю оба вывода при использовании аргумента "-verbose", я вижу, что я получаю более 1500 выходов с текстом: "Загружено xxxxxx из файла общих объектов" для JRE7, пока я не получаю ни одного для JRE8. < ш> Майби может быть как-то связано?

Есть ли у кого-нибудь идея о том, что может быть проблемой?

Вот несколько выходов из JRE7

[Loaded MainFrame.MainFrame$XtrFileFilter from rsrc:./]
[Loaded java.awt.event.HierarchyListener from shared objects file]
[Loaded java.lang.InterruptedException from shared objects file]
[Loaded java.io.FileWriter from shared objects file]
[Loaded javax.swing.CellEditor from shared objects file]
[Loaded javax.swing.table.TableCellEditor from shared objects file]
[Loaded java.awt.image.RenderedImage from shared objects file]
[Loaded java.awt.image.WritableRenderedImage from shared objects file]
[Loaded java.awt.image.BufferedImage from shared objects file]
[Loaded sun.awt.util.IdentityArrayList from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded java.awt.Window$Type from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded java.util.concurrent.atomic.AtomicBoolean from shared objects file]
[Loaded sun.awt.AWTAccessor$WindowAccessor from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded java.awt.Window$1 from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded sun.awt.AWTAccessor$FrameAccessor from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded java.awt.Frame$1 from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded java.awt.ComponentOrientation from shared objects file]
[Loaded java.awt.Component$3 from c:\Program Files (x86)\Java\jdk1.7.0_45\jre\lib\rt.jar]
[Loaded javax.swing.ImageIcon from shared objects file]
[Loaded MainFrame.Simulation.Simulation from rsrc:./]
[Loaded MainFrame.Optimization.Optimization from rsrc:./]
[Loaded MainFrame.Convergence.Convergence from rsrc:./]
[Loaded java.awt.event.WindowEvent from shared objects file]
[Loaded MainFrame.Menu from rsrc:./]

Вот некоторые выходы JRE8

[Loaded MainFrame.MainFrame from rsrc:./]
[Loaded java.util.EventListener from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded java.awt.event.ActionListener from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded javax.swing.Action from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.reflect.NativeMethodAccessorImpl from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.reflect.DelegatingMethodAccessorImpl from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded javax.swing.UIManager from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded javax.swing.UIManager$LookAndFeelInfo from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.awt.OSInfo from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.awt.OSInfo$WindowsVersion from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.awt.OSInfo$1 from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.awt.OSInfo$OSType from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded java.awt.Toolkit from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.awt.AWTAccessor$ToolkitAccessor from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded java.awt.Toolkit$4 from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.awt.AWTAccessor from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded java.awt.Toolkit$5 from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded java.util.ResourceBundle$Control from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]
[Loaded sun.util.CoreResourceBundleControl from c:\Program Files (x86)\Java\jre1.8.0_45\lib\rt.jar]

Я запустил Xshare: дамп для JRE7 и JRE8, и я получил следующие результаты:

JRE7:

Loading classes to share ... done.
Rewriting and unlinking classes ... done.
Calculating hash values for String objects .. done.
Calculating fingerprints ... done.
Removing unshareable information ... done.
Moving common symbols to metadata section at 0x3a033570 ... done.
Moving vmSymbols to metadata section at 0x3a1d2170 ... done.
Moving the remaining symbols to metadata section at 0x3a1d3478 ... done.
Moved 44361 symbols, 1703760 bytes.
Moving pre-ordered read-only objects to shared space at 0x38a30000 ... done.
Moving read-only objects to shared space at 0x38e129b0 ... done.
Moving string char arrays to shared space at 0x38e20cd8 ... done.
Moving pre-ordered read-write objects to shared space at 0x39430000 ... done.
Moving read-write objects to shared space at 0x399e8fb0 ... done.
Moving String objects to shared space at 0x39a3e920 ... done.
Read-write space ends at 0x39a7dd28, 6610216 bytes.
Updating references to shared objects ... done.
An error has occurred while processing the shared archive file.
Unable to create shared archive file c:\Program Files (x86)\Java\jdk1.7.0_45\jre\bin\client\classes.jsa.
Error occurred during initialization of VM
Unable to use shared archive.

JRE8:

Allocated shared space: 27394048 bytes at 0x14a00000
Loading classes to share ...
Preload Warning: Cannot find javax/swing/JComponent$2
Preload Warning: Cannot find javax/swing/RepaintManager$1$1
Preload Warning: Cannot find javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
Preload Warning: Cannot find javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
Preload Warning: Cannot find javax/swing/text/AbstractDocument$InsertStringResult
Preload Warning: Cannot find sun/awt/windows/WToolkit$3$1
Preload Warning: Cannot find sun/java2d/Disposer$2
Preload Warning: Cannot find sun/java2d/d3d/D3DScreenUpdateManager$1
Preload Warning: Cannot find sun/java2d/d3d/D3DScreenUpdateManager$1$1
Loading classes to share: done.
Rewriting and linking classes ...
Rewriting and linking classes: done
Number of classes 2383
 instance classes = 2369
 obj array classes = 6
 type array classes = 8
Calculating fingerprints ... done.
Removing unshareable information ... done.
Shared Lookup Cache Table Buckets = 4108 bytes
Shared Lookup Cache Table Body = 50352 bytes
ro space: 5650016 [ 47.7% of total] out of 12582912 bytes [44.9% used] at 0x14a00000
rw space: 5396096 [ 45.6% of total] out of 12582912 bytes [42.9% used] at 0x15600000
md space: 753892 [ 6.4% of total] out of 2097152 bytes [35.9% used] at 0x16200000
mc space: 34032 [ 0.3% of total] out of 131072 bytes [26.0% used] at 0x16400000
total : 11834036 [100.0% of total] out of 27394048 bytes [43.2% used]
2 ответа

Возможно, отсутствует или поврежден архив вашей базы данных Общие данные.

Вы можете попробовать, как предложено в документации под "Регенерация общего архива"

Чтобы восстановить архив, войдите в систему как администратор; в сетевых ситуациях войдите в систему с той же архитектурой, что и установка Java SE, и убедитесь, что у вас есть разрешение на запись в каталог установки. Затем выполните команду

java -Xshare:dump Диагностическая информация будет напечатана при создании архива.

Обратите внимание, что вы можете принудительно использовать общие данные, чтобы получить сообщение об ошибке (а не замедление), если оно не выполнено, как описано на той же странице:

Ручное управление совместным использованием данных классов

Функция совместного использования классов автоматически включается, когда условия позволяют использовать ее. Следующие параметры командной строки присутствуют в основном для целей диагностики и отладки и могут быть изменены или удалены в будущих выпусках.

<Дл> -Xshare:off Отключить обмен данными между классами. <Дт> -Xshare:onдт > Требуется включить разделение данных класса. Если он не может быть включен по разным причинам, распечатайте сообщение об ошибке и выйдите. -Xshare:auto Значение по умолчанию; разрешать совместное использование данных классов.Дл >


Не уверен, что это ответ, который вы ищете, у меня была эта проблема на сервере Windows 2012. Единственное решение для меня - удалить java, а затем переустановить его.

licensed under cc by-sa 3.0 with attribution.