Java objects are stored in a heap memory, which is a section of memory that is shared among all threads in a process. The heap memory is managed by the JVM and is used to store objects and their associated data. The heap memory is divided into two parts: the young generation and the old generation. The young generation is used to store newly created objects, while the old generation is used to store objects that have been around for a while. The JVM also uses the heap memory to store static variables and class metadata.