首页 > 代码库 > JVM 堆跟栈

JVM 堆跟栈

需要说明一点,现存的JVM有好多种,Sun公司的是Sun Hotspot JVM

堆:是JVM用来储存对象的地方,他是存储单位(部门)

什么是对象?

首先要知道,Java并不是完全的面向对象的,因为基本数据类型的变量就不是一个对象。

除了Java的基本数据类型之外的所有的Object都是对象。

包括,类对象,接口对象和数组对象。

堆中的数据是所有线程共享的,所以在其中追加一个对象需要给他加上锁,这也是为什么new一个对象的系统开销比较大的原因。

Sun Hotspot JVM中new一个对象,如果对象较小的话是不会加锁的。因为它会直接为每一个线程开辟一块新的空间。

 

 

栈:是JVM用来存储基本数据类型,以及逻辑处理的地方,他是运行时单位

JVM栈实例的创建与线程相关。启动一个线程就会创建一个JVM栈的实例。

栈中存放的大部门是基本数据类型以及堆中对象的引用。

 

方法区:存放加载的类的相关信息的地方

包括类名称,类修饰符,类中的静态变量,类中final类型的常量,类中字段信息,类中方法信息

Class的getClassName,inInterface等方法调用的时候会在这个区域中获得相应的信息。

 

GC:JVM销毁无用对象

JVM堆中的对象的引用不再出现在JVM栈中的时候,JVM的垃圾回收机制就会把这个堆中的对象所占用的空间回收。