深入理解JVM学习笔记

Java虚拟机内存区域:

[2.2]运行时数据区域:

1.程序计数器

2.Java虚拟机栈

3.本地方法栈

4.Java堆

5.方法区

6.运行时常量池

7.直接内存

[2.3.1]对象的创建

  在虚拟机中,当程序遇到一条new指令时,首先检查这个指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,必须先执行相应的类加载过程。类加载检查通过后,虚拟机为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,若Java堆中内存是绝对规整的(即所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器),那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,即“指针碰撞”。若不是规整的,则采用“空闲列表”的分配方式。Java堆是否规整由所采用的垃圾收集器是否带有压缩功能决定。使用带Compact过程的收集器时,采用指针碰撞,而使用CMS这种基于Mark-Sweep算法的收集器时,通常采用空闲列表。

posted @ 2023-02-25 17:47  Zzzzzzxz  阅读(39)  评论(0)    收藏  举报