A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们常用的,我知道是 堆内存,栈内存,方法区。我听说在JAVA中还有其它什么内存。
谁能说说,还有什么吗?可以用简洁的语言说说它们之间的最大区别吗,我已经知道了:
1:变量都是在栈中,栈内存中存取速度快些
2:实例对象在堆内存开辟,,堆相对较慢些。(仅此而已吗?)
3:方法区,放一些 方法和一些静态什么的(像静态变量,静态代码块,静态函数),

顺便问个小问题,我记得short有缓存区,这个缓存区在哪里?平时没有在哪里看过。 是只有short这种数据类型才有缓存区吗?
这些个问题最近都在我心头纠结啊~  

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
java内存的几种存储区域
寄存器:在CPU内部,由虚拟机管理,我们无法触碰到
栈:由系统自动分配,速度较快,我们无法控制的
堆:堆的好处是有很大的灵活性,如Java编译器不需要知道从堆里需要分配多少存储区域,也不必知道存储的数据在堆里会存活多长时间。
静态存储区域与常量存储区域:静态存储区用来存放static类型的变量。常量存储区用来存放常量类型(final)类型的值
非RAM存储:硬盘等永久存储空间

希望可以帮到你
回复 使用道具 举报
你这个问题我好像以前帮别人回答过,
栈中用来存放一些原始数据类型的局部变量数据和对象的引用(String,数组.对象等等)但不存放对象内容堆中存放使用new关键字创建的对象.字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定(常量池和堆).有的是编译期就已经创建好,存放在字符串常 量池中,而有的是运行时才被创建.使用new关键字,存放在堆中
回复 使用道具 举报
好像没有说到重点哦,感觉沙发说的方法区不太理解,我看毕老师的每次都是方法区,静态存储区域与常量存储区域是两块不同的区域还是都是方法区,那个 缓存在哪里呢?
回复 使用道具 举报
Java里short间的计算的结果会被转换为Integer,而Integer对应的是对象,
在-128~127之间Integer自动封装的对象都在常量池里,并且不同的变量对应相同的数字的话 都会指向同一个对象
比如说Integer a=50;Integer b=50;  则 a==b。
我个人理解short的 缓存就是指的这个。
回复 使用道具 举报
楼主不用把内存想的太复杂,按我自己的理解:
    栈内存是用来 操作数据,----》为什么用来操作数据?因为他运行速度快,数据用完就释放-------》为什么不用他来存储数据?因为他需要事先了解数据的大小及生命周期了才会进行存储,用起来不方便;----》他怎么操作数据?利用变量对应的地址去操控堆中的实体对象。
    堆内存用来存储数据;---------》为什么不用他来操作数据?因为他用完的数据要等 垃圾回收机制去清除,速度较慢。------------》为什么用他来存储数据?—————》因为Java编译器不需要知道从堆里需要分配多少存储区域,就可以直接去存储,存着方便。
    方法区则名副其实 就是放着方法的实体,其中有静态区和非静态区,静态区存着静态方法和静态变量,非静态区存着一般方法,
当要使用方法时,该函数进栈,用完跳栈。
   还有一些细节东西太琐碎了,我打字慢就不写了。
   

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 很给力!

查看全部评分

回复 使用道具 举报
尤洋 说的好啊
我想我大概明白了
回复 使用道具 举报
首先,栈内存的所有数据用完空间就会释放,
       而堆内存中使用的是垃圾回收机制,不会立即释放

栈内存里存放的多是引用数据 即堆内存中的地址值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马