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语言生存分析原理与晚期肺癌患者分析案例|数据分享|附代码数据
原文链接:http://tecdat.cn/?p=10278 最近我们被客户要求撰写关于生存分析的研究报告,包括一些图形和统计输出. 生存分析(也称为工程中的可靠性分析)的目标是在协变量和事件时间之间 ...
- 解题报告:Codeforces 279C Ladder
Codeforces 279C Ladder 本题与tbw这篇博客上的题有相似思路.tbw的本来我还不会,抄了题解才过,这道题好歹自己磕半天磕出来了.到tbw做那道题我突然想明白了,再一想诶跟这里不是 ...
- nginx配置文件过大导致起不来
更改src/core/ngx_conf_file.c,默认只有4k,将下面值改大重新编译
- 简单生成excel文件
import os import xlwt def save_to_excel(check_date, data): book = xlwt.Workbook(encoding='utf-8', st ...
- 自定义jar包供ERP使用
功能要求:需要在ERP中调用其他web服务或者自身web服务(比如跨账套过账等) 1.编写java程序,并将程序打包成jar包 import org.apache.http.HttpEntity; i ...
- HDLbits——Exams/2014 q4b
题目要求 使用verilog描述如图所示得移位寄存器: Write a top-level Verilog module (named top_module) for the shift regist ...
- Linux详解
什么是操作系统?1.操作系统:(Operating System,OS)是计算机系统中的一个系统软件,它们管理和控制计算机系统中的硬件及软件资源,为用户提供一个功能强大.使用方便的和可扩展的工作环境. ...
- mysql主从备份双机热备实现方法
1.环境准备 主服务器(master):192.168.1.1 从服务器(slave):192.168.1.2 要求主从服务器mysql版本相同且大于3.23 2.主服务器 2.1创建同步用户 cre ...
- JavaScript垃圾回收机制的了解
对于js种的任意长度字符串,对象,数组是没有固定大小的,只有在分配存储时,解释器就会分配内存来存储这些数据.当js的解释器消耗完系统所有可用内存时,就会造成系统崩溃.因此js有着自己的一套垃圾回收机制 ...
- pytorch学习笔记(8)--现有模型的使用和修改
官网网址: https://pytorch.org/vision/0.9/models.html#semantic-segmentation (1).ImageNet train_data = tor ...