Java 变量存储的位置(局部变量、成员变量)
Java把内存划分为以下bai4个部分:
1、栈区(stacksegment)—由编译器自动du分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源。
2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。
3、静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放。
4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。
对于局部变量,如果是基本类型,会把值直接存储在栈;如果是引用类型,比如String ss = new String(“william”);会把其对象存储在堆,而把这个对象的引用(指针)ss存储在栈。由于指针是私有的,栈销毁后,在内存的中对象没有其他的引用,就会被收回,因此局部变量的生命周期比较短,就是栈的生命周期
再如
String s1 = new String(“william”);
String s2 = s1;
s1和s2同为这个字符串对象的实例,但是对象只有一个,存储在堆,而这两个引用存储在栈中。也就是说某个方法,类似一个模板,在被执行时,每个线程会复制这个模板,局部变量此时才会被创建,并放入栈中,栈是线程私有的,因此局部变量是就是线程私有的,各个线程是彼此不见的
类的成员变量在不同对象中各不相同,都有自己的存储空间(成员变量在堆中的实例对象中),基本类型和引用类型的成员变量都在这个对象的空间中,作为一个整体存储在堆。
假设类A 内有个成员变量 b ,那么A的实例a1,a2 在堆内存中,且各自都有一个变量b。当载体A的实例a1,a2被创建时,b也会创建了。 并且是跨线程可见的。 成员变量的生命周期比较长,和载体一致,载体被回收了,这个成员变量才会被销毁!进而这个成员变量的引用对象才会被销毁
而类的方法却是
该类的所有实例对象共享的,只有一套,对象使用方法的时候方法才被压入栈,方法不使用则不占用内存。
参考
原文链接:https://blog.csdn.net/feiqipengcheng/article/details/108518558
原文链接:https://blog.csdn.net/aop_ioc/article/details/108472004
Java 变量存储的位置(局部变量、成员变量)相关推荐
- java面向对象(类与对象,局部变量成员变量,基本类型和引用类型作为参数传递)...
一.类和对象的区别 类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体 可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系.类用于描述 ...
- java实例成员和类成员变量_Java 中成员变量又分为 和类成员变量。_学小易找答案...
[简答题]I'm not quite so poetic, but I do know that the subway is as essential to the character of New ...
- Java语言基础Day14(内部类、类作为成员变量类型、接口作为成员变量类型、接口作为方法的参数或返回值、红包案例、JDK9的JShell、编译器的两点优化)
今日内容 一.内部类 1.内部类的概念与分类 2.成员内部类的定义 3.成员内部类的使用 4.内部类的同名变量访问 5.局部内部类定义 6.局部内部类的final问题 7.匿名内部类 匿名内部类定义格 ...
- [转载] 面试题:说说Java中接口、类、成员变量、成员方法、构造方法有哪些访问修饰符和他们的作用范围
参考链接: Java中的访问修饰符 * 问题:说说Java中接口.类.成员变量.成员方法.构造方法有哪些访问修饰符和他们的作用范围 * 答:接口的访问修饰符只有public 1个 * 类的访问修 ...
- java系列8:private修饰的成员变量怎么传参
可以使用getter,setter方法 package drchen.java.day06.demo04;public class Student {// 成员变量private String nam ...
- java成员变量默认是_在Java语言中,String类型的成员变量的默认初始值是( )
在Java语言中,String类型的成员变量的默认初始值是( ) 答:C.null 学生最主要的权利是() 答:受教育权 提倡教育要适合孩子的 "敏感期"的教育家是 答:蒙台梭利 ...
- 重学Java(035)——Java基础知识(类作为成员变量、接口作为成员变量、接口作为方法参数和返回值类型)
学习内容:三种引用类型用法 一.类作为成员变量 二.接口作为成员变量 三.接口作为方法参数和返回值类型 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进 ...
- java getfield_Java Class.getField()/getDeclaredField()返回成员变量
首页 > 基础教程 > 反射 > Reflection API Java Class.getField()/getDeclaredField()返回成员变量 Class.getFie ...
- Java学习 第十五章 成员变量和局部变量的区别 / 三大特征之一 (封装性)/构造方法 /private关键字
第十五章 局部变量和成员变量: 1.定义位置不一样 局部变量:在方法内部定义 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样 局部变量:只能在方法当中使用 成员变量:整个类都可以使用 3. ...
最新文章
- Android SharedPreferences 的使用
- 【翻译】SQL Server索引进阶:第三级,聚集索引
- linux shell 脚本实现tcp/upd协议通讯(重定向应用)
- POJ 3259 Wormholes【最短路/SPFA判断负环模板】
- 用Android打出马奔跑的动画,一款非常好用的动画库Lottie
- python 树状图代码_Python 无限级分类树状结构生成算法 「实用代码」
- 多维多重背包问题_动态规划--背包问题
- 视频教程-思科入门CCNA初级网络工程师视频课程-网络技术
- 手把手全面解读思科(Cisco)网络技术学院 考试折扣号申请说明
- Flink 可视化开发平台--Streamx部署
- 员工转正申请书_新员工转正申请书
- sql如何进行脱敏操作_股市入门基本知识丨大阳线出现后如何进行短线操作
- 高通CPU处理器解析
- mybatis 父子级树形结构查询
- 视频跟踪——TLD算法
- Win7 Wininit.exe任意加载/执行(漏洞)
- 【博弈论】bzoj1022[SHOI2008]小约翰的游戏John
- 【BLE MESH】PB-ADV入网详解
- crf graph matlab_如何评价 Vicarious 在 Science 上提出基于概率图模型(PGM)的 RCN 模型?...
- 【奥运功臣沪江小D】沪江小D奥运系列LOGO欣赏