zoukankan      html  css  js  c++  java
  • Java栈,PC寄存器,本地方法栈,堆,方法区(静态区)和运行常量池

    详情参考:https://my.oschina.net/wangsifangyuan/blog/711329

    前言:当要判断一个变量存在什么空间上哪儿时,先分析它是哪一种(是实例变量还是局部变量),实例变量存在于所属的对象中,因此在创建对象后才存在,存在于堆上

       如果为局部变量,局部变量是被声明在方法中的,它是暂时的,且生命周期只限于方法被放于栈上的这段期间(方法调用至执行完毕),因此存在于上;

    堆区: 

    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 
    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 


    栈区: 
    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 
    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 
    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 


    方法区: 
    1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。 

    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

     注意容易入坑的地方:

        1、栈上只保存基础数据类型的对象和自定义对象的引用(对的),但是不是说基础数据类型的对象和自定义对象的引用只保存在栈上(这是错的)

    1 public class Student{
    2     private int age;
    3}
    1  public void go(){
    2      Student students[] = new Student[3];
    3      students[0] = new Student();
    4      students[0].age = 20;
    5      students[1] = new Student();
    6      students[1].age = 20;
    7      students[2] = new Student();
    8      students[2].age = 20;
    9    int a = 10;
    10 }

          

  • 相关阅读:
    在eclipse中API的封装和调用
    冒泡排序
    java中阻止类的继承
    java中数组复制的两种方式
    ssh框架搭建出现的异常: class com.my.entity.user not found while looking for property: id
    ssh框架中struts.xml 的配置参数详解
    线程的五种状态
    Sql Server 分页
    window.opener 子窗体操作父窗体
    贪心算法--汽车加油问题
  • 原文地址:https://www.cnblogs.com/qiong2017/p/7669182.html
Copyright © 2011-2022 走看看