1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

AOT-компиляция Minecraft

Тема в разделе "Оффтопик", создана пользователем Infgator, 27 апр 2015.

  1. Автор темы
    Infgator

    Infgator Новичок

    Баллы:
    15
    Имя в Minecraft:
    Infgator
    Скажу сразу: я далеко не спец в вопросах программирования на Java и в глубоких технических деталях. Делаю все это ради личного интереса, а потому просьба - тапочками сильно не закидывать.

    Собственно, задачка:
    Скомпилировать клиент Minecraft с навешанными на него Forge и Optifine с помощью Excelsior JET.

    Решил я пару дней назад поэкспериментировать с моей сборочкой и слегка повысить ее производительность. Погуглив, я наткнулся на интересную тему на minecraftforum, где обсуждалось использование AOT-компиляции и обещалось повышение производительности в 2-3 (!) раза, подтвержденное реальными тестами. Узнав о таком, я тут же кинулся ставить Excelsior JET и компилить игру в нативный код. Оригинальный клиент версии 1.5.2 скомпилировался хорошо, скорость запуска немного увеличилась, мир стал создаваться несколько дольше, но чанки грузятся в 2-3 раза быстрее. Влияние на FPS было минимальным (относительно моих ожиданий), в среднем, частота кадров увеличилась на 15-20%, вместо обещанных 200%-300%. Проблемы появились при начале попыток скомпилить игру с Forge и Optifine.
    При тестовом запуске игра сперва нормально загружается, Forge проверяет и грузит свои библиотеки, но потом клиент вылетает со следующей ошибкой:
    ---- Minecraft Crash Report ----
    // I bet Cylons wouldn't have this problem.

    Time: 26.04.15 23:53
    Description: Failed to start game

    cpw.mods.fml.common.LoaderException: java.lang.NoClassDefFoundError: classloader returned class with invalid name
    at cpw.mods.fml.common.LoadController.transition(Unknown Source)
    at cpw.mods.fml.common.Loader.loadMods(Unknown Source)
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(Unknown Source)
    at net.minecraft.client.Minecraft.func_71384_a(Unknown Source)
    at net.minecraft.client.MinecraftAppletImpl.func_71384_a(Unknown Source)
    at net.minecraft.client.Minecraft.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NoClassDefFoundError: classloader returned class with invalid name
    at java.lang.Class.<unknown>(Unknown Source)
    at java.lang.Class.forName(Unknown Source)
    at cpw.mods.fml.relauncher.ReflectionHelper.getClass(Unknown Source)
    at invtweaks.InvTweaksObfuscation.<clinit>(Unknown Source)
    at invtweaks.forge.ClientProxy.preInit(Unknown Source)
    at invtweaks.forge.InvTweaksMod.preInit(Unknown Source)
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(Unknown Source)
    at com.google.common.eventbus.EventHandler.handleEvent(Unknown Source)
    at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(Unknown Source)
    at com.google.common.eventbus.EventBus.dispatch(Unknown Source)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(Unknown Source)
    at com.google.common.eventbus.EventBus.post(Unknown Source)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(Unknown Source)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(Unknown Source)
    at com.google.common.eventbus.EventHandler.handleEvent(Unknown Source)
    at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(Unknown Source)
    at com.google.common.eventbus.EventBus.dispatch(Unknown Source)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(Unknown Source)
    at com.google.common.eventbus.EventBus.post(Unknown Source)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(Unknown Source)
    ... 6 more


    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------

    -- System Details --
    Details:
    Minecraft Version: 1.5.2
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.7.0_55, Sun-Oracle Java licensee: Excelsior LLC
    Java VM Version: Excelsior JET (), Sun-Oracle Java licensee: Excelsior LLC
    Memory: 5226984 bytes (4 MB) / 156065792 bytes (148 MB) up to 5368709120 bytes (5120 MB)
    JVM Flags: 0 total;
    AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    Suspicious classes: FML and Forge are installed
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML: MCP v7.51 FML v5.2.23.737 Minecraft Forge 7.8.1.737 Optifine OptiFine_1.5.2_HD_U_D5 52 mods loaded, 52 mods active
    mcp{7.51} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized
    FML{5.2.23.737} [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized
    Forge{7.8.1.737} [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized
    CodeChickenCore{0.8.6.9} [CodeChicken Core] (coremods) Unloaded->Constructed->Pre-initialized
    CoFHFramework{1.5.2.5} [CoFH Framework] (coremods) Unloaded->Constructed->Pre-initialized
    NotEnoughItems{1.5.2.16} [Not Enough Items] (coremods) Unloaded->Constructed->Pre-initialized
    SomniaCore{1.0.3} [SomniaCore] (coremods) Unloaded->Constructed->Pre-initialized
    mod_bspkrsCore{v2.04(1.5.2)} [bspkrsCore] ([1.5.2]bspkrsCorev2.04.zip) Unloaded->Constructed->Pre-initialized
    TreeCapitator{Forge 1.5.2.r01} [TreeCapitator] ([1.5.2]TreeCapitator.Forge.1.5.2.r01.Uni.CoreMod.jar) Unloaded->Constructed->Pre-initialized
    CoFHCore{1.5.2.5} [CoFHCore] (CoFHCore-1.5.2.5.jar) Unloaded->Constructed->Pre-initialized
    CoFHWorld{1.5.2.5} [CoFHWorld] (CoFHCore-1.5.2.5.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights{1.2.2} [Dynamic Lights] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_onFire{1.0.2} [Dynamic Lights on burning] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_creepers{1.0.2} [Dynamic Lights on Creepers] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_dropItems{1.0.4} [Dynamic Lights on ItemEntities] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_mobEquipment{1.0.0} [Dynamic Lights on Mob Equipment] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_flameArrows{1.0.0} [Dynamic Lights on Flame enchanted Arrows] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_otherPlayers{1.0.4} [Dynamic Lights Other Player Light] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    DynamicLights_thePlayer{1.0.8} [Dynamic Lights Player Light] (DynamicLights_1.5.2.jar) Unloaded->Constructed->Pre-initialized
    GuiAPI{0.15.6} [GuiAPI] (GuiAPI-0.15.6-1.5.2.jar) Unloaded->Constructed->Pre-initialized
    Somnia{1.0.1} [Somnia] (Somnia-BP-Pre2a.jar) Unloaded->Constructed->Pre-initialized
    mod_ReiMinimap{v3.3_06 [1.5.2]} [mod_ReiMinimap] ([1.5.2]ReiMinimap_v3.3_06.zip) Unloaded->Constructed->Pre-initialized
    ThermalExpansion{2.4.6.0} [Thermal Expansion] (ThermalExpansion-2.4.6.0.jar) Unloaded->Constructed->Pre-initialized
    IC2{1.116.364-lf} [IndustrialCraft 2] (industrialcraft-2_1.116.364-lf.jar) Unloaded->Constructed->Pre-initialized
    AdvancedMachines{4.9} [IC2 Advanced Machines Addon] (AdvancedMachines_1.5.2.zip) Unloaded->Constructed->Pre-initialized
    ATG{0.2.1} [Alternate Terrain Generation] (ATG_0.2.1.zip) Unloaded->Constructed->Pre-initialized
    BuildCraft|Core{3.7.1} [BuildCraft] (buildcraft-A-3.7.1.jar) Unloaded->Constructed->Pre-initialized
    BuildCraft|Builders{3.7.1} [BC Builders] (buildcraft-A-3.7.1.jar) Unloaded->Constructed->Pre-initialized
    BuildCraft|Energy{3.7.1} [BC Energy] (buildcraft-A-3.7.1.jar) Unloaded->Constructed->Pre-initialized
    BuildCraft|Factory{3.7.1} [BC Factory] (buildcraft-A-3.7.1.jar) Unloaded->Constructed->Pre-initialized
    BuildCraft|Transport{3.7.1} [BC Transport] (buildcraft-A-3.7.1.jar) Unloaded->Constructed->Pre-initialized
    BuildCraft|Silicon{3.7.1} [BC Silicon] (buildcraft-A-3.7.1.jar) Unloaded->Constructed->Pre-initialized
    CarpentersBlocks{v1.91} [Carpenter's Blocks] (Carpenter's Blocks v1.91 - MC 1.5+.zip) Unloaded->Constructed->Pre-initialized
    ChestTransporter{1.1.6} [Chest Transporter] (chestTransporter_1.1.6_Universal.zip) Unloaded->Constructed->Pre-initialized
    Dynmap{2.0.0-478} [Dynmap] (Dynmap-2.0.0-forge-7.8.1.jar) Unloaded->Constructed->Pre-initialized
    eplus{1.14.6} [Enchanting Plus] (EnchantingPlus-1.14.6.jar) Unloaded->Constructed->Pre-initialized
    Forestry{2.2.8.4} [Forestry for Minecraft] (forestry2.2.8.4.jar) Unloaded->Constructed->Pre-initialized
    PaintingSelGui{1.5.2.1} [PaintingSelectionGui] (Forge_PaintingSelectionGuiv1.5.2.1.zip) Unloaded->Constructed->Pre-initialized
    GregsLighting{1.8.2} [Greg's Lighting] (GregsLighting-1.8.2-mc1.5.1.jar) Unloaded->Constructed->Pre-initialized
    IC2NuclearControl{1.5.1c} [Nuclear Control] (IC2NuclearControl-1.5.1c.zip) Unloaded->Constructed->Pre-initialized
    inventorytweaks{1.54b} [Inventory Tweaks] (InventoryTweaks-1.54b.jar) Unloaded->Constructed->Errored
    IronChest{5.2.6.421} [Iron Chest] (ironchest-universal-1.5.2-5.2.6.421.zip) Unloaded->Constructed->Pre-initialized
    lbd{1.0 ex: 1.5.2} [kris91268's Light Bridges and Doors] (Light-Bridges-and-Doors-Mod-1.5.2.zip) Unloaded->Constructed->Pre-initialized
    LogisticsPipes|Main{0.7.3.dev.666} [Logistics Pipes] (LogisticsPipes-MC1.5.2-0.7.3.dev.666.jar) Unloaded->Constructed->Pre-initialized
    AdvancedSolarPanel{3.3.7} [Advanced Solar Panels] (mod_AdvancedSolarPanels_3_3_7.zip) Unloaded->Constructed->Pre-initialized
    GraviSuite{1.9.3} [Gravitation Suite] (mod_zGraviSuite_1_9_3.zip) Unloaded->Constructed->Pre-initialized
    NEIPlugins{1.0.9.3} [NEI Plugins] (NEIPlugins-1.0.9.3.jar) Unloaded->Constructed->Pre-initialized
    PaintingsMod{1.5.2} [Painitngs++] (Paintings++1.5.2 v4.0 .zip) Unloaded->Constructed->Pre-initialized
    ProjectRed{${build.release.mod.version}.@BUILD@} [Project: §4Red] (ProjectRed-1.5.2-3.2.0.33.jar) Unloaded->Constructed->Pre-initialized
    switches{1.1.1} [Switches] (switches-1.5.2-universal-1.1.1.20.jar) Unloaded->Constructed->Pre-initialized
    TC{4.0.2_003} [Traincraft] (traincraft-4.0.2_003.jar) Unloaded->Constructed->Pre-initialized
    WirelessRedstoneCore{1.7} [Wireless Redstone] (WirelessRedstone-Universal-v1.7.zip) Unloaded->Constructed->Pre-initialized
    LWJGL: 2.9.1
    OpenGL: GeForce GTX 760/PCIe/SSE2 GL version 4.5.0 NVIDIA 350.12, NVIDIA Corporation
    Is Modded: Definitely; Client brand changed to 'fml,forge'
    Type: Client (map_client.txt)
    Texture Pack: Default
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: ~~ERROR~~ NullPointerException: null

    Компиляция запускается со следующими параметрами:
    [​IMG]

    Подскажите, из какого места растут мои руки что я делаю не так и возможно ли вообще скомпилировать клиент с Forge и Optifine.
    Заранее спасибо.
     
  2. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Не получится нормально, слишком много манипуляций с байткодом.

    Да и смысла мало, выигрыш в 2-3 раза только на очень и очень слабых машинах, в остальных случаях в 20 процентов максимум, а сразу после того как отрабатывает JIT вообще никакой.
     
  3. The Midnight Wizard

    The Midnight Wizard Старожил Пользователь

    Баллы:
    153
    Skype:
    you.dont.own.me
    Фордж слишком активно пользуется ASM
     
  4. Автор темы
    Infgator

    Infgator Новичок

    Баллы:
    15
    Имя в Minecraft:
    Infgator
    Т.е. проще говоря, источником проблем является Forge, сам по себе ворошащий
    ...исходный код?
     

Поделиться этой страницей