Java程序运行内存机制
Java程序运行内存机制
栈内存包留调用方法、变量的区域,堆内存是new对象的区域,方法区为保存class文件的区域。
程序刚开始时,先加载类文件相应的数据到方法区,然后就从main()方法开始执行。执行main()方法,main()方法入栈,执行phone one = new Phone(),首先Phone one声明一个变量并入栈,然后new Phone()在堆内存申请一块空间,此时,申请的堆内存中保留着类文件中的那些变量;然后,申请区域中的方法则是一快存储着方法地址的区域。然后堆中申请的区域的地址就被赋予给栈内存中声明的变量进行初始化。然后就继续执行one.brand = "苹果";one.price = "8838.0";one.color = "黑色";对声明变量所指向的堆内存中的一些变量进行初始化(更新)。当调用one.call("乔布斯");时,就会去寻找变量one中的方法区域去找相应的方法的地址然后就去方法区里去寻找相应的方法,然后就将one.call()方法进行入栈,并执行。当执行完了后one.call()就从栈空间中弹出栈。然后就继续执行one.sendMessage(),原理类似。当运行到main()方法的结尾大括号时,main函数就执行完成,main函数也弹出栈,程序就执行完成。
下图为当声明一个对象时的调用情况:

下图为声明2个对象时的调用情况:

当声明第二个对象时,与前面说的一样,会在先在栈内存中进行变量的入栈,然后new Phone()会在堆内存内申请一块内存。方法区还是跟原来一样。
下图是将一个对象的值赋给另一个对象的调用情况:

当将两个对象的值赋值给其他对象时,会把该对象在栈内存中申请的内存的地址赋值给新对象,新对象也同时指向该区域,且一个对象对该区域的内容进行更改时,另一个对象也会察觉到。
Java程序运行内存机制的更多相关文章
- Java程序运行机制
Java程序运行机制 编译型(compile) 它有一个负责翻译的程序(编译器),将我们写的 Java 源代码转为计算机可执行的代码 举个例子:把一本中文书翻译成英文书 应用:操作系统.C.C++ 解 ...
- 02 基础 卸载JDK 安装JDK Java程序运行机制
基础 JDK:Java Development Kit(Java开发者工具 包含JRE和JVM) JRE:Java Runtime Environment(java运行时环境,包含JVM) JVM:J ...
- 基础知识《零》---Java程序运行机制及运行过程
Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运 ...
- Java程序运行机制及开发环境
Java既是编译型语言,又是解释型语言 java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码 ...
- 1、Java语言概述与开发环境——Java程序运行机制
Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤. 一.高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型 ...
- 2.Java程序运行机制
1.编译型:compile,把所有东西翻译好,若有更新需要重新全部翻译.执行速度够快,对操作系统要求比较低.开发操作系统时用到编译型语言,例如c/c++...运行时需编译整个程序 2.解释性:运行一个 ...
- 5.Java程序运行机制
一.编译型和解释型语言区别 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以任何的高级语言编写的程序都必须转换成计算机语言,也就是机器码.而这种转换的方式有两种: 编译 ...
- 【Java】Java_03第一个Java程序
第一个JAVA程序的编写和运行 1.使用记事本编辑 public class Welcome{ public static void main(String[] agrs){ System.out.p ...
- 一、Java语言概述与开发环境、第一个java程序
目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...
随机推荐
- php使用curl来获取远程图片
本文章来介绍php使用curl来获取远程图片实现方法,有需要了解采集远程图片的朋友不防进入参考. curl要求php环境支持才行. 可以运行phpinfo()函数是否支持,一般要将php.ini中;e ...
- 尝试写一写4gl与4fd
4gl DATABASE ds GLOBALS "../../config/top.global" DEFINE g_curs_index LIKE t ...
- 焦大:以后seo排名核心是用户需求点的挖掘
http://www.wocaoseo.com/thread-61-1-1.html 给我一个用户需求点,我便能拗动任何seo排名.-焦大 前不久我看博客上有人留言咨询能否做seo这个词的排名,对于这 ...
- 借助FRP反向代理实现内网穿透
一.frp 是什么? frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公 ...
- typedef的陷阱
typedef定义了一种类型的新别名,不同于宏,它不是简单的字符串替换.比如: 先定义: typedef char* PSTR; 然后: int mystrcmp(const PSTR, const ...
- Python爬虫 使用selenium处理动态网页
对于静态网页,使用requests等库可以很方便的得到它的网页源码,然后提取出想要的信息.但是对于动态网页,情况就要复杂很多,这种页面的源码往往只有一个框架,其内容都是由JavaScript渲染出来的 ...
- 不要盲目使用新技术,说的就是你,JWT!
其实我更想聊标题的前半部分,后半部分只是拉出来做典型的. 简历上写上一句,"热衷于学习新技术",孬管是不是真的,至少加分项是可以有的. 再看看标题,我是来搞笑的? 学习与使用,两回 ...
- Tornado + vue.js 前后端分离运行脚本
shell脚本部分: #!/bin/bash 主脚本 (./cem-demo_publish_front) (./cem-demo_publish_backend) #!/bin/bash 后端脚本 ...
- 前端防止xxs注入
思路: 去掉所有跟sql有关的标签: $(function () { $(":input").change(function () { // alert($(this ...
- Android开发,java开发程序员常见面试题,求100-200之间的质数,java逻辑代码
public class aa{ public static void main (String args []){ //author:qq986945193 for (int i = 100;i&l ...