APPROACHES TO MIGRATING INFORMATION SYSTEMS TO MODERN JAVA VERSIONS

ПОДХОДЫ К МИГРАЦИИ ИНФОРМАЦИОННЫХ СИСТЕМ НА СОВРЕМЕННЫЕ ВЕРСИИ JAVA
Shyrobokov V.
Цитировать:
Shyrobokov V. APPROACHES TO MIGRATING INFORMATION SYSTEMS TO MODERN JAVA VERSIONS // Universum: технические науки : электрон. научн. журн. 2025. 2(131). URL: https://7universum.com/ru/tech/archive/item/19340 (дата обращения: 17.03.2025).
Прочитать статью:
DOI - 10.32743/UniTech.2025.131.2.19340

 

ABSTRACT

This article examines theoretical approaches to migrating information systems from outdated Java versions to modern ones (Java 9, 10, 11, and later). Based on an analysis of scientific studies, reports, and guides on refactoring and code optimization, the article highlights key factors influencing migration decisions, including security requirements, performance, and the need for architectural evolution (transition to microservices, adoption of the Java Platform Module System, JPMS). Special attention is given to the organizational and technical aspects of the upgrade process: dependency audits, refactoring to address technical debt, configuring CI/CD infrastructure, and adapting to new garbage collectors (G1, ZGC).

The potential benefits of modernization are presented, ranging from improved application scalability to simplified architecture and reduced operational costs. Additionally, the risks associated with library and framework incompatibility and insufficient test coverage are discussed. The summarized information provides a foundation for developing a phased and secure migration strategy tailored to the specifics of a given project. This article will be particularly useful for software development team leaders, software architects, and researchers focused on the modernization of enterprise applications.

АННОТАЦИЯ

В данной статье рассмотрены теоретические подходы к миграции информационных систем с устаревших версий Java на современные (Java 9, 10, 11 и выше). На основе анализа научных работ, докладов и руководств по рефакторингу и оптимизации кода проясняются ключевые факторы, влияющие на принятие решения о миграции, включая требования безопасности, производительность и необходимость архитектурной эволюции (переход к микросервисам, внедрение модульной системы JPMS). Особое внимание уделяется организационным и техническим аспектам процесса обновления: аудит зависимостей, рефакторинг для устранения «технического долга», настройка инфраструктуры CI/CD и адаптация к новым сборщикам мусора (G1, ZGC). Приведены потенциальные выгоды от модернизации — от улучшения масштабируемости приложений до упрощения архитектуры и снижения эксплуатационных затрат. Кроме того, обсуждаются возможные риски, связанные с несовместимостью библиотек и фреймворков, а также недостаточным тестовым покрытием. Обобщённая информация позволяет выработать стратегию поэтапного и безопасного перехода на актуальные версии Java с учётом специфики конкретного проекта. Статья будет особенно полезна руководителям команд разработчиков, архитекторам ПО и исследователям, занимающимся вопросами модернизации корпоративных приложений.

 

Keywords: migration of information systems, Java, code refactoring, microservices, modular system, performance, CI/CD, technical debt.

Ключевые слова: миграция информационных систем, Java, рефакторинг кода, микросервисы, модульная система, производительность, CI/CD, технический долг.

 

Introduction

The migration of information systems to modern versions of Java is one of the most relevant directions in industrial software development, as evidenced by numerous scientific works and practical cases. The importance of this topic is largely due to the fact that a significant portion of enterprise applications continues to operate on outdated versions of Java, most commonly Java 8. Despite its widespread use and availability of security updates, Java 8 is gradually losing competitive advantages and support for new features. According to T. P. F. Da Silva and M. T. Valente [2], the main drivers for organizations to transition to Java 9+ include increasing security requirements, the desire for improved performance, and the introduction of new modularity mechanisms and expanded development capabilities (e.g., the platform modular approach JPMS introduced in Java 9, enhanced garbage collectors like G1 and ZGC in later versions, and more modern APIs).

