[转载]JAVA内存分析——栈、堆、方法区 程序执行变化过程
面向对象的内存分析
参考:http://www.sxt.cn/Java_jQuery_in_action/object-oriented.html
;尚学堂JAVA300集-064内存分析详解_栈_堆_方法区_栈帧_程序执行的内存变化过程;
栈:用于存放局部变量;一个线程一个栈,线程间不能共享;在一个线程中每个方法都有一个栈帧;
堆:用于存放创建好的对象,一个对象在堆中开辟一块;JVM只有一个堆,所有线程共享;
方法区(也是堆):用于存储类信息、静态变量、字符串常量;运行时,会将所有类信息在方法区内一次加载完。
例一
代码:
SxtStu.java
public class SxtStu {
//属性fields
int id;
String sname;
int age;
Computer comp; //计算机
//方法
void study(){
System.out.println("我在认真学习!!,使用电脑:"+comp.brand);
}
void play(){
System.out.println("我在玩游戏!王者农药!");
}
//构造方法。用于创建这个类的对象。无参的构造方法可以由系统自动创建。
SxtStu(){
System.out.println("调用了无参的构造方法!");
}
//程序执行的入口,必须要有
//javac Sxtstu.java , java Sxtstu
public static void main(String[] args) {
SxtStu stu = new SxtStu(); //创建一个对象
stu.id=1001;
stu.sname= "高淇";
stu.age = 18;
Computer c1 = new Computer();
c1.brand = "联想";
stu.comp = c1;
stu.play();
stu.study();
}
}
class Computer {
String brand;
}
图解:

例二
代码:
Animal.java
package cn.bjsxt.oop.polymorphism;
public class Animal {
String str;
public void voice(){
System.out.println("普通动物叫声!");
}
}
class Cat extends Animal {
public void voice(){
System.out.println("喵喵喵");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void voice(){
System.out.println("汪汪汪");
}
public void seeDoor(){
System.out.println("看门!");
}
}
class Tiger extends Animal {
public void voice(){
System.out.println("哇哇哇");
}
}
class Pig extends Animal {
public void voice(){
System.out.println("哼哼哼");
}
}
Test.java
package cn.bjsxt.oop.polymorphism;
public class Test {
public static void testAnimalVoice(Animal c){
c.voice();
if(c instanceof Cat){
((Cat) c).catchMouse();
}
}
/*
public static void testAnimalVoice(Dog c){
c.voice();
}
public static void testAnimalVoice(Pig c){
c.voice();
}*/
//javac Test.java
// java Test
public static void main(String[] args) {
Animal a = new Cat();
Cat a2 = (Cat)a;
testAnimalVoice(a);
// a2.catchMouse();
// Animal b = new Dog();
// Animal c = new Tiger();
// testAnimalVoice(b);
// testAnimalVoice(c);
}
}
图解: *this指向最终的Cat类对象

[转载]JAVA内存分析——栈、堆、方法区 程序执行变化过程的更多相关文章
- Java内存分析--栈--堆
Java内存分析--栈--堆 JVM的内存分析: 1.栈内存 1.连续的存储空间,遵循后进先出的原则. 2.每个线程包含一个栈区,栈区只保存基础数据类型的对象和自定义对象的引用. 3.每个栈中的数据都 ...
- Java内存分析1 - 从两个程序说起
这次看一些关于JVM内存分析的内容. 两个程序 程序一 首先来看两个程序,这里是程序一:JVMStackTest,看下代码: package com.zhyea.robin.jvm; public c ...
- java内存管理(堆、栈、方法区)
java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...
- JVM内存结构之堆、栈、方法区以及直接内存、堆和栈区别
JVM内存结构之堆.栈.方法区以及直接内存.堆和栈区别 一. 理解JVM中堆与栈以及方法区 堆(heap):FIFO(队列优先,先进先出):二级缓存:*JVM中只有一个堆区被所有线程所共享:对象和数 ...
- Java中的栈,堆,方法区和常量池
要说Java中的栈,堆,方法区和常量池就要提到HotSpot,HotSpot是Sun JDK 和 Open JDK中所带的虚拟机. (Sun JDK 和 Open JDK除了注释不同,代码实现基本上是 ...
- 简单了解下java中的堆、栈和方法区。
堆.栈.方法区 1,首先了解下java中的数据类型. ①java中的八大基本数据类型:boolean, char , byte, short, int, long , float , double. ...
- JVM内存的堆、栈和方法区
JVM的内存分为堆.栈.方法区和程序计数器4个区域 存储内容:基本类型,对象引用,对象本身,class,常量,static变量 堆: 拥有者:所有线程 内容:对象本身,不存放基本类型和对象引用 垃圾回 ...
- java中的堆、栈、方法区等比较
• 堆.栈.方法区 1. java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方 2. 堆区 存储的全部是对象,每个对象都包含一个与之对应的class的信息.(clas ...
- 堆、栈、方法区、静态代码块---Java
java 堆.栈.方法区 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基 ...
随机推荐
- Linux运维之系统性能---vmstat工具分析内存的瓶颈
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page ...
- 记录一次优化mysql查询语句的方法
今天在数据库中导入大量的数据,大概有25万条,结果在查询的时候优化没有做好,因此导致查询意外停止或者是直接查询程序中止,很是苦恼.所以才有了优化查询的方法总结 1.首先是查看一下数据量 2.接下来按照 ...
- C++基础算法学习——完美立方
形如a 3 = b 3 + c 3 + d 3 的等式被称为完美立方等式.例如12 3 = 6 3 + 8 3 + 10 3 .编写一个程序,对任给的正整数N(N≤100),寻找所有的四元组(a, b ...
- VS 代码整理插件推荐:CodeMaid
一直在用,觉得很不错,其他插件基本上不用了,所以拿来记录并分享一下.CodeMaid 说明文档CodeMaid 下载安装不用说明了,使用看说明文档就好. CodeMaid和ReSharp类似,开源且免 ...
- Mac上编译OpenJDK过程记录
编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型.机子具体环境的不同,很难有资料能够一步到位.还是得碰到具体问题通过上网查来一个个解决. 下载OpenJDK ...
- python创建目录保存文件
创建目录 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). 其原型如下所示: os.mkdir(path) 其参数path 为要创建目录的路径. 例如要在D盘下创建hello ...
- tcp/ip 数据进入协议栈时的封装及分用过程图
- python第三十四课——2.匿名函数配合容器函数的使用
匿名函数配合容器函数的使用(了解) 1.匿名函数配合列表对象使用 lt=[lambda x:x**2,lambda x:x**3,lambda x:x**4] for i in lt: print(i ...
- InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClas...
如果 你的项目中使用了注解插件 比如butterknife 升级3.1之后打包编译 出现以下错误提示 InnerClass annotations are missing correspondi ...
- 魔法少女【动态规划问题】——NYOJ1204
个人博客页:https://www.scriptboy.cn/202.html 题目描述: 前些时间虚渊玄的巨献小圆着实火了一把. 在黑长直(小炎)往上爬楼去对抗魔女之夜时,她遇到了一个问题想请你帮忙 ...