第二部分 自动内存管理- java内存区域和内存溢出异常

第2章 java内存区域和内存溢出异常

运行时区域划分:本地方法栈、java虚拟机栈、程序计数器、方法区、堆

 

程序计数器:线程私有,一个程序计数器,用于记录编译后代码执行到哪,cpu之执行一条指令的时候,记录其他指令挂起和恢复位置

java虚拟机栈:线程私有,生命周期跟线程相同,方法被执行的时候,都会创建一个栈,局部执行中间值、中间状态等都会存储,每个方法从被调用到结束,都对应一个入栈、出栈的过程,存有局部变量表,通过变量槽表示,这个区会抛出StackOverflowError(栈深度溢出)异常和OutOfMemoryErrory(栈扩展失败)异常

本地方法栈:和虚拟机栈类似(都是执行字节码),只是该区只是虚拟机使用本地方法的时候才服务,这个区会抛出StackOverflowError(栈深度溢出)异常和OutOfMemoryErrory(栈扩展失败)异常

java堆:最大内存,所有线程共享内存,存放对象实例,是垃圾回收器管理的内存区域,被实现可以固定大小,也可以动态扩展,如果内存用完再创建或者扩展时,会抛出OutOfMemoryErrory(扩展失败)

方法区:各线程共享区域,用于存放类型信息、常量、静态变量、即时编译后的代码缓存等数据,

  运行时变量池是方法区的一部分,OutOfMemoryErrory(扩展失败)

    HotSpot虚拟机对象探索

    对象创建:当虚拟机遇到new字节码时,先去变量池中定位到一个符号引用,并且这个符号引用代表类是否被加载、解析、初始化,如果没有那必须要执行类加载,分配内存是从java堆中分配,分配方式分为:指针碰撞、空闲列表

    对象访问方式:句柄访问、直接指针访问

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容