java内存区域分析及java对象的创建
java虚拟机在执行java程序的过程中会将它管理的内存区域加分为若干个的不同的数据区域.
主要包括以下几个运行时数据区域,这里就只介绍经常会用到的
1:java虚拟机栈:我们常说的堆栈,栈就是指的java虚拟机栈
作用:java方法执行的内存模型。每个方法在执行的时候会创建一个栈帧,这个栈帧保存了局部变量表(基本类型,对象引用),操作数栈,动态链接等
一个方法的开始与结束的过程,就是栈帧进出java虚拟机栈的过程
2:java堆:存放对象实例,是内存最大的一块,垃圾收集器主要管理放入区域
3:方法区:存储了加载的类信息(如类名,访问修饰符,字段描述,方法描述),常量(常量存储在运行时常量池里,但运行时常量池是方法区的一部分,这里常量池也包括存储通过String,intern()本地动态生成的常量)
4:了解了java虚拟机的内存区域划分以后,在讲讲对象是如何创建的
当java虚拟机运行程序时,碰到new指令(假设这个引用代表的类已经被加载、解析、初始化,就像用橡皮泥模板化捏大象,首先你要有大熊的模板),将会为这个对象分配内存,内存大小在类加载完成以后即可确定(有了大象的模板以后,你就大概知道需要多少橡皮泥了),为java分配内存的方法有两种:1):如果内存规整的话,可以采用指针碰撞 2)反之,空闲列表,感觉这里用橡皮泥的列子好像不合适,如果一种颜色的橡皮泥一直分配去做大象就是指针碰撞,如果随意找颜色,如果那块橡皮泥不够用来做大象,就换一种,直到找到符合能做大象颜色的橡皮泥就是空闲列表。分配完内存以后,就对内存进行初始化0,接着对对象进行初始化(主要是对对象头的设置),但是现在的初始化只是针对java虚拟机来说是完成了的,对java程序来说还未完成,最后一步,按照程序员的意思对对象进行初始化,我的理解是按照程序员的意思调用构造器对字段进行初始化,所以我到这里也明白了jaba编程思想里说的所有的字段会在方法(包括构造器之前先初始化为默认的初值)
5:java对象在堆内存又可以分为三块区域,1是对象头,(保存哈希码,gc年龄代,锁状态标识买现成持有锁,偏向线程ID等等,还有类型指针,确定是哪个对象的实列,但并不是每个对象都有) 2是实列数据, 3是对象填充,因为对象必须是8字节的整数倍,对象头是8字节的整数倍,所以当对象实列数据部分没有对其时,就需要通过对齐来填充
6:对象的访问定位:两种方式:1)使用句柄 2)使用直接指针、
这张图直接明确:
第二种方式比第一种方式节省了一次指针定位的开销,所以速度更快
总结知识点辛苦,转载请说明出处。如有讲解不当的地方,请多多指教
java内存区域分析及java对象的创建的更多相关文章
- 【java基础 7】java内存区域分析及常见异常
本篇博客,主要是读书笔记总结,还有就是结合培训分享的总结,没有太多的技术含量! java 的自动内存管理机制,使得程序员不用为每一个new惭怍的对象写配对的delete/ free代码(回想起C++的 ...
- Java内存区域分析
程序计数器 指令运行的指示器. 每一个线程都有独立的程序计数器,互无影响,我们称这类区域为线程私有的内存. 运行Java方法,计数器记录的是正在运行的虚拟机字节码指令地址;假设运行的是native方法 ...
- 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象
一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE? Java技术体系包括: · Java程序设计语言: · 各种硬件平台上的 ...
- Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- 可能是把Java内存区域讲的最清楚的一篇文章
写在前面(常见面试题) 下面是面试官可能在“Java内存区域”知识点问你的问题,快拿出小本本记下来! 基本问题: 介绍下Java内存区域(运行时数据区). Java对象的创建过程(五步,建议能默写出来 ...
- JVM笔记(一) Java内存区域
Java 内存区域 总概 java虚拟机在执行java程序的过程中,会把它管理的内存划分为几个不同的数据区域.每当运行一个java程序时,就会启动一个虚拟机. 具体的区域如图所示: 同时,方法区 与 ...
- java虚拟(一)--java内存区域和常量池概念
一.java运行时数据区 也可以称为java内存区域,和java内存模型不是一回事,不要弄混,这里基于jdk1.8之前 1.1.方法区 线程共享,类装载过程中产生的java.lang.Class对象保 ...
- Java内存区域(运行时数据区域)和内存模型(JMM)
Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分. 而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之 ...
- JVM Java 内存区域透彻分析(转)
出处: Java 内存区域透彻分析 Java8内存模型—永久代(PermGen)和元空间(Metaspace) 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这 ...
随机推荐
- AC自动机总结及板子(不带指针)
蒟蒻最近想学个AC自动机简直被网上的板子搞疯了,随便点开一个都是带指针的,然而平时用到指针的时候并不多,看到这些代码也完全是看不懂的状态.只好在大概理解后自己脑补(yy)了一下AC自动机的代码,居然还 ...
- 30. leetcode 121. Best Time to Buy and Sell Stock
121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...
- Apache崩掉:为进程配置合适的线程数
放假以来,服务器Apache二次崩掉了,不能再拖了,找bug解决: 崩掉的具体状况是,服务器出现弹框显示:Apache停止工作: 顺手关掉这个可恶的小弹框,世界就清静了,服务器正常运行: 具体问题: ...
- 【机器学习笔记之三】CART 分类与回归树
本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于 ...
- HTML style基础2
2017.0807 晴 style 样式实例 背景颜色 font-family: '.PingFang SC';">背景颜色 标题<h2 style=" font-f ...
- java 将一个ip地址分割成一个数组
这个问题以前真还没注意,好像记得分割过规律的字符串,但是不是像IP这样是以"."为分割规律字符,而是的. 今天用到又用到个,代码写好了也没测试,直接上传服务器,但是就是会报错,之后 ...
- RGB和HSV颜色空间
转载:http://blog.csdn.net/carson2005/article/details/6243892 RGB颜色空间: RGB(red,green,blue)颜色空间最常用的用途就是显 ...
- Oracle 外键约束
本文讨论一下Oracle中的外键约束问题,以及和DB2中的小不同. 首先创建测试环境. -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, valu ...
- thymeleaf文本处理
文本处理 显示文本是网页开发的最基本需求,另外,国际化的程序当今也是相当必要的.这些问题,thymeleaf都可以轻松解决. th:text标签属性 这个属性的基本作用就是显示文本,它的值可以既可以从 ...
- Python二分法查找及变种分析
基于Python3 普通二分法查找目标值的index 二分法查找的思路很简单,先确定好列表nums的一头start一尾end,中间值middle根据头尾数值之和用地板除法除以2,即(start + e ...