一步步深入Java底层原理(四)
来源:互联网 发布:淘宝大促时间表2016 编辑:程序博客网 时间:2024/06/03 13:26
Java对象的创建:
在创建对象时通常只是一个new关键字,但是Java虚拟机首先会检查参数是否能在常量池中定位到一个类的符号引用,并检查这个类是否已经被加载,解析和初始化过,如果没有,那么必须先执行类的加载。
类的加载、连接、初始化三个步骤:
1.类的加载将类的Class文件读入内存中,并为之创建一个java.lang.Class对象。
2.类的连接:
连接阶段负责将类的二进制数据合并到JRE中。
3.类的初始化
类的初始化时机:
(1)创建类的实例:new操作符、反射创建实例、通过反序列化;
(2)调用某个类的静态方法;
(3)访问某个类的静态属性(final属性除外)。
1.类的加载将类的Class文件读入内存中,并为之创建一个java.lang.Class对象。
2.类的连接:
连接阶段负责将类的二进制数据合并到JRE中。
3.类的初始化
类的初始化时机:
(1)创建类的实例:new操作符、反射创建实例、通过反序列化;
(2)调用某个类的静态方法;
(3)访问某个类的静态属性(final属性除外)。
在类加载过后,接下来将会为对象分配内存,分配内存一般有两种方法:一种是“指针碰撞”,当Java堆是绝对规整的,就是所有可用的内存放在一边,所有已用的内存放在一边,中间又一个指针来分隔,那么分配内存时便会将指针移动这个对象的大小个距离,如Seria、ParNew等带Compact过程的收集器时随时用指针碰撞;另一种是“空闲列表”,当Java堆不是规整的时,就是可用得内存和已用的混在一起,这时,虚拟机就得维护一个列表,,记录哪些是可用的,分配时找到可用的分配给对象,如CMS。
由于创建对象是相对频繁的,所以要考虑线程安全问题这里有两种方法:(1)对分配内存的空间做同步处理(2)把内存分配的动作按照线程划分在不同的空间进行。
这还没完,接下来,虚拟机要对对象进行必要的设置,如确定它是哪个类的实例,如何找到类的元数据,对象的哈希码等,这些信息存放在对象头中。
阅读全文
1 0
- 一步步深入Java底层原理(四)
- 一步步深入Java底层原理(一)
- 一步步深入Java底层原理(二)
- 一步步深入Java底层原理(三)
- 平衡球游戏开发教程(四)--深入了解WP7游戏底层原理
- WP 平衡球游戏开发教程(四) -深入了解windowsphone7 游戏底层原理
- 深入理解Java并发机制(3)--synchronized关键字底层原理
- 深入理解 Tomcat(三)Tomcat 底层实现原理
- Java Hashmap底层原理
- Java IO底层原理
- Java IO底层原理
- PhoneGap学习笔记四:PhoneGap底层原理(下)
- 深入理解Lock的底层实现原理
- 深入java虚拟机(四)
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- (郭霖) Android LayoutInflater原理分析,带你一步步深入了解View(一)
- java集合类底层原理
- JAVA HashMap底层实现原理
- Jupyter notebook中Python2和Python3共存
- Angular 指令(Directive)属性型指令
- 每天一个linux命令(26):用SecureCRT来上传和下载文件
- android如何用okhttp进行https的交互
- NYOJ水池数目
- 一步步深入Java底层原理(四)
- nginx出现413 request entity too large错误解决方法
- Android Activity生命周期
- 盒子模型
- spfa+vector
- hadoop2.7.3源码解析之hadoop RPC使用
- 每天一个linux命令(27):linux chmod命令
- POJ 1905 Expanding Rods(二分搜索)
- Codeforces Educational Codeforces Round 27