java - 什么是 native 内存或 c 堆

标签 java c memory jvm heap-memory

我尝试对此进行探索,但找不到包含基础知识的答案。

我想知道 JVM 或 java 程序消耗的内存类型,如堆内存、 native 内存等。

但是我也想知道这个 native 内存(也称为 C 堆)是什么。

我正在寻找包含非常基础知识的解释。

最佳答案

Java程序运行在Java运行时的虚拟化环境中。该运行时本身是一个 native 进程(就像任何其他进程一样)。因此, native 内存的限制是由硬件和进程运行的操作系统施加的。

所有现代操作系统都使用虚拟内存,其中每个正在运行的程序都分配有自己的虚拟地址空间,其大小由底层架构决定。对于 Intel x86-32 位架构,最大可用地址空间为 2^32 - 1,等于 4GB。即使进程有自己的虚拟空间,它也不能使用全部虚拟空间。该虚拟空间分为内核空间和用户空间。在 x86-32 上运行的 Windows 操作系统上,为用户空间保留 2GB,为内核空间保留 2GB;在 Linux 上,保留 3GB 到 1GB。

对于Java进程来说,用户空间在逻辑上可以分为堆内存*和 native 内存。堆内存的大小由“Xms,Xmx”决定。您没有任何选项可以管理 native 内存,因为这是由 JRE 为您完成的。在应用程序因 OutOfMemoryException 终止之前,不断检查 native 内存消耗并检测泄漏始终是最佳实践。 堆内存只是 JVM 管理的用户空间的一部分。

关于java - 什么是 native 内存或 c 堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667299/

相关文章:

java - 定制标题栏

java - 无法使用线程执行代码块中的所有语句

C 程序(malloc)未在 ubuntu 11.04 中编译

c++ - Visual C++ 10(又名 2010)与 Visual C++ 9(又名 2008)相比

c++ - c bitfields struct 中 long int 的奇怪行为

Python - 在内存中查找当前对象

c - 在 C 中处理动态整数类型?

java - 如何在java网页中使用path和basepath?

java - 如何临时创建一个没有任何文件位置的文本文件并在运行时在 Spring Boot 中作为响应发送?

c++ - 在其他函数中设置结构成员的值