Java栈,PC寄存器,本地方法栈,堆,方法区(静态区)和运行常量池
2024-09-04 13:20:57
详情参考: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 }
最新文章
- MarkDown简要语法
- <;转>;Hibernate的优、缺点(局限性)
- 转!! Java中ThreadLocal的设计与使用
- 20145218 《Java程序设计》第01次实验报告
- Hibernate、批量操作数据
- Caché Monitor 2.03发布,Caché的SQL开发工具 - 开源中国社区
- 存储管理(一):openfiler介绍及存储理解
- Archive for required library:xxxxx/spring-beans-3.2.4.RELEASE.jar in project XXXXX cannot be read or is not a valid ZIP file
- Pymsql
- 一次apk打开时报内存溢出错误,故写下内存溢出的各种原因和解决方法
- keil教程之新建软件工程
- Bootstrap-table使用总结(整合版)
- PCA(主成分分析)的简单理解
- 对比PG数据库结构是否一致的方法
- centos7安装dnsmasq局域网dns
- 20181017 PL/SQL 记录
- Codeforces Round #503 (by SIS, Div. 1)E. Raining season
- C# 多线程之List的线程安全问题
- 剑指offer4
- R中的各种概率统计分布
热门文章
- 2. DVWA亲测命令执行漏洞
- [CentOS7] 通过vncviewer屏幕扩展
- SQL数据库操作整理
- Java实现发送邮箱验证码/注册验证链接
- C#网络编程学习(5)---Tcp连接中出现的粘包、拆包问题
- [APIO2019T1]奇怪装置
- codeforces C. Vasya And The Mushrooms (思维+模拟)
- Codeforces Round #129 (Div. 2) B
- ERROR: Unable to globalize &#39;/usr/local/NONE/etc/php-fpm.d/*.conf&#39; (ret = 2) from /usr/local/etc/php-fpm.conf at line WARNING: Nothing matches the include pattern &#39;/usr/local/php7/etc/php-fpm.d/*.conf&#39;
- scrapy可视化管理工具spiderkeeper使用笔记