Java对象在Java虚拟机的创建过程
创建
1、相应类加载检查过程
Java程序中的“new”操作会转换为Class文件中方法的“new”字节码指令。
JVM(本文特指HotSpot)遇到new指令时,先检查指令参数是否能在常量池中定位到一个类的符号引用:
A)、如果能定位到,检查这个符号引用代表的类是否已被加载、解析和初始化过;
B)、如果不能定位到,或没有检查到,就先执行相应的类加载过程;
2.分配内存
分配内存有两种方法。内存大小在类加载时候已被确定。
a)指针碰撞:内存分配事规整的,在内存中,一边是分配过的,一边是没有分配过的,中间是区分它们的指针,只需要这个指针向空闲空间那边移动一段和对象大小相等的距离即可
b)空闲列表:内存分配是不规整的,空闲片段和已分配片段交织一起,这是后,虚拟机需要维护一张空闲列表,每次对内存的操作就是对表的修改操作。
3.线程安全问题
对象分配内存在虚拟机是很常见的操作,所以在并发的情况下有可能出现 “线程A给某个对象分配内存移动指针,还没来的及移动指针,线程B就使用了该指针” 的问题。处理方法也是有两种。
a)同步处理:CAS加失败重试的方式,这样会影响到性能。
b)直接为每个线程分配一段固定大小的缓存。
4.初始化
分配完内存之后,虚拟机会把分配到的内存空间都会初始化为零值,保证了实例字段不被初始化就能使用,只是实例字段都是零值。
5.执行对象实例方法
对象执行了方法,按照程序员的想法初始化之后,一个真正可用的对象就产生了。
通常,经过上面5步对象才完全new出来。
Java对象在Java虚拟机的创建过程相关推荐
- Redis存储java对象或者java对象数组
1. 先将java对象或者java对象数组用ObjectMapper转换为json对象 2. 再用jedis对象的put方法,将数据写入Redis数据库
- java怎么限制一个对象的内存_java对象的内存布局及创建过程
一.对象的内存布局 对象的内存结构又可以被分为:对象头,实例数据,对象填充 对象头:对象头结构在32位JVM与64位JVM中的实现细节是不同的 32bit: 64bit: 实例数据:对象真正存储的有效 ...
- JAVA对象转为Java String的几种常用方法
在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object#toString(),(String)要转换的对象,St ...
- java 对象protected,Java对象类protected void finalize throws Throwable方法示例
对象类保护的voidfinalize() throws Throwable此方法在java.lang.Object.finalize()中可用. 当不再有引用保留时,垃圾回收器将调用此方法. 此方法对 ...
- java对象序列化java.io.Serializable 接口实践
java.io.Serializable 接口没有任何方法和字段,仅仅表示实现它的类的对象可以被序列化.实现了这个接口的所有类及其子类都可以对象序列化. 序列化前,虚拟机要清楚每个对象的结构,所以序列 ...
- php序列化 java对象,在Java中反序列化一个序列化的php对象
Does anyone know if it is possible, actually if it has been done, to serialize an object in php and ...
- 五种方法创建 Java 对象,你知道几种呢?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 网络 五种方法创建java对象 作为Java开 ...
- java创建一个人函数类_Java对象和类–学习如何创建和实现
对象和类被认为是任何基于OOPs的语言的精华.由于Java是最常用的面向对象编程语言之一,因此非常有必要牢记这些概念.因此,我为您带来这篇文章,在这里我将给您一个完整的Java对 对象和类被认为是任何 ...
- 源码分析:Java对象的内存分配
Java对象的分配,根据其过程,将其分为快速分配和慢速分配两种形式,其中快速分配使用无锁的指针碰撞技术在新生代的Eden区上进行分配,而慢速分配根据堆的实现方式.GC的实现方式.代的实现方式不同而具有 ...
最新文章
- 20190405模拟测试
- 可观测性与原生云监控
- SpringBoot2.1.9 多数据源Mybatis—JDBC配置
- 第一站---大连---看海之旅
- c语言程序做成可执行文件,windows环境下C程序生成可执行文件
- python 3.5 format_python 3.5学习笔记(第四章)
- 求两个等长升序序列的中位数
- 第03章-二进制、八进制、十进制、十六进制之间的转换-深博-专题视频课程
- 300篇原创文背后的故事
- java 消除png 锯齿_java Graphics2d消除锯齿,使字体平滑显示
- 牛客小白月赛1 I	あなたの蛙が帰っています 【卡特兰数】
- C语言学生成绩信息管理系统课程设计报告
- 微信公众号小程序如何做流媒体视频直播?
- moonseo小夜:作为一个seo伴随着技术的学习与提升
- 一个简单的百度换肤效果
- 10个优质免费PPT模板下载网站推荐
- 国密算法的EKEY的使用
- svn中项目管理中ec_SVN的项目管理
- Windows定时开启或关闭声音音量
- 保研华东师范计算机专硕,华东师范大学2020年硕士生推免生缺口很大,考研的学子机会来了...
热门文章
- 针对某游戏保护DebugPort清零的一次逆向
- BOOST内存管理(二) --- boost::pool
- Redis 缓存常见问题:缓存一致性的解决方案
- C++Template 模版的本质
- [七]RabbitMQ-客户端源码之AMQPImpl+Method
- shell编程之随机数和嵌套循环
- 音视频技术开发周刊 | 224
- LiveVideoStackCon 2018推出学生优惠票
- LiveVideoStackCon讲师热身分享 ( 五 ) —— 建立中国自主视频技术生态
- LeetCode——BFS