java类加载过程:

在我们代码中,一般就一个new的方法,就能够创建一个java的对象类,但在java虚拟机中

1:首先,我们需要判断该类是否已经在方法区中的常量池中有一个类的符号的引用存在,如果该类的符号的引用不存在,在调用classLoader方法进行类加载

2:类加载的顺序中,只进行一次静态代码块的实现。

3:调用classLoader的过程为,先在堆中划分出一片内存,存储类的对象(大小在类加载后,根据其内部的变量类型与引用等)能够知道其内存大小,分配方式根据GC的机制有两种

A:空闲列表法: 如果GC为标记清楚法,那么虚拟机需要维护一个                         列表,记录内存中的使用情况,然后再分配类

B:指针碰撞法:直接找一个空闲区域,然后指针移动类大小的内存。

4:内存分配完成后,虚拟机将分配到的内存空间都初始化为零,这一步操作保证了对象中成员对象的初始化,同时保证了对象如果不赋初值也能够new出来。

5:设置对象头(对象头中存储了两部分信息,一部分存储对象自身运行时数据,如HashCode,GC分代年龄,锁状态标志等。对象头的另外一部分存储着类型指针,指向对象类元数据,虚拟机通过这部分信息确定对象是哪一个类的实例。)如果对象为数组,对象头中还应该记录数组的长度。因为不同对象可以通过类的元数据确定对象的大小,但是通过数组的元数据无法得知数组的长度。

对象在内存中的存储:

对象在内存中存储的布局可分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(padding)。

对象头

第一部分:mark word

第二部分:类型指针,即对象指向它的类元数据的指针。

如果对象为Java数组,还需要记录数组长度。因为普通对象可以从元数据信息(具体的类信息)确定对象大小,但是数组需要多一个保存长度的数据。

实例数据

对象真正存储的数据,包括父类继承的数据和子类中自定义的数据。

HotSpot虚拟机分配策略:相同宽度的字段总被分配到一起。

对齐填充

对齐填充并不是必须,仅仅是占位符的作用。

HotSpot自动内存管理要求对象的起始地址必须是8字节的整数倍,而对象头都正好是一倍或两倍,因此,当实例数据部分没有对齐时,需要对齐填充来补全。

6:进行init方法。

java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java io流拒绝访问_JAVA IO流 - 张宏良的个人空间 - OSCHINA - 中文开源技术交流社区...

    IO流 一.File类的使用 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身 ...

  2. java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...

    什么是数组: 程序 = 算法+数据结构 算法:解决问题的步骤,流程(顺序,分支,循环) 数据结构:将数据按照某种特定的结构来保存 数怎么存 设计良好的,合理的数据结构可以导致好的算法 数组:就是一种最 ...

  3. java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...

    java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...

  4. java 的“mwq”_java的对象模型 - osc_mwqvsfzo的个人空间 - OSCHINA - 中文开源技术交流社区...

    java中的对象在内存中,究竟是怎样一种存在? 这篇随笔,我们就来一探究竟.可能不够深入,但是我们把理解到位,深入到我们需要的程度这样即可. 先来看下jvm的内存模型: 程序计数器 虚拟机栈和本地方法 ...

  5. java动态变量名反射_Java动态性—反射 - Eclipse666的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.什么是动态语言? 程序运行时,可以改变程序的结构或者变量类型:如Python,javaScript function(){ var s="var a=3;var b=4;" e ...

  6. java组件介绍_Java组件介绍 - osc_wws45aot的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.String string对象的不变性.被final关键字修饰. 使用charat方法替代startwith/endwith方法(提高性能) 使用buffer(方法同步,性能较差)和builder ...

  7. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...

  8. java io 读取配置文件_java读取配置文件 - tomzhao2008的个人空间 - OSCHINA - 中文开源技术交流社区...

    对于要打包成jar文件来运行来说,用file是会有问题的,下面的程序可以解决这样的问题 1.ReadPropsUtil /** * */ package readproperties; import ...

  9. java请模拟出双重定时器_Java多线程基础 - osc_czmaebyq的个人空间 - OSCHINA - 中文开源技术交流社区...

    ( 1 ) 传统使用类Thread和接口Runnable实现 1. 在Thread子类覆盖的run方法中编写运行代码 方式一 newThread(){ @Overridepublic voidrun( ...

最新文章

  1. ThinkCMF 5.1.0 发布:支持 swoole、协议变更为 MIT
  2. 安装教程_Typora+Pandoc导出word
  3. CSDN粉丝解答:六月份第一期精选——互联网笔试编程解决、简单bug处理、编程系统设计等
  4. 【ABAP】Smartforms无法打印特殊字符问题处理方案
  5. python调用c优缺点_Python调用C模块以及性能分析
  6. 【广告技术】如何科学地划分用户群体?在聚类中考虑用户特征和社会关系
  7. 选择的按钮:将ToggleButtons用作单选按钮
  8. IK分词器(elasticsearch插件)
  9. python编码规范简单总结
  10. 使用Red Hat OS为Amazon EC2实例安装SQL Server Linux
  11. android笔记--与服务器交互更改简历状态
  12. linux之rsync远程同步文件
  13. 【汇编语言与计算机系统结构笔记08】如何实现循环(Loops),gcc历史上经历了多种转换模式(微体系结构角度解释),Switch语句,跳转表
  14. delphi利用bing翻译API做的多国语言翻译软件
  15. mysql coreseek_关于mysql中文全文检索Sphinx之coreseek
  16. 内网穿透工具的原理与开发实战
  17. JDY-24M主机使用手册
  18. windows的dos(cmd)下复制文件和文件夹
  19. canvas_requestAnimationFrame帧率显示fps
  20. 通过路由器映射 配置 远程访问

热门文章

  1. 工作中99%能用到的git命令
  2. 【未来已来】百度老板李彦宏:人工智能是下一道主菜
  3. [linux 命令笔记] kill
  4. 非文学翻译理论与实践_2019年北京语言大学翻译学专业考研经验分享
  5. 新势力首家 小鹏汽车正式纳入港股通!
  6. 特斯拉将国产Model 3和Model Y后轮驱动版价格上调4752元
  7. 打开非遗文化新呈现方式 三七互娱“非遗广州红”游园会即将开幕
  8. 小米MIX 4支持UWB技术:实现设备间无感定向传输和操控
  9. 小米平板5有望8月发布:骁龙870+120Hz刷新率屏
  10. 盖茨转让18亿美元股票给梅琳达,被传有85后新欢?当事人回应...