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虚拟机的一些最基本的知识,理解了这 ...
随机推荐
- lnk后缀名打开方式
老娘栽了两次!! 前段时间,设计把设计图发给我,竟然是个后缀"exe"的文件,选择打开方式的时候忘记取消下图勾选: 结果懵逼了... 在网上找了个方法: 1.打开电脑"运 ...
- 引水入城[NOI2010 ]
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了 ...
- 【python密码学编程】5.反转加密法
#Reverse Cipher message = 'there can keep a secret,if two of them are dead.' translated = '' i = len ...
- 手动修复IAT
现在我们已经了解了IAT的的工作原理,现在我们来一起学习手动修复IAT,一方面是深入了解运行过程一方面是为了避免遇到有些阻碍自动修复IAT的壳时不知所措. 首先我们用ESP定律找到加了UPX壳后的OE ...
- 推荐——基于python
资料来源: <集体智慧编程>&网络 一.推荐系统 概述 定义 维基百科定义: 推荐系统属于资讯过滤的一种应用. 推荐系统能够将可能受喜好的资讯或实物(例如:电影.电视节目.音乐.书 ...
- MyISAM 和InnoDB 区别
MyISAM 和InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别 为:MyISAM类型不支持事务处理等高级处 ...
- 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...
- 最短路 - floyd算法
floyd算法是多源最短路算法 也就是说,floyd可以一次跑出所以点两两之间的最短路 floyd类似动态规划 如下图: 用橙色表示边权,蓝色表示最短路 求最短路的流程是这样的: 先把点1到其他点的最 ...
- fodera20安装后的配置
最近安装了Fedora 20 64bit,以下是一些优化配置,使之更适合国人使用. 1,安装gnome-tweak-tool设置工具 Fedora 19自带的系统设置工具十分简单,一些重要的地方都不能 ...
- centos 创建用户组及用户
用户及用户组存放文件 1./etc/passwd 其中每一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下: [cpp] view plaincopyprint?在CO ...