java基础
**
Java内存
**
Java内存是我们对Java虚拟机(JVM)研究的开始,也是前期的重难点。
此部分及之后的几篇博客可以参考《深入理解Java虚拟机》一书,这里简单介绍。
Java运行时数据区——五大区块

1、Java虚拟机栈
Java方法执行的内存模型
方法执行的时候同时创建一个栈帧
也就是说这里是用来存储局部变量、方法的地方
2、本地方法栈
Native方法储存位置
3、程序计数器
程序计数器是用来对当前程序计数,方便程序方法代码间的跳转
4、Java堆
内存最大的区域、也是垃圾收集器管理的主要区域,俗称"GC堆"。
堆空间本是全部对象及数组的实例,但不绝对(栈上分配、标量替换)
5、方法区
存储一已加载的类信息、常量、静态变量
运行时常量池(方法区的一部分):编译器生成的各种字面量(常量 final、字符串)和符号引用。
符号引用:
1>类和接口全限定名
2>字段的名称和描述符
3>方法的名称和描述符
注意重点
123是线程私有空间,45是线程共享空间

还有一个不是运行时数据区的为直接内存
存储
栈区存储
栈区reference中存储指向对象的引用(并未定义引用如何定位)
一般的两种定位:
1>句柄访问

2>直接地址
内存溢出
OutOfMemoryError
heap(堆):
1>Memory Leak内存泄露
2>Memory Overflow内存溢出
stack(栈):
1>StackOverflowError 栈区内存不够申请的空间(单线程常见)
1>OutOfMemoryError 虚拟机扩展无法申请到足够的空间
这里作为了解,并不要求特别深入。
谢谢观看!!!