eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Course – LJB – NPI EA (cat = Core Java)
announcement - icon

Code your way through and build up a solid, practical foundation of Java:

>> Learn Java Basics

Partner – LambdaTest – NPI EA (cat= Testing)
announcement - icon

Distributed systems often come with complex challenges such as service-to-service communication, state management, asynchronous messaging, security, and more.

Dapr (Distributed Application Runtime) provides a set of APIs and building blocks to address these challenges, abstracting away infrastructure so we can focus on business logic.

In this tutorial, we'll focus on Dapr's pub/sub API for message brokering. Using its Spring Boot integration, we'll simplify the creation of a loosely coupled, portable, and easily testable pub/sub messaging system:

>> Flexible Pub/Sub Messaging With Spring Boot and Dapr

1. Overview

Java programs run on a JVM (Java Virtual Machine), allowing them to run almost everywhere, from application servers to mobile phones. If Java is installed properly, we can run applications without problems. However, sometimes we still encounter errors like “Could not create the Java Virtual Machine“.

In this tutorial, we’ll look at the “Could not create the Java Virtual Machine” error. First, we’ll see how to reproduce it. Next, we’ll understand the leading cause of the error, and later we’ll see how to fix it.

2. Understanding the Error

The “Could Not Create the Java Virtual Machine” error occurs when Java cannot create a virtual machine (JVM) to execute a program or application.

This is a very generic error message. The JVM fails at its creation, but the actual cause might be something else, and the error message doesn’t specify why it cannot be created.

How we’ll see this error depends on the running Java-based application that generated it. Java applications such as Eclipse, IntelliJ, and others may only display the main error message.

Running from the terminal, however, produces a main message and further information:

  • Error occurred during initialization of VM
  • Could not reserve enough space for object heap
  • Unrecognized option: <options> etc.

Let’s reproduce the error. First, let’s create a simple HelloWorld class:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

For our example, let’s run HelloWorld with Java 8 with the option -XX:MaxPermSize=3072m. This would run successfully.

However, in Java 17 the -XX:MaxPermSize option was removed and became an invalid option. So, when we run the same class in Java 17 with this option, it fails with “Error: Could not create the Java Virtual Machine“.

Along with the main error, the system returns a specific error message “Unrecognized VM option ‘MaxPermSize=3072m”:

$ java -XX:MaxPermSize=3072m /HelloWorld.java
Unrecognized VM option 'MaxPermSize=3072m'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

To fix this, we need to remove the invalid option and replace it with a valid alternative option if one exists.

3. Possible Causes

If we see the error “Could not create the Java Virtual Machine“, this means that our Java installation cannot launch the JVM, from which applications run.

The error might occur because of several factors. An incorrect Java installation may cause this error. There are various possibilities. For example, if the Java version installed is incompatible with the application or program being attempted to run, the JVM may fail to create. Also, if the installation directory isn’t  added to the system’s PATH environment variable, Java may not be identified, resulting in this error.

Furthermore, having multiple Java versions installed might cause issues, resulting in this error. And finally, if a Java update is halted or corrupted, it may cause an incorrect installation.

In some cases, the JVM may not have enough memory to run the program. By default, Java uses an initial and maximum heap size. So, if our application exceeds the maximum heap size, an error occurs. We can adjust this by adjusting the amount of system memory Java can use.

A corrupted Java file or invalid JVM settings can also prevent the JVM from starting, as we saw in our example.

It’s possible that other software or applications could be conflicting with Java, which would prevent the JVM from coming up and this error would arise.

Another cause could be that our system lacks suitable admin access.

4. Possible Solutions

There is not a single fix for all scenarios. Depending on the case we may consider different troubleshooting approaches. But, let’s see some of the basic points we need to verify.

4.1. Verify the Java Installation

First, we must ensure Java is correctly installed by running java -version at the command prompt:

% java -version
java 17.0.12 2024-07-16 LTS
Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286, mixed mode, sharing)

In addition, we should make sure that the Java installation directory is listed in the system’s PATH environment variable.

4.2. Check the Memory Options

Our next step would be to look at the application memory tuning parameter. Until Java 8 we’ve PermGen memory space that has many flags like -XX:PermSize, XX:MaxPermSize, for tuning the application memory.

From Java 8 onwards, the Metaspace memory space replaces the older PermGen memory space. Many new Metaspace flags are available, including -XX:MetaspaceSize, -XX:MinMetaspaceFreeRatio, and -XX:MaxMetaspaceFreeRatio.

These flags are available to improve application memory tuning. As a result of this improvement, JVM has a reduced chance of getting the OutOfMemory error.

4.3. Check Permissions

Also, sometimes we’ll get errors if there is any problem with access/permission:

  • java.io.FileNotFoundException: /path/to/file (Permission denied)
  • java.security.AccessControlException: access denied (“java.io.FilePermission” “/path/to/file” “read”)
  • java.lang.SecurityException: Unable to create temporary file. Etc.

To resolve these issues, we need to run Java as an administrator or modify the file/directory permissions. When using Windows, we right-click on the terminal or IDE icon and select “Run as administrator“. For Linux and Mac, we use sudo -i or su to open a terminal as the root user.

4.4. Cleanup

Sometimes other Java applications in the system may conflict with ours. We can try identifying them, and then disable or uninstall any Java-related software we’ve installed recently.

Finally, if everything fails, we can try reinstalling Java from scratch.

5. Conclusion

In this article, we looked at Java’s “Could not create the Java Virtual Machine” error. We discussed how to reproduce the error and found out the cause of the exception. Lastly, we looked at a few solutions to resolve the error.

The “Could not create the Java Virtual Machine” error can be resolved by identifying and addressing the underlying cause. By following the troubleshooting steps, we should be able to fix the error in most of the cases and get our Java program running smoothly.

Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

eBook Jackson – NPI EA – 3 (cat = Jackson)