标签:变量 冲突 溢出 指针 数据 数据区 符号 otp java虚拟机
java内存区域和内存溢出异常
划分内存:
java 虚拟机在执行 java 程序时将内存划分为 5 个部分。线程私有的有成员计数器、虚拟机栈、本地方法栈,线程共享的有方法区、堆。
程序计数器储存字节码行号,此区域未规定任何内存溢出异常。虚拟机栈储存栈帧,用于java 方法的运行。本地方法栈用于 native 方法运行。方法区用于存储已加载类的信息、常量、静态变量等。堆用于存储 java 对象。
运行时常量池是方法区的一部分,用于储存编译期生成的字面值和符号引用。
直接内存不是虚拟机数据区的一部分,通过 NIO 类可分配这些内存。
创建对象:
虚拟机如何创建一个对象?首先加载类,然后为对象分配内存,根据堆内存是否整齐采用指针碰撞或空闲列表方式。可以使用TLAB方式避免分配内存的线程间冲突。然后将内存赋值为0。然后设置对象头。最后执行init方法。
hotpot 虚拟机中,对象内存分为对象头、实例数据和对齐填充。对象头第一部分是 “Mark Word”,第二部分是类型指针。实例数据就是各类型字段的值。对齐填充起占位符作用。
访问对象:
访问对象有两种方式:句柄方式和直接指针方式。hotpot 虚拟机采用直接指针方式。
异常名称列举:
OutOfMemoryError StackOverFlowError
标签:变量 冲突 溢出 指针 数据 数据区 符号 otp java虚拟机
原文地址:https://www.cnblogs.com/mexding/p/9572134.html