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 <[email protected]>: > > 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]
