-
首先要搞清楚 JVM 的内存机制:
JVM 内存区域总体分两类,heap 区 和 非 heap 区(本地内存) 。
- heap 区: 堆区分为 Young Gen(新生代),Tenured Gen(老年代-养老区)。其中新生代又分为 Eden Space(伊甸园)、Survivor Space(幸存者区)。
- 非 heap 区: Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java 虚拟机栈)、Local Method Statck(本地方法栈)。
首先 JVM 本身是一个应用程序,一般是通过 C、C++ 实现的,这个应用程序要正常运行,是一定要向操作系统申请内存的,维持这个进程正常运行的内存,即可以理解成本地内存。
其次,Java 程序在运行过程中,会 new 出很多对象,这些对象又是保存在 JVM 的堆内存中的,Java 程序在执行过程中,会加载很多类,这些类也是保存在堆内存中。
JVM 本身要对堆内存进行维护和管理,还负责垃圾回收,这些也同时会消耗本地内存,JVM 在启动过程中,会依赖一些动态库,这同样也消耗本地内存。
JAVA_OPTS='-Xms3096m -Xmx3096m -Dsun.net.inetaddr.ttl=180' 这个只是用于设置堆内存的大小,而 JVM 运行过程中到底会向操作系统申请多少内存,这个是由 JVM 在运行过程中动态决定的,我们无法设置
-
JVM
180 引用 • 120 回帖
JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于