JVM简介

一、JVM体系结构图
JVM是运行在操作系统上的,它与计算机硬件没有直接的交互。
JVM简介
JVM主要包括五部分:Java栈、堆、方法区、本地方法栈、程序计数器。

1)方法区:方法区是被所有线程共享的
静态变量+常量+类信息(构造方法+接口定义)+运行时常量池均保存在方法区

2)本地方法栈:加载其他语言的本地方法库,native关键字

3)程序计数器:每个线程都有一个私有的程序计数器,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计

二、栈内存
栈内存主管java程序的运行,在线程创建时创建,在线程结束时释放,不存在垃圾回收,每个线程都有自己私有的一块栈内存。

栈内存存储:8种基本数据类型 + 对象的引用变量 + 实例方法
栈内存遵循 “先进后出,后进先出” 原则

*erError 线程请求的栈深度大于虚拟机所允许的深度

三、堆内存
堆内存线程共享,主要是存放对象实例和数组。

OutOfMemoryError:如果堆中没有内存完成实例分配,并且堆也无法再扩展时,抛出该异常

堆内存逻辑上主要分为三部分:新生区、养老区、永久区

新生区执行minor gc, 养老区执行full gc, full gc后仍无法进行对象保存,则报OutOfMemoryError

永久区存储运行时必须的类信息,被装载在此区域的数据不会进行垃圾回收,关闭JVM才会释放永久区内存

JVM简介

四、堆内存参数调优
JVM简介
JVM简介