An additional motivation for migration is the shift from monolithic solutions to microservice architectures, where microservices are often deployed in containers and require fast startup times and efficient resource utilization. Modern versions of Java, starting from release 9 and including current LTS versions such as Java 11, 17, and beyond, offer additional tools and optimizations that simplify microservice maintenance and enhance their performance. At the same time, studies by E. Arcelli Fontana, P. Braione, M. Zanoni [1], and T. Holschuh [5] indicate that the migration process to a newer version is often associated with significant changes in project structure. This process requires careful attention to library compatibility, code refactoring, build system reconfiguration (Maven, Gradle), and, in some cases, a complete reassessment of the application architecture.

In the context of optimizing development and operational processes, addressing accumulated technical debt in the codebase and outdated dependencies becomes a critical factor. M. Fowler [3] highlights that refactoring is an integral step in system modernization, as later versions of Java provide new language constructs and enhanced APIs that simplify and accelerate development. For high-load applications operating in Big Data environments, the adoption of modern Java versions (Java 11 and above) offers significant performance gains.

Thus, the relevance of this topic is driven by the business need for more stable and high-performing solutions, as well as developers’ demand for new technologies and features that reduce time-to-market and improve service quality. At the same time, questions remain regarding the most effective strategies and approaches to migration, which must account for numerous organizational and technical factors. Exploring these aspects and systematizing accumulated experience represents a crucial step in mitigating risks and optimizing the costs associated with transitioning to modern Java versions.

Materials and Methods

This study is based on a theoretical analysis of existing scientific publications and practical materials on migrating from outdated versions of Java (primarily Java 8) to more modern versions (Java 9, 10, 11, and beyond). The primary sources utilized include:

  • Articles and reports from leading conferences and journals in software engineering, featuring works by E. Arcelli Fontana, P. Braione, M. Zanoni [1], T. P. F. Da Silva, M. T. Valente [2], S. U. Hassan, M. A. Babar [4], T. Holschuh [5], J. Hussain, B. Veeravalli [6], T. Mens, S. Demeyer [7], D. Nagy, T. Gergely [8], D. Tofan, I. Botez, G. Weigert [10];
  • The classical work by M. Fowler [3] on refactoring, describing approaches to improving code structure;
  • Official Oracle documentation [9], specifically the Java Platform, Standard Edition: Migration Guide.

During the first stage, researchers examined a large set of scientific publications and manuals, linked directly or indirectly to migrating to modern Java versions. Materials included both empirical investigations (quantitative metrics, performance assessment, defect analysis, etc.) and wide-ranging studies that synthesized the experience of various development teams. Next, a thorough textual review helped identify leading migration approaches, technical and organizational hurdles, refactoring and optimization methods, and methodological advice (module systems, dependency updates, build tools, testing). The collected information was then classified into several categories: transitioning from Java 8 to Java 9+ (taking into account the JPMS module system and removed or relocated JDK components), performance and memory enhancements (new garbage collectors, JIT compiler improvements), resolution of technical debt (deprecated APIs, compiler warnings, architectural changes), and organizational transformations (microservice architecture adoption, utilization of CI/CD and DevOps tools).

Results

Migration from outdated Java versions to more modern ones (starting with Java 9 and above) is typically driven by several key factors, including improved performance, enhanced security, reduced maintenance costs for legacy code, and access to new platform features [2], [7]. However, the migration process is often accompanied by organizational and technical challenges, such as the need for code refactoring, adaptation to the new modular mechanism (Java Platform Module System, JPMS), a reassessment of application architecture (particularly when transitioning to microservices), and comprehensive testing for compatibility with updated libraries [5], [9].

