Caching auto-provisioned install4j distributions in CI pipelines

2025-04-14
Posted by Ingo Kegel

Starting with install4j 11.0, integrating install4j into your build system has become much easier: The Gradle, Maven, and Ant plugins can now auto-provision the install4j distribution. This means the plugins will download and cache the appropriate install4j version automatically, so you no longer need to install install4j manually.

Cross-platform JRE bundle creation under threat from JEP 493

2025-04-08
Posted by Ingo Kegel

One of the most valuable capabilities introduced with the Java module system in Java 9 is its support for creating custom runtime images with jlink. Developers can include only the modules they need, resulting in lightweight JRE bundles tailored to the requirements of their applications. Using the --module-path option, it has even been possible to generate those runtime images for different operating systems from a single host machine.

With Java 24, JEP 493 introduces a change that significantly impacts this workflow. JDK vendors can now configure builds without .jmod files, as jlink can optionally extract the required resources from the lib/modules jimage file. While this change reduces the size of the JDK by about 25%, it also removes critical support for cross-platform linking.

Improvements for macOS App Store submissions in install4j 11.0.2

2025-01-14
Posted by Ingo Kegel

install4j 11.0.2 introduces several new features to simplify macOS App Store submissions, including automated entitlement handling for TestFlight, improved support for local testing with development provisioning profiles, and dynamic bundle versioning for easier resubmission of builds.

Refreshed JProfiler IDEA plugin for the new UI

2024-09-23
Posted by Ingo Kegel

Kotlin 2.0 features a total rewrite of the Kotlin compiler known as "Kotlin K2". IntelliJ IDEA will remove support for the old compiler in version 2024.3 impacting all plugins that depend on the Kotlin plugin, such as the JProfiler IDEA plugin.

The newest version of the JProfiler IDEA plugin for IntelliJ IDEA now includes support for Kotlin K2 mode. This means that the JProfiler plugin no longer prevents switching to K2 mode in IntelliJ IDEA 2024.2 and is now ready for IntelliJ IDEA 2024.3 where K2 mode will be the default and plugins depending on the old API will no longer be loaded.

We took this opportunity to align the JProfiler plugin with another recent major change in IntelliJ IDEA: The new UI, which became the default in IntelliJ IDEA 2024.2. It is impractical for IDEA plugins to support both the old and the new UI, so we decided to change the UI once the new UI became widely used.

Migrating to install4j 11.0

2024-09-02
Posted by Ingo Kegel

In most cases, migrating to install4j 11 involves simply opening and saving your project with the install4j 11 IDE. Nevertheless, there are some considerations with respect to backwards compatibility and a couple of behavioral changes.

Namespace awareness of XML actions in install4j

2024-08-21
Posted by Ingo Kegel

This post explains an exceptional backward-incompatibility in the install4j 10.0.9 release. This was necessary due to a change in install4j 10.0.8 that was intended to fix the corruption of namespaced XML documents by modifying XML actions.

Why JVMTI sampling is better than async sampling on modern JVMs

2024-02-01
Posted by Ingo Kegel

In recent years, "async sampling" has been hyped as a better way of CPU profiling on the JVM. While this has been true for some time, it is no longer the case. This blog post explains the history of sampling and the current state of the art.

How invokedynamic makes lambdas fast

2024-01-10
Posted by Ingo Kegel

Recently, we have been at work rewriting our website in Kotlin. Instead of a view technology that uses string templates with embedded logic, we now use the Kotlin HTML builder to develop views as pure Kotlin code. This has a number of advantages, like being able to easily refactor common code. Also, the performance of such views is much better than that of string templates, which contain interpreted code snippets.

When measuring the performance, we noticed that a lot of anonymous classes were created for our views and their loading time was significant. Code that uses the Kotlin HTML builder is very lambda-heavy and as of Kotlin 1.9, lambdas are implemented as anonymous classes. The JVM has a sophisticated mechanism to avoid creating classes at compile time that was introduced in Java 8 - the LambdaMetafactory and invokedynamic. The JVM developers also claimed that the performance would be better than anonymous classes. So why does Kotlin not use that?

Garbage collector analysis in JProfiler

2023-09-22
Posted by Ingo Kegel

This screencast shows how to use the garbage collector probe in JProfiler. Having access to detailed information about the overall activity of the GC, as well as the single garbage collections, is crucial for tuning the garbage collector and achieving an optimal performance for your application.

Recording JFR snapshots with JProfiler

2023-09-20
Posted by Ingo Kegel

Recording JFR snapshots with JProfiler

This screencast shows JProfiler's versatile functionality as a JFR recording controller. As an example, a JFR recording on a Kubernetes cluster is recorded and the resulting snapshot is shown in JProfiler. In this context, you can see the wizard for configuring JFR recording settings. In addition, JFR recordings of terminated JVMs and the handling of externally started JFR recordings are demonstrated.

Connect
Read with RSS
Subscribe by email
Follow on or
Blog Archive