A method to pack javafx apps in less than 5 MB (with jvm)
Tobias Bley
tobi at ultramixer.com
Wed Apr 8 19:10:42 UTC 2015
HI,
it’s awesome! Could we use this approach independently from JavaPackager via Gradle? And could we use it for javafxports.org <http://javafxports.org/> / RoboVM?
Best,
Tobi
> Am 08.04.2015 um 20:46 schrieb Shashaank Tulsyan <shashaanktulsyan at gmail.com>:
>
> Hi,
>
> I am extremely excited to share something unimaginable.
> Inspired by various open source projects out there I tried to create an
> insanely stripped down vm distribution.
>
> The result :
> Java 8 FX app in less than 5MB !!!!!
>
> Don't believe me, just see it for yourself :
> https://github.com/s...0application.7z
> <https://github.com/shashaanktulsyan/spyfs/blob/master/sample%205MB%20java%20application.7z>
> *Note1 : This app has been packaged using javafx packer and for some reason
> will not run on 32bit OS.*
> *Note2 : This app does nothing, it will just show a javafx window, with a
> button that does nothing**.*
>
> For me having a *desktop* java app, along with java runtime, in less than
> 5MB is a big deal.
> You might not believe me, but I have been waiting for java modularization
> to happen since almost a decade.
> I started doing java when I was 15, and hated that I couldn't distribute
> stuff that I made like others were able to using other languages.
> Anyhow, I would like to share how I achieved this.
>
> I used following facts to my advantage :
>
> - Java classes are loaded in lazy fashion. So even if there is
> dependency to a class because of an import statement, the class itself will
> not be loaded until it is required !
> - Xbootclasspath can be used to change runtime classes. So instead of
> using heavy rt.jar and other heavy jar files we can use a highly stripped
> down runtime which has exactly those classes which we require. (Inspired by
> robovm, retrolamba and proguard)
> - So now the last part remains, is *how to find which classes are
> actually used*. For this purpose I don't use anything related to javavm.
> Instead I use kernel level *virtual filesystems*!!! This way I am also
> able to remove native libraries (dlls) and resources (configuration files
> etc) which are not required.
> - Finally these options can be set very easily in configuration file of
> a native java application created using javafx packager. Only 2 lines need
> to be added to do the trick.
>
>
>
> Here I am not going to share the details.
> But I am here to share the excitement. This is really insanely small !
> A Javafx application in 5MB!! That is crazy small.
>
> This is a very rigorous approach, only very greedy might go to this path.
> But when you see other platforms/vms/languages giving out small 5MB native
> apps, one feels why can't java also do this? :D
>
> It just shows how much room we have for stripping down jvm. It shows that
> the smallest base that we start off with can be very very small.
>
> What do you guys think?
> BTW if you are interested in knowing the exact steps, check out
> https://github.com/shashaanktulsyan/spyfs#java-in-5-mb
>
> Thanks
> Shashank [image: :D] [image: :D] [image: :D]
More information about the jigsaw-dev
mailing list