JVM之对象分配探秘
分配内存 在类加载检查通过后,虚拟机将为新生对象分配内存,对象所需内存大小再类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。指针碰撞 假设Java堆中内存时绝对规整的,所有被使用过的内存都被放在一...
分配内存 在类加载检查通过后,虚拟机将为新生对象分配内存,对象所需内存大小再类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。指针碰撞 假设Java堆中内存时绝对规整的,所有被使用过的内存都被放在一...
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作"非堆(Non-Heap)",目的是与Java堆区分开来。栈、堆、方法区交互关...
核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但是在逻辑上它应该是...
字节码的旅途运行时数据区 JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有个字的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖用户线程的启动和结束而建立和销毁。上图的运行时数据区就是本文的重点了。程序计数器 &n...
间隙锁 当我们用范围条件而不是相等条件检索数据并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁,对于键值在条件范围内但并不存在的记录,叫做"间隙"。InnoDB也会对这个"间隙"加锁,这种锁机制就是所谓的"间隙锁"。危害 如果Qu...