码迷,mamicode.com
首页 > 编程语言 > 详细

书籍摘要-深入理解java虚拟机

时间:2018-09-02 02:13:29      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:变量   冲突   溢出   指针   数据   数据区   符号   otp   java虚拟机   

java内存区域和内存溢出异常

划分内存:
java 虚拟机在执行 java 程序时将内存划分为 5 个部分。线程私有的有成员计数器、虚拟机栈、本地方法栈,线程共享的有方法区、堆。

程序计数器储存字节码行号,此区域未规定任何内存溢出异常。虚拟机栈储存栈帧,用于java 方法的运行。本地方法栈用于 native 方法运行。方法区用于存储已加载类的信息、常量、静态变量等。堆用于存储 java 对象。

运行时常量池是方法区的一部分,用于储存编译期生成的字面值和符号引用。
直接内存不是虚拟机数据区的一部分,通过 NIO 类可分配这些内存。

创建对象:
虚拟机如何创建一个对象?首先加载类,然后为对象分配内存,根据堆内存是否整齐采用指针碰撞或空闲列表方式。可以使用TLAB方式避免分配内存的线程间冲突。然后将内存赋值为0。然后设置对象头。最后执行init方法。

hotpot 虚拟机中,对象内存分为对象头、实例数据和对齐填充。对象头第一部分是 “Mark Word”,第二部分是类型指针。实例数据就是各类型字段的值。对齐填充起占位符作用。

访问对象:
访问对象有两种方式:句柄方式和直接指针方式。hotpot 虚拟机采用直接指针方式。

异常名称列举:
OutOfMemoryError StackOverFlowError

书籍摘要-深入理解java虚拟机

标签:变量   冲突   溢出   指针   数据   数据区   符号   otp   java虚拟机   

原文地址:https://www.cnblogs.com/mexding/p/9572134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!