JVM-创建一个对象的详细过程
Person person=new Person();
1.现在栈中申请一个自己的栈空间
2.类加载检查
每当使用new操作符创建一个对象时,类加载器都会从常量池中寻找该对象的符号引用,如果找到,则根据该引用查询该类是否已被加载,否则进行接下来的类加载操作,在此过程中,类所需内存大小也被确定下来
3.分配内存
JVM根据在类加载检查中确定的内存大小,在堆中为类开辟一段空间,分配的方式有指针碰撞、空闲列表两种方式,若JVM的垃圾回收器(GC)使用了标记-整理的算法,即有值的内存往左侧移动,使得内存规整,则采用指针碰撞分配。若GC使用的是标记-清除算法,定期清除堆中无效的内存空间,则使用空闲列表,在堆中寻找一块内存合适的空间分配内存。
JVM使用cas+失败重试的方式保证并发处理时,创建对象的线程安全,cas为乐观锁的一种实现,即不加锁,默认在执行操作时不会发生冲突。若发生了冲突则进行失败重试,直到完成操作为止。 每当线程创建时,首先给线程分配一块自己的内存,分配内存首先在此分配,当线程内的内存空间不足以为对象分配内存时,再采用cas+失败重试的方式分配。
4.初始化零值**
内存空间分配完毕后,对内存中的值都进行初始化,如整型的值为0,引用类型为null,final修饰的变量赋值真正的值
static修饰的赋值为0 这使得类实例可不经初始化直接使用
5.设置对象头
初始化零值过程并不包括初始化对象头,这一步是针对JVM虚拟机的,如
设置对象的hashCode,
GC分代年龄,
锁状态标志:对象的加锁状态分为无锁、偏向锁、轻量级锁、重量级锁几种标记。
持有锁的线程: 持有当前对象锁定的线程ID。
数组长度: 当对象是数组类型的时候会记录数组的长度。
6.init初始化
执行自己定义的初始化对象信息的内容,如**执行构造函数**中的代码
JVM-创建一个对象的详细过程的更多相关文章
- 前端知识体系:JavaScript基础-原型和原型链-new一个对象的详细过程,手动实现一个 new操作符
可以描述 new一个对象的详细过程,手动实现一个 new操作符 1. new 一个对象的详细过程:(原文地址) 首先我们看下new Person输出什么? var Person = function( ...
- nova创建虚拟机的详细过程
Nova 创建虚拟机详细过程
- IDEA创建web项目详细过程
相关软件:Intellij Idea2017.jdk16.tomcat Intellij Idea直接安装(可根据需要选择自己设置的安装目录),jdk使用1.6/1.7/1.8都可以,主要是配置好系统 ...
- JVM系列(三):JVM创建过程解析
上两篇中梳理了整个java启动过程中,jvm大致是如何运行的.即厘清了我们认为的jvm的启动过程.但那里面仅为一些大致的东西,比如参数解析,验证,dll加载等等.把最核心的loadJavaVM()交给 ...
- 【Java基础】Java类的加载和对象创建流程的详细分析
相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 package ...
- java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03| 分类: JAVA | 标签:java jvm 堆内存 虚拟机 |举报|字号 订阅 JVM的内部结构 ...
- jvm学习一:类加载过程详解
(自学笔记,持续更新,欢迎指正) 我们都知道一个java程序运行要经过编译和执行,但是这太概括了,中间还有很多步骤,今天来说说类加载 学完类加载之后,java运行过程就可以分为 编译 > 类 ...
- JVM中对象的回收过程
当我们的程序开启运行之后就,就会在我们的java堆中不断的产生新的对象,而这是需要占用我们的存储空间的,因为创建一个新的对象需要分配对应的内存空间,显然我的内存空间是固定有限的,所以我们需要对没有 ...
- wiki搭建详细过程及步骤
wiki搭建详细过程及步骤 1.查看yum库中jdk的版本 2.选择java-1.8.0安装 3.配置环境变量 4.环境变量生效 5.查看jdk是否安装成功 6.启动mysql服务 7.下载confl ...
- 第一部分:使用iReport制作报表的详细过程(Windows环境下)
提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细 ...
随机推荐
- R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标|附代码数据
全文下载链接:http://tecdat.cn/?p=27515 最*我们被客户要求撰写关于主成分PCA.因子分析.聚类的研究报告,包括一些图形和统计输出. 建立重庆市经济指标发展体系,以重庆市一小时 ...
- RSS经典教程
RSS经典教程 作者:OLD HELPSoldhelps@126.com RSS 指 Really Simple Syndication(真正简易联合) RSS 使您有能力聚合(syndicate)网 ...
- 解决ubuntu18环境matplotlib无法正常显示中文
首先看看系统装了中文字体没?命令: fc-list :lang=zh 如果没安装,需要去下载或者从win复制一份到ubuntu, 在/usr/share/fonts文件夹下创建一个chinese文件夹 ...
- alpine镜像安装sshd以进行远程debug
FROM alpine:latest RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories ...
- K8S实现不同节点POD获取不同IP
背景介绍 某混合云场景k8s,云上和云下的node,需要将同一个域名解析到不同的IP 方案 利用Coredns+2个第三方插件,fwdpolicy,conditional 编译Coredns(在win ...
- C# List GroupBy and Sum
List<PartRequest> partRequests = new List<PartRequest>(); partRequests.Add(new PartReque ...
- Supervisor安装及配置
Supervisor安装 # 安装 easy_install supervisor # 生成默认配置文件 echo_supervisord_conf > /etc/supervisord.con ...
- 2022.11.08 NOIP2022 模拟赛五
「LibreOJ NOIP Round #1」DNA 序列 注意到 \(k=10\),\(|\Sigma|=4\),故本质不同的子串个数只有 \(4^{10}\) 种,可以直接压位存下来. 时间复杂度 ...
- C++实现链式表示多项式加法运算
#include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...
- FMC145-四路16位125Msps AD FMC子卡模块 模拟信号 中频信号采集 信号发出
FMC145-四路16位125Msps AD FMC子卡模块 一.概述 该板卡可实现4路16bit 125Msps AD 功能,是xilinx开发板设计的标准板卡.FMC连接器是一种高速多pin的互连 ...