zoukankan      html  css  js  c++  java
  • Java中内存分析(一)

     1 package cn.bjsxt.test;
     2 
     3 public class TestStudent {
     4     public static void main(String[] args){
     5         Student s1 = new Student();
     6         s1.name = "yisa";
     7         s1.study();
     8         s1.sayHello("gujan");
     9     }
    10 }
    11 
    12 
    13 class Student{
    14     public String name;
    15     int id;
    16     public int age;
    17     public String gender;
    18     public int weight;
    19     
    20     public void study() {
    21         System.out.println(this.name+" is lerning!");
    22     }
    23     
    24     public void sayHello(String sname) {
    25         System.out.println(this.name+" say Hello to "+sname);
    26     }
    27     
    28 }

    从头开始一行一行地分析Java在运行过程中的内存地址是如何分配的。
    第5行:Student s1 = new Student(); 1.当JVM看到Student的时候,知道它是个类,于是通过Loader将类加载到方法区中。s1是局部变量放到栈里。
    new Student 的意思是在堆中创建一个对象,并把该对象(连续空间)的首地址放入S1中(s1指向了该对象),此时对象属性全为默认值。
    属性(方法) 值(地址)
    name null
    id 0
    age 0
    gender null
    study null
    sayHello null

    第六行:s1.name = "yisa"; s1:找到栈里的s1,通过存放在它里的首地址找到对象(以上的表格),在方法区(堆)里创建一个字符串yisa,将其首地址付给对象里name.所以表格发生以下变化
    name对应的nulll变成xx,(加入xx为“yisa”在方法区的地址)。
    图如下
    
    
  • 相关阅读:
    获取redis指定实例中所有的key
    gtid环境下mysqldump对于set-gtid-purged的取值
    统计redis大key信息(前topN)
    通过otter元数据表获取有用的信息
    另外一种获取redis cluster主从关系和slot分布的方法
    直观获取redis cluster 主从关系
    MongoDB 分片篇
    练习Mongodb 复制集篇
    堆和栈
    原码、反码、补码
  • 原文地址:https://www.cnblogs.com/yisawatbek/p/7695100.html
Copyright © 2011-2022 走看看