摘要: 目的:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容;第二,工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。 1、Java堆溢出 Java堆用于存储对象实例,只要不断地创建对 阅读全文
posted @ 2018-10-21 16:40 _sanjun 阅读(650) 评论(0) 推荐(0) 编辑
摘要: 基于使用优先的原则,以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程。 1、对象的创建 划分可用空间 在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(主要讨论的对象限于普 阅读全文
posted @ 2018-10-21 13:19 _sanjun 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 注:有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,互不影响,独立存储,称为“线程私有” 阅读全文
posted @ 2018-10-21 10:41 _sanjun 阅读(112) 评论(0) 推荐(0) 编辑