1.JVM构成:类加载系统;运行时数据区;执行引擎
线程独享:虚拟机栈,本地方法栈,程序计数器 -不需要GC
线程共享:堆和方法区,存储类的静态数据和对象数据 -需要GC
2.堆的演变:Heap
1.6版本:运行时常量池在永久代
1.7版本-堆(运行时常量池转移到堆)
年轻代-老年代-永久区(JVM虚拟机内存)-Virtual区
1.8版本-堆(运行时常量池还在堆)
年轻代-老年代-元空间(本地内存空间)
1.9版本-堆
Region:Eden-Survivor-Old-Humongous
3.虚拟机栈:Stack
栈内存为线程私有空间,每个线程都会创建私有的栈内存,java方法执行时创建栈帧-特殊的数据结构。局部变量表-操作栈-动态连接-返回地址
可能报错:StackErrorFlow;OOM
4.本地方法栈:
Native方法-并发编程的时候需要锁保障线程安全-底层原理就是本地方法。
5.方法区:
虚拟机已加载的类信息,运行时常量池(1.7之前在方法区)
1.8之前实现在永久代-jvm内存-永久代溢出错误;1.8之后实现在元空间-物理直接内存;
6.直接内存:
堆内存 分配性能好;读写效率低
直接内存 分配性能差;读写效率高-适合频繁IO操作