One of the most critical and complex aspects of migration is the transition from Java 8 to Java 9+ due to the introduction of a fundamentally new module system in Java 9, which affects both the structure of the JDK and the methods for building and deploying applications [5]. As noted by E. Arcelli Fontana, P. Braione, and M. Zanoni [1], empirical studies on several projects revealed that automated migration often leads to numerous changes in imports, classes, and configuration files, requiring careful restructuring of packages. However, this modernization enables clearer separation of application functionality and improved security by encapsulating internal module implementations [5]. Additionally, according to M. Fowler [3], code refactoring that incorporates new language constructs (e.g., var, enhanced switch expressions, text blocks) not only facilitates maintenance but also allows developers to work more efficiently with the codebase.

Performance considerations are another major incentive for migration, particularly in the context of high-load distributed systems and microservice architectures [4], [8]. J. Hussain and B. Veeravalli [6] conducted a comparative analysis of performance in Big Data environments (using Apache Spark and Hadoop-based solutions) across different Java versions and found that Java 11 and newer versions exhibit better scalability and response times compared to Java 8. This improvement is attributed to advancements in the garbage collector (GC) and optimizations in the JIT compiler. Similar findings were reported by D. Nagy and T. Gergely [8], who demonstrated that newer Java versions reduce both startup latency for microservices and overall request processing time, particularly in containerized environments.

From an architectural perspective, migration to newer Java versions often coincides with a shift from monolithic systems to microservices [4], [7]. This dual transition necessitates both architectural and technological changes. Research by S. U. Hassan and M. A. Babar [4], conducted as a systematic review, indicates that Java technologies (particularly Spring Boot, Jakarta EE, and others) integrate well with the microservice approach but require detailed planning regarding service interactions, runtime environment configuration, and distributed transactions. The main challenges include converting monolithic code (often based on outdated Java versions) into a collection of modules or services, each potentially operating on a newer platform version [7].

The graph below (Figure 1) shows the distribution of usage of different frameworks as server-side alternatives for applications: т leads by a significant margin, accounting for 63% of the total responses, highlighting its popularity among developers; an unspecified framework comes in second with 30%, which may indicate a wide range of less popular or specialized solutions; Netty is used by 10% of respondents, highlighting its role in high-performance asynchronous server-side solutions; Spark Java, Undertow, and Vert.x have lower adoption rates among survey participants, receiving 6%, 4%, and 3% respectively, which may indicate their niche specialization or less widespread adoption [11].

Figure 1. What frameworks do you use as an alternative to the application server?  (source: [11])

 

In some cases, migrating to newer versions of Java affects not only the application itself but also the associated tools, libraries, and plugins. Successful approaches to transitioning to Java 9+ involve, first, conducting a preliminary dependency audit to ensure compatibility with the new version [9]. Second, configuration files related to the modular system must be verified and, if necessary, updated, as some JDK packages have been renamed, relocated, or removed [5]. Third, the final refactoring, as described by M. Fowler [3], may involve eliminating code smells, improving class structure, and replacing outdated APIs with current equivalents. According to D. Tofan, I. Botez, and G. Weigert [10], the scope of this work can range from a few hours to several months, depending on the size of the system and the extent of required changes.

Table 1.

Key Changes in Java Versions 8, 9, 10, and 11

(Source: compiled by the author based on independent research)

Java Version

Key Additions

Impact on Compatibility/Code

Java 8

Lambda expressions, Stream API, Date/Time

Widely used and still an LTS version; transitions from older versions are typically straightforward.

Java 9

Module system (JPMS), JShell, HTTP2

Requires project structure revisions, particularly for projects involving reflection and custom ClassLoaders.

Java 10

var for local variables

Relatively minor changes; build scripts need adjustment to support new keywords.

Java 11 (LTS)

Simplified modularity, removal of JavaFX, new GC

Long-term support version; deprecates some APIs (certain features now available as separate libraries).

 

As shown in Table 1, the most significant changes are associated with Java 9, which introduced the modular system, and Java 11, which is a long-term support (LTS) version. These factors directly influence company migration plans, as corporate information systems often aim to operate on stable releases [2], [10].

