JVM笔记

来源:互联网 发布:js判断变量是否等于0 编辑:程序博客网 时间:2024/04/29 09:30

一 || 概念部分

1.1 数据类型: 基本类型   基本类型的变量保存原始值,即:他代表的值即是数值本身。byte short char int long float double boolean returnAddress  

   引用类型   引用类型的变量保存引用值。引用值代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址位置。

1.2 堆与栈

1》栈是运行时单位,而堆是存储单位。

2》堆中存储的是对象。栈中存的是基本数据类型和堆中对象的引用,一个对象的大小是可以动态变化的,但栈中,一个对象只对应了一个4byte的引用。

3》为什么不把基本类型存在堆中呢,因为其占用空间一般是1-8个字节,需要空间少而确定。

4》栈解决程序的运行问题,即程序如何执行,如何处理数据。堆解决的是数据存储问题,即数据怎么放,放在哪。

5》一个线程对应其独立的线程栈。

思考:堆栈分离<1.从软件设计角度看,栈代表了处理逻辑,堆代表了数据。使处理逻辑更为清晰。

      2.堆中内容可以被多个栈共享(多个线程访问同一个对象) 数据交互便利,堆中常量和缓存可以被所有栈访问,节省空间。

      3.栈因运行时需要,需要进行地址段的划分,只能向上增长,限制栈存储能力,而堆中对象可以跟据需要动态增长的,而相应栈中只需要记录堆中一个地址即可。

      4.面向对象:当我们把对象拆开,对象的属性其实就是数据,存放在堆中,而对象的行为(方法),就是运行逻辑,放在栈中,我们在编写面向对象 时候,既编写了数据结构,也编写了处理数据的逻辑。

      5.垃圾回收机制成为可能。>

备注:栈大小设置  -Xss    无法返回的递归。-StackOverflowError异常。


1.3 java对象大小

一个空Object对象的大小是8byte,这个大小是保存堆中一个没有任何属性值的对象的大小。Object ob = new Object(); 所占空间4+8byte     4byte是其引用占用空间,8byte是java堆中对象的信息。因为所有java非基本类型的对象都默认继承Object对象,因此不论其他什么对象,都必须是大于8byte的。












0 0
原创粉丝点击