Java内存解析 程序的执行过程
Java内存解析
栈、堆、常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,简单讲解Java内存分配方面的知识。
首先我们先来讲解一下内存中的各个区域。
stack(栈)
存放基本类型的数据和对象的引用,即存放变量。
如果存放的是基本类型数据(非静态变量),则直接将变量名和值存入stack中的内存中;
如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。
heap(堆)
存放new产生的数据。
data segment
分为静态域和常量域。
静态域
存放在对象中用static定义的静态成员(即静态变量,同理,如果该静态变量是基本类型则将变量名和值存入静态域,如果是引用类型则指向new出的对象)。
常量池
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法和名称和描述符。
code segment:存放代码。
下面我来举几个简单的小例子来让大家认识一下这几个区域具体存放的内容:
注:例1和例2中大家要注意String类型不是基本数据类型,所以它可以创建对象,并且它的值是放在常量池中的。
例1. 非静态和静态变量的创建
String str = "abc"; static Int a = 10; //创建String类型的变量str;创建Int类型变量a
内存解析:
这里的str是非静态变量所以将其放入到栈中,而静态变量a则需要放入静态域中,对于变量值"abc"和10则都应该放入到常量池当中
例2. 对象的创建
String str=new String("abc"); //创建String类型的对象str
内存解析:
这里的str是String类型的对象,所以放入栈中,而new出来的东西则放入到堆中,对于初始值"abc"则放入到常量池中即可。
例3. 数组的创建
Int s[] = new Int[3];s[0]=3;s[1]=2;s[2]=3;
内存解析:
这里的s[]是一个数组变量,所以放入到栈中,new出来的东西还是放入到堆中,最后的每个元素的值则放入到常量池当中。
程序的执行过程
Java内存解析 程序的执行过程相关推荐
- jav中什么是组织java程序_Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指()。A.Java调试器B.Java剖析工具C.Jav...
Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指().A.Java调试器B.Java剖析工具C.Jav 更多相关问题 "投资收益"账户属于(). A.损 ...
- java exe指的是什么,3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分)...
3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分) 答:Java编译器 最早的有关学习迁移的一种代表性理论是( ) 答:形式训练说 能够通过母婴胎盘感染的寄生虫是( ...
- java方法区对象类型_浅谈Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- python语言是编译型语言-Python程序的执行过程原理(解释型语言和编译型语言)...
Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的 ...
- python运行程序-Python程序的执行过程
1.C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计算机是不能识别高级语言的,所以,必须要通过编译,链接等手段,将.c文件转换成可执行文件,可执行文件就是纯二进制文件,然后计算机才 ...
- python语言采用编译执行方式_Python程序的执行过程 解释型语言和编译型语言
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言,那么生成的*.pyc文件是什么呢?c应 ...
- python采用编译型方式执行_Python程序的执行过程 解释型语言和编译型语言
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言,那么生成的*.pyc文件是什么呢?c应 ...
- Python程序的执行过程 解释型语言和编译型语言
转载地址:http://www.cnblogs.com/kym/archive/2012/05/14/2498728.html 1.C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计 ...
- 说说Python程序的执行过程
原文地址为: 说说Python程序的执行过程 1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到 ...
- python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程
教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...
最新文章
- oracle中的柱状图,详解Oracle中XMI开发UML图表技术
- 大二暑假周进度总结07
- nodejs之express入门
- expressjs如何做mysql注入_Node.js+Express+Mysql 实现增删改查
- element-UI组件el-button样式覆写 - 生效篇
- 嵌入式系统下对GPIO的简单操作
- 嵌入式BI助力ISV厂商决胜大数据时代
- 月入30K 的电子工程师很常见吗,需要具备啥素质才配得上这个薪资
- 常用设备管理口默认用户名密码汇总
- 循环结构--while循环
- QQ群反向昵称、恶搞昵称的原理
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day5】 —— 基础篇2
- 西门子mr图像后处理手册_西门子MRI操作手册手工版
- 园区网典型组网架构及案例实践
- 解决 golang 中 wrote more than the declared Content-Length
- hexo添加valine评论系统 (yilia主题)
- Python数据分析与机器学习实战<三>Pandas
- Spring Boot基于注解方式处理接口数据脱敏
- 学习OpenCV3:Cmake编译OpenCV时无法下载ffmpeg、xfeatures2d等文件
- 如何将html导入安卓手机号码,安卓华为Mate 8 Excel通讯录联系人导入安卓手机方法教程...
热门文章
- Atitit 分布式文件系统 hdfs nfs fastfs 目录 1. 分布式文件系统	1 2. 什么是FastDFS	1 2.1. FastDFS特性:	1 2.1.1. fastdfs是否可在
- Atitit 格式转换的艺术 以excel转换txt为例
- Atitit 文档的格式演变attilax总结
- PHOTOSHOP使用总结
- paip.提升性能---首页性能加快解决方案
- Rust: (作者 洛佳) 使用Rust编写操作系统(附录一):链接器参数
- 最懂基金经理的第三方机构猫头鹰,到底是谁?
- (转)《精通比特币》原码分析: pow机制
- 【优化求解】基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)【含Matlab源码 1619期】
- 【优化算法】非支配排序遗传算法(NSGA)【含Matlab源码 176期】