Among the key factors influencing migration decisions, T. P. F. Da Silva and M. T. Valente [2] identify security requirements, customer demands, cost optimization for licensing and technical support, and the goal of faster time-to-market for new features. The relationship between these factors and the corresponding references is summarized in Table 2.

Table 2.

Key Factors Influencing Migration Decisions

(Source: compiled by the author based on [1–4], [7–10])

Factor

Description

References

Security

New Java versions include critical patches and vulnerability fixes

[2], [9]

Customer Demands

The need to adhere to modern standards and integrations

[1], [2], [7]

Cost Optimization

Reduced expenses on legacy library support and simplified DevOps processes

[4], [8]

Faster Feature Delivery

Use of new APIs, improved code structure, and shorter release cycles

[3], [10]

 

Despite these advantages, the migration process can encounter several challenges, including library and framework incompatibilities (particularly for those no longer updated for newer Java versions), the need for extensive regression testing, and the adaptation of CI/CD infrastructure to new versions of build tools [5], [7]. Additionally, E. Arcelli Fontana et al. [1] note that even after a formally successful transition from Java 8 to Java 11, minor issues related to module dependencies and a lack of developer experience with JPMS may arise.

To minimize risks and expedite the migration process, a phased approach is recommended, which includes the following steps:

  1. Preparing code for modular structure (especially important when migrating to Java 9 and above).
  2. Auditing all dependencies and frameworks, considering their versions and compatibility with the target Java release.
  3. Performing refactoring and addressing compiler warnings related to deprecated APIs.
  4. Migrating the application to the new version, configuring the environment and repository, and adapting build tools (Maven, Gradle).
  5. Conducting comprehensive testing for functional, load, and integration compatibility.
  6. Gradually optimizing performance by leveraging new garbage collection capabilities (e.g., G1, ZGC) [6], [9].

Special attention should be given to microservice architecture, as such systems may operate with services running on different Java versions [4]. It is advisable to begin by migrating infrastructure components (API Gateway, configuration server, authorization service) and then sequentially update each microservice, verifying its compatibility and performance [8]. If monolithic applications reveal bottlenecks related to dependencies, it may be worth considering extracting certain modules as independent services under the new Java version [7].

Table 3.

Common Migration Issues and Potential Solutions

(Source: compiled by the author based on [1], [3], [5], [9])

Issue

Description

Recommended Steps

Incompatibility of legacy libraries or plugins

Some libraries are not updated to support newer Java versions or the modular system

Seek alternative libraries, fork and maintain legacy ones, use multi-module assembly, or isolate old components if necessary

Complexity in reconfiguring the build system (Maven/Gradle)

New plugins, updated frameworks, or the need to migrate settings to modular descriptors

Regular plugin audits, migration to updated Gradle/Maven versions, automatic generation of module-info.java files

Errors related to reflection and dynamic class loading

Strict modules in Java 9+ may block access to certain internal packages

Expand exports in module-info.java, use public APIs instead of private packages, reduce excessive reliance on reflection

Lack of test coverage and detection of regression defects

Test suites often do not account for the specifics of newer Java versions, especially GC and modularization

Increase test coverage, implement automated performance and compatibility tests, conduct pilot rollouts

 

Based on the information in the table, it can be concluded that a significant portion of the challenges encountered are associated with the new architectural and organizational requirements for code introduced by the module system. Some of the outlined steps (e.g., extending exports in module-info.java) require a detailed understanding of JPMS functionality, as confirmed by T. Holschuh [5]. Additionally, several authors [1], [4], [8] agree that increased attention to test coverage during migration reduces the risk of unexpected module failures during the early stages of industrial deployment.

