• JVM对象创建


    1、JVM对象创建:java程序运行过程中,无时无刻都有对象被创建出来。在语言层面上就是new关键字。

    2、JVM对象创建过程:

    (1)JVM遇到一条new指令后,首先会去常量池中,检查这个指令的参数是否有一个类的符号引用,并检查这个符号引用代表的类是否被加载、解析、初始化过。如果没有就执行类加载过程。

    (2)类加载检查通过后,JVM为新生对象分配内存。其中内存的大小在类加载完后即可完全确定,而分配内存空间其实就是在JVM堆中为对象划分出一块确定大小的内存。、

    (3)内存分配完成后,虚拟机就将分配到的内存空间全都初始化为0值(不包括对象头)。

    (4)虚拟机对对象进行必要的设置,设置对象头。如:对象是哪个类的实例、如何找到元数据信息、对象的哈希码、对象的GC分代年龄等信息。将这些设置信息存放在对象头中。

    (5)在虚拟机层面此时已经完成了,但对于程序还应该执行<init>初始化操作。此时对象就创建完成了。

    简化记忆过程:

    (1)检查类是否加载,没加载就加载。

    (2)分配内存

    (3)初始化内存空间

    (4)设置对象头

    (5)完成创建

    3、内存分配方式主要分为:指针碰撞、空闲列表

    (1)指针碰撞:就是挪动指针,给对象分配一段完整的内存区域,这种方式针对的是堆内存比较完整的情况下。

    (2)空闲列表:对于堆内存比较零散的情况下,可用的堆内存保存在空闲列表里面。

     选择哪种分配方式,主要是由垃圾收集器的回收机制,是否带有压缩整理功能决定。

  • 相关阅读:
    装配Bean
    百练
    东软小选拔
    俄罗斯乘法
    POJ
    ACdream
    javascript 链式作用域
    ie6/7 bug
    onreadystatechange 和 status
    瀑布流 <<转>>
  • 原文地址:https://www.cnblogs.com/guoyu1/p/11995712.html
Copyright © 2020-2023  润新知