JVM内存管理基础概念

1.内存的不同形态

物理内存

虚拟内存

2.内存的使用形式

内核空间

用户空间

3.java虚拟机运行时数据划分

PC寄存器:保存当前程序运行时的内存地址.

Java栈:总是和线程关联,每个线程拥有一个java栈,每个栈会有多个栈帧,栈帧与方法关联起来,每运行一个方法就会创建一个栈帧.

java堆:存储java对象的地方

JVM方法区:存储类结构信息,存储信息相对比较稳定,很少会被GC回收器回收.

运行时常量池:Runtime Constant Pool代表运行每个class文件中的常量表(编译期的数字常量,方法或者域引用)

本地方法栈:为Jvm运行Native方法准备的空间,因为很多本地方法都是由C语言实现的,所以又叫做C栈.

4.内存分配策略

4.1操作系统内存分配策略

静态内存分配:程序编译前就确定了每个数据在运行时的存储空间需求.

栈内存分配:也称动态内存分配

堆内存分配:最自由的一种内存分配.

4.2Java内存分配策略(堆用来存储对象,栈用来执行程序)

栈内存分配

创建一个线程,就会创建一个java栈,一个线程的方法的调用和返回对应java栈的压栈和出栈.栈中主要存放一些基本类型的数据和对象句柄(引用).

优点:存取速度比较快,仅次于寄存器,栈数据是共享的.

缺点:栈中的数据大小和生命周期都是确定的,也导致缺乏其灵活性

堆内存分配

java堆是一个运行时数据区,每个实例对应一个堆.堆是由垃圾回收机制来负责的.

优点:堆的优势就是可以动态的分配内存大小

缺点:由于要在运行时分配内存,所以存取速度较慢.

原文地址:https://www.cnblogs.com/fxust/p/7273311.html