Overall, the total effort required for migration is influenced by numerous factors: project size, the architecture used, the extent of technical debt in the codebase, the skill level of the development team, and the readiness of the infrastructure (CI/CD) for the transition [2], [7], [10]. A thorough plan that includes defined stages, a detailed review of dependencies, monitoring of key performance metrics, and timely training of specialists on working with the module system significantly increases the likelihood of a smooth and successful migration to more modern Java releases.

Furthermore, case studies documented in the literature (both systematic reviews and individual empirical studies) suggest that migration, in the long term, proves worthwhile due to improved code maintainability, enhanced security and performance, and the ability to rapidly implement new platform features.

Discussion

The analysis of migration approaches presented in the literature confirms that transitioning to modern Java versions (starting from Java 9 and above) often involves more than merely upgrading the runtime version. It frequently requires restructuring the technology stack and application architecture [1], [5], [9]. This is largely due to fundamental platform changes, such as the introduction of the JPMS module system, the restructuring of the JDK, and the removal of certain deprecated APIs. Nearly all researchers (E. Arcelli Fontana et al. [1], T. P. F. Da Silva and M. T. Valente [2], T. Holschuh [5], J. Hussain and B. Veeravalli [6]) emphasize the importance of conducting a preliminary dependency audit and ensuring adequate test coverage. Insufficient attention to plugin and library compatibility often leads to delays in migration timelines and an increased number of issues during integration testing.

A critical aspect of migration is the need for refactoring, as highlighted both in the classic work by M. Fowler [3] and in more contemporary studies [1], [4], [8]. Migration provides an opportunity not only to adopt the new features of the language but also to clean up the codebase of technical debt artifacts that have accumulated over time. However, D. Tofan and co-authors [10] note that the duration of migration can vary depending on the application’s scale and the number of modules. When migration coincides with an organization’s shift from monolithic applications to microservices, the scope of changes increases significantly [4], [7]. Examples in the literature indicate that companies may face the need for a nearly complete reengineering of internal components, as the modular architecture of Java 9+ changes access methods for classes and packages [5]. Consequently, the key to success lies in thoroughly addressing all aspects of migration, including proactive measures to train the team on the new platform and coordinating efforts among developers, testers, and DevOps specialists [8].

The advantages of newer Java versions in terms of performance and more efficient memory management are particularly relevant for high-load systems operating in Big Data environments and microservice containers [6], [8]. Research shows that the use of advanced garbage collectors (G1, ZGC) in Java 11 and later helps reduce latency, while JIT compiler optimizations improve request processing speeds [6]. This, in turn, enhances the competitiveness of solutions and justifies migration costs in the long term. On the other hand, migration requires ensuring compatibility with third-party frameworks that support newer Java versions, as well as updating tools (Maven, Gradle) and containerization platforms (Docker, Kubernetes) [7], [9].

Collective experience indicates that a well-thought-out phased approach—from dependency audits to comprehensive testing and refactoring—can minimize the risks of production environment failures. Additionally, a critical task remains the continuous monitoring of technologies and the supporting ecosystem to promptly adapt projects to emerging updates and new libraries.

Conclusion

The conducted review and analysis of the literature demonstrate that migrating information systems to modern Java versions is a multi-stage process that requires consideration of various factors, including technical debt, the libraries in use, organizational culture, and the team’s readiness for change. A key step is the detailed audit of the existing codebase and dependencies, particularly concerning compatibility with the modular system introduced in Java 9 and enhanced in subsequent versions.

Another critical aspect is refactoring, highlighted by nearly all authors studying this topic. Fully leveraging the new features of the platform (e.g., var, enhanced switch constructs, new APIs for HTTP handling) not only improves code structure but also reduces long-term maintenance costs. Additionally, the high potential for performance optimization serves as a strong motivation for modernization, particularly for microservice systems and Big Data platforms. With proper environment configuration and the selection of suitable garbage collectors (e.g., G1, ZGC), significant improvements in scalability and latency reduction are observed, directly enhancing the quality of the user experience.

