背景
jvm到底怎么回事,本以为很简单,结果网上一搜,还真是有点迷糊了。这么多年也没大注意,看几次也是忘几次。总结下,其实主要区分点在于永久代不属于heap,平时说的栈又有细分。了解这些有啥用呢,我觉得在于调整jvm参数有用,jvm参数要根据使用一段时间后,通过查看可以知道该分配多少给堆,多少给栈,给多了也用不了。简单一个方面吧。
知识点
很多人将JVM区域总体分两类,heap区和非heap区。
heap区又分为:
- Eden Space(伊甸园)、
- Survivor Space(幸存者区)、
- Old Gen(老年代)。
非heap区又分:
- Code Cache(代码缓存区);
- Perm Gen(永久代);
- Jvm Stack(java虚拟机栈);
- Local Method Statck(本地方法栈);
正确的说法是
根据 << Java虚拟机规范 >>中的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。