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对象的创建的更多相关文章

  1. 【java基础 7】java内存区域分析及常见异常

    本篇博客,主要是读书笔记总结,还有就是结合培训分享的总结,没有太多的技术含量! java 的自动内存管理机制,使得程序员不用为每一个new惭怍的对象写配对的delete/ free代码(回想起C++的 ...

  2. Java内存区域分析

    程序计数器 指令运行的指示器. 每一个线程都有独立的程序计数器,互无影响,我们称这类区域为线程私有的内存. 运行Java方法,计数器记录的是正在运行的虚拟机字节码指令地址;假设运行的是native方法 ...

  3. 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象

    一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE?     Java技术体系包括:         · Java程序设计语言:         · 各种硬件平台上的 ...

  4. Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  5. 可能是把Java内存区域讲的最清楚的一篇文章

    写在前面(常见面试题) 下面是面试官可能在“Java内存区域”知识点问你的问题,快拿出小本本记下来! 基本问题: 介绍下Java内存区域(运行时数据区). Java对象的创建过程(五步,建议能默写出来 ...

  6. JVM笔记(一) Java内存区域

    Java 内存区域 总概 java虚拟机在执行java程序的过程中,会把它管理的内存划分为几个不同的数据区域.每当运行一个java程序时,就会启动一个虚拟机. 具体的区域如图所示: 同时,方法区 与 ...

  7. java虚拟(一)--java内存区域和常量池概念

    一.java运行时数据区 也可以称为java内存区域,和java内存模型不是一回事,不要弄混,这里基于jdk1.8之前 1.1.方法区 线程共享,类装载过程中产生的java.lang.Class对象保 ...

  8. Java内存区域(运行时数据区域)和内存模型(JMM)

    Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分. 而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之 ...

  9. JVM Java 内存区域透彻分析(转)

    出处:  Java 内存区域透彻分析  Java8内存模型—永久代(PermGen)和元空间(Metaspace) 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这 ...

随机推荐

  1. PHP将数据导出Excel表中(投机型)

    1.简介 如何利用最简单粗糙暴力的方法将数据写入Excel文件中呢? 因为ms word和excel的文档都支持html文本格式,因此我们可以基于这个原理采用html文本格式进行数据的输出. 在htm ...

  2. JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

    前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...

  3. 亚马逊AWS EC2云实例AMI安装LNMP环境(2)——PHP5.6

    概括:这里选择亚马逊EC2的Linux AMI实例,该Linux服务器是亚马逊预配置的Linux环境,内置多个YUM源,属于亚马逊首推的稳定Linux服务器.默认登录用户名为ec2-user,执行ro ...

  4. python-插入排序

    所谓插入排序,就是检查第i个数字,若比它的左边的数字小,则进行交换,一直持续这个动作,直到它的左边的数字比它还要小,则停止. #coding:utf-8def insertion_sort(nums) ...

  5. python关于list的三个内置函数filter(), map(), reduce()

    ''' Python --version :Python 2.7.11 Quote : https://docs.python.org/2/tutorial/datastructures.html#m ...

  6. Oracle RAC 实验环境RMAN备份v1.01

    Oracle RAC 实验环境RMAN备份v1.01 环境:RHEL 6.5 + Oracle GI 11.2.0.4 + RAC 11.2.0.4 (2 nodes) 需求:制定RAMN备份策略 版 ...

  7. 用Python处理实验数据

    开篇语 近来忙于考试以及应付专业课,基本很少写简书了.昨晚攻坚了三个学生工作的任务(妈妈的吻.好久没有这么疯狂工作了.还是很爽的哦!) 今天难得清静,虽然上课还是沉浸于完成任务的放纵式玩手机中,但是也 ...

  8. X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp

     0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...

  9. mybatis 详解(八)------ 懒加载

    本章我们讲如何通过懒加载来提高mybatis的查询效率. 本章所有代码:http://pan.baidu.com/s/1o8p2Drs 密码:trd6 1.需求:查询订单信息,有时候需要关联查出用户信 ...

  10. asp.net mvc项目远程发布到windows server服务器

    文章参考 自学MVC看这里——全网最全ASP.NET MVC 教程汇总 图文详解远程部署ASP.NET MVC 5项目 配置Web部署处理程序 设备及环境 一台装有windows server 201 ...