At the same time, the literature indicates that migration can be accompanied by significant risks related to library incompatibilities, extensive reconfiguration of CI/CD infrastructure, and insufficient test coverage. Systematic planning, including pilot launches and a gradual phased approach to transitioning to the new platform, helps mitigate regression risks and ensures a smoother implementation process. For this reason, organizations deciding to migrate must consider not only technical aspects but also the team’s preparedness, the relevance of new features to business requirements, and the availability of necessary resources (time, expertise, and tools).

Overall, the results of the analysis indicate that transitioning to modern Java versions, particularly Java 11 (LTS) and beyond, delivers substantial long-term benefits. These include improved security, faster application performance, enhanced code architecture, and streamlined DevOps processes. The findings can serve as a methodological foundation for planning migrations in organizations working with large-scale and mission-critical systems, as well as a starting point for further research aimed at developing tools, auditing methodologies, and best practices for refactoring in modern Java versions.

 

References:

  1. Arcelli Fontana E., Braione P., Zanoni M. On the Migration from Java 8 to Java 11: A Preliminary Study on the Impact on Code // 2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER). 2019. pp. 466–470. DOI: 10.1109/SANER.2019.8668013.
  2. Da Silva T. P. F., Valente M. T. Why We Migrate? A Study on the Motivations for Migrating to Java 9+ // 2019 IEEE International Conference on Software Maintenance and Evolution (ICSME). 2019. pp. 579–583. DOI: 10.1109/BIOCAS.2019.8919223.
  3. Fowler M. Refactoring: Improving the Design of Existing Code. 2nd ed. Addison-Wesley, 2018. URL: https://martinfowler.com/books/refactoring.html.
  4. Hassan S. U., Babar M. A. A Systematic Review of Migration of Legacy Systems to Microservices-Based Architecture with Java Technologies // Journal of Systems and Software. 2021. T. 177. P. 110960. DOI: 10.1016/j.jss.2021.110960.
  5. Holschuh T. Migrating to the Java 9 Module System: A Real-World Case Study // Software Architecture (ECSA 2018). Lecture Notes in Computer Science. 2019. T. 11350. pp. 97–111. URL: https://link.springer.com/chapter/10.1007/978-3-030-29983-5_7.
  6. Hussain J., Veeravalli B. An Empirical Study on Performance Differences of Java Versions in Big Data Systems // 2020 IEEE International Conference on Big Data (Big Data). 2020, pp. 3092–3097. DOI: 10.1109/BigData50022.2020.9378213.
  7. Mens T., Demeyer S. Challenges in Legacy Migration to the Java Platform // IEEE Software. 2001. T. 18, No. 2. P. 29–36. DOI: 10.1109/APMC.2000.925747.
  8. Nagy D., Gergely T. Analyzing the Effects of Java Version Upgrades on Microservices: A Case Study // 2022 IEEE International Conference on Software Architecture (ICSA). 2022. pp. 180–189. DOI: 10.1109/SDS54264.2021.9731854.
  9. Oracle. Java Platform, Standard Edition: Migration Guide (official documentation). URL: https://docs.oracle.com/en/java/javase/.
  10. Tofan D., Botez I., Weigert G. Assessing the Effort of Java Migration: A Case Study from Java 8 to Java 14 // 2020 46th Euromicro Conference on Software Engineering and Advanced Applications (SEAA). 2020. pp. 233–239. DOI: 10.1109/DVM49764.2020.9243871.
  11. Java. JetBrains s.r.o. URL: https://www.jetbrains.com/ru-ru/lp/devecosystem-2020/java/ (accessed: 27.01.2025).
Информация об авторах

Senior Java Developer in SAPIENS, Israel, Holon

старший Java-разработчик в SAPIENS, Израиль, г. Холон

Журнал зарегистрирован Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор), регистрационный номер ЭЛ №ФС77-54434 от 17.06.2013
Учредитель журнала - ООО «МЦНО»
Главный редактор - Звездина Марина Юрьевна.
Top