JVM 的运行数据区

java的内存空间分为:方法区,程序计数器,本地方法栈,虚拟机栈,堆;

方法区:方法区是系统分配的一个内存逻辑区域,有运行时常量池、静态变量、类信息;

注意:方法区里有个静态区,静态区专门存放静态变量和静态代码块。

虚拟机栈:虚拟机栈就是我们常说的栈空间了;

 栈空间里存放的是局部变量表,动态链接,操作数栈,以及是方法的出口;每个栈帧都会随着方法的开始和结束相应的出栈和入 栈;

注意:1. 在方法中定义的一些基本类型的变量和引用变量都在方法的栈内存中分配。当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后(方法执行完成后),Java 会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作它用。

    2. 若引用变量被释放,该变量对应的对象,也就失去了引用,也就变成了可以被gc对象回收的垃圾。

堆空间:堆空间里存放的有且只有对象,同时包括数组对象,该区域是垃圾回收的重点区域,垃圾回收也会回收方法区;

注意:对象是在堆内存中初始化的, 真正用来存储数据的。不能直接访问。

引用类型变量是保存在栈当中的,引用变量是一个用来引用堆中对象的符号而已(指针),使用时可以用它来代表引用对象;

程序计数器:分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

本地方法栈:本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则是为虚拟机使用到的Native方法服务。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java小白

LinkedHashMap的accessOrder

1959
来自专栏思考的代码世界

Python基础学习05天

1475
来自专栏黑泽君的专栏

JDK5中Lock锁的使用

(1)JDK5中Lock锁的使用   虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的...

991
来自专栏九彩拼盘的叨叨叨

JS模式 之通用模式(译)

原文 http://shichuan.github.io/javascript-patterns/

1073
来自专栏尚国

PHP反序列化漏洞

这里你可以看到, 我代码里的类定义为: class F, 这个序列化就是 F, 我定义变量名字是filename, 它这里也是 filename, 我们可以修改...

1022
来自专栏大闲人柴毛毛

Java基础深入解析——类与对象

成员变量与局部变量的区别 1.成员变量定义在类中,整个类中都能够访问。   局部变量定义在局部代码块中,只能在局部代码块中访问。 2.成员变量存在于堆内存中,有...

3337
来自专栏一枝花算不算浪漫

[Java面试二]Java基础知识精华部分.

3989
来自专栏MelonTeam专栏

Fork/Join 框架

1. 简介 1.1 什么是Fork/Join框架 Java 5 引入了 Executor 和 ExecutorService 接口,使得 Java在并发支持...

2096
来自专栏http://www.cnblogs.com

python 反射

通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法: hasattr(obj,name_str) 判断一个对象obj里是否有对应的name...

3779
来自专栏前端儿

大小写互换

  现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。

1252

扫码关注云+社区

领取腾讯云代金券