hotspot Zero for iOS

David Holmes david.holmes at oracle.com
Wed May 7 12:05:20 UTC 2025


Hi Johan,

On 7/05/2025 5:02 pm, Johan Vos wrote:
> Hi,
> 
> Good question -- thanks David for asking this here before removing it in 
> mainline.
> As Magnus said, there is no place anymore where 
> USE_LIBRARY_BASED_TLS_ONLY is set, so it is currently not used on iOS 
> and its removal won't have impact on the mobile repository.
> At the very least, there are no compile-time issues -- I'll investigate 
> how this is handled, but no problem at all to remove the 
> USE_LIBRARY_BASED_TLS_ONLY definition.

Good to know. I know the old iOS port is long gone, but wasn't sure if 
the new/current port still needed it.

Thanks,
David

> - Johan
> 
> On Wed, May 7, 2025 at 8:37 AM Magnus Ihse Bursie 
> <magnus.ihse.bursie at oracle.com <mailto:magnus.ihse.bursie at oracle.com>> 
> wrote:
> 
>     __
> 
>     On 2025-05-07 02:48, David Holmes wrote:
> 
>>     Hi Johan,
>>
>>     Do the compilers for the mobile builds support direct use of
>>     thread local storage these days? Way back in 2016 in the old
>>     mobile project we had to set USE_LIBRARY_BASED_TLS_ONLY [1].
>>
>>     The question has been asked as to whether we can remove the
>>     USE_LIBRARY_BASED_TLS_ONLY code in mainline.
> 
>     That code seems defunct anyway, the essential part:
> 
>       #if TARGET_OS_IPHONE
>     #define USE_LIBRARY_BASED_TLS_ONLY
> 
>     in globalDefinitions_gcc.hpp being long gone, so
>     USE_LIBRARY_BASED_TLS_ONLY is never defined.
> 
>     /Magnus
> 
> 
> 
>>     Thanks,
>>     David Holmes
>>
>>
>>     [1] https://mail.openjdk.org/pipermail/mobile-dev/2016-
>>     January/000067.html <https://mail.openjdk.org/pipermail/mobile-
>>     dev/2016-January/000067.html>
>>
>>     On 16/12/2024 6:17 am, Johan Vos wrote:
>>>     Hi,
>>>
>>>     With JDK-8346233 [1] being fixed in the openjdk/mobile repo [2],
>>>     the mobile repo can now build a static version of the jvm
>>>     (libjvm.a) that works on iOS. This VM implementation is using the
>>>     Zero interpreter, which means that it is not using runtime-
>>>     generated assembly code, and it does not violate iOS rules (e.g.
>>>     no w+x sections).
>>>     The iOS sdk build can be created using
>>>     `make static-libs-image`
>>>     and it builds on top of the latest work in openjdk/jdk that
>>>     streamlines the build of static libraries and executables (e.g.
>>>     see JDK-8339480 [3])
>>>
>>>     Using this in iOS apps requires the iOS app to include the
>>>     libjvm.a as well as the required native classlibs (e.g.
>>>     libjava.a, libnet.a, ...) Also, the required classes need to be
>>>     available so that the interpreter can use them. I will update the
>>>     OpenJDK-mobile Wiki with an example on how this can be done.
>>>
>>>     For those wondering about the difference with what we previously
>>>     did at Gluon with mobile Java: in the past, we were using AOT
>>>     compilers that were linked to their own JVM implementation (e.g.
>>>     RoboVM or GraalVM Substrate). Those solutions showed that Java
>>>     (and JavaFX) really works on iOS and Android devices, and
>>>     especially the GraalVM AOT allowed for a really fast execution.
>>>     However, those solutions were not using the hotspot code in OpenJDK.
>>>
>>>     With the recent changes, we are now re-enabling the original
>>>     architecture in the Mobile Project, by using the very latest
>>>     hotspot code (Zero interpreter) which aligns the project much
>>>     closer to the upstream OpenJDK. Over the past years, there have
>>>     been tremendous improvements in both the JVM and the JDK code in
>>>     OpenJDK, and the fact that we can use this great work to build
>>>     apps on mobile is a huge opportunity.
>>>
>>>     Using the Zero interpreter allows us to prove that things work,
>>>     and it might eventually lead to passing the TCK. It won't give us
>>>     top-performance, which will be needed for mobile applications.
>>>     That means there is still lots of work to do in a number of
>>>     areas, including
>>>     * AOT: compiled methods (ahead of time, not at runtime) will
>>>     generally run much faster than interpreted methods. I hope that
>>>     we can leverage experience from GraalVM and Project Leyden.
>>>     * footprint: we should only bundle code that is really required
>>>     by a specific app.
>>>
>>>     Also, we need a similar build for Android -- although we can use
>>>     a JIT there, so we are not limited to Zero.
>>>
>>>     Ultimately, this project will allow existing and new Java
>>>     libraries and projects to be used on mobile devices. This brings
>>>     Java back in pole-position for the Write Once Run Anywhere
>>>     paradigm. This can even be combined with OpenJFX, to have a
>>>     single codebase for a complete application including a modern UI,
>>>     all written in Java, and running on different client devices.
>>>
>>>     As I said, there is lots of work to be done, but at least there
>>>     is Innovation Everywhere.
>>>
>>>     - Johan
>>>
>>>     [1] https://bugs.openjdk.org/browse/JDK-8346233 <https://
>>>     bugs.openjdk.org/browse/JDK-8346233>
>>>     [2] https://github.com/openjdk/mobile/commit/
>>>     ce70629f4394184ba517fb99c92ac9374ec8f37a <https://github.com/
>>>     openjdk/mobile/commit/ce70629f4394184ba517fb99c92ac9374ec8f37a>
>>>     [3] https://bugs.openjdk.org/browse/JDK-8339480 <https://
>>>     bugs.openjdk.org/browse/JDK-8339480>
> 



More information about the mobile-dev mailing list