一、
1、什么叫做java内存区域
什么是内存?
在计算机硬件中,内存指的是cpu运算时,用于暂时存放cpu运算过程中的数据的区域,主要负责从固存中提取cpu运算需要的数据并将cpu运算结果如要保存到固定存储中则保存的一块断电后其所含有的数据便会消失的存储数据硬件。(个人理解)
那什么叫java内存区域
理解了什么是内存的话,java内存区域也就理解了,即java程序(这里指的java程序是什么意思?肯定是指用java代码写的程序,准确的说是用到java虚拟机的程序,即指打包好的程序也只开发时的程序即只要用到java虚拟机就是java程序)在运行时候的cpu计算产生的数据所存放的区域。(个人理解)
2、内存溢出异常
指某一程序或其程序中的容器所包含的内容超过了属于自己的内存大小造成程序的中断。
二、运行时的数据区域
1、数据区域的概念同java的内存区域
2、数据区域的分类
1、随Java虚拟机的存在而一直存在 |
|
2、随某一程序(用户线程)的存在而存在 |
|
3、分区
线程独占区/ 随某一进程存在而存在 | |
线程共享区域/ 随JVM存在而存在 | |
直接内存 | 1、不是虚拟机运行时数据区域的一部分 2、NIO引用一种基于通道与缓冲区的I/O方式,使用Native函数库直接分配堆外内存,然后通过一个存储在java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作 |
程序计数器 | 当前线程所执行字节码的行号指示器 |
栈:方法执行的线程的 内存模型 | JVM栈1、每个方法执行的时候会JVM创建一个栈帧(stack frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。2、细说局部变量表1、编译期可知的基本数据类型(boolean,byte,char,short,int,float,long,double)和对象引用(对象的地址、对象的句柄、与对象位置相关的信息)2、存储单位是:局部变量槽(slot)--4字节一个除long,double为两个slot组成,其余数据类型均占一个slot3、编译器已知方法的需要在栈帧分配多大(这里多大指的是slot数量)3、StackOverflow-->请求的栈深度大于虚拟机所允许的深度Outofmemoryerror-->栈扩展时无法申请到足够的内存本地方法栈为本地方法服务 |