zoukankan      html  css  js  c++  java
  • 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)空闲列表:对于堆内存比较零散的情况下,可用的堆内存保存在空闲列表里面。

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

  • 相关阅读:
    如何在 Linux 上用 IP转发使内部网络连接到互联网
    python 基础-文件读写'r' 和 'rb'区别
    处理HTTP状态码
    国内可用免费语料库(已经整理过,凡没有标注不可用的链接均可用)
    java读取大文件
    struts.properties的参数描述
    ResourceBundle使用
    linux定时任务的设置
    杂记
    JAVA动态加载JAR包的实现
  • 原文地址:https://www.cnblogs.com/guoyu1/p/11995712.html
Copyright © 2011-2022 走看看