需要说明一点,现存的JVM有好多种,Sun公司的是Sun Hotspot JVM
什么是对象?
首先要知道,Java并不是完全的面向对象的,因为基本数据类型的变量就不是一个对象。
除了Java的基本数据类型之外的所有的Object都是对象。
包括,类对象,接口对象和数组对象。
堆中的数据是所有线程共享的,所以在其中追加一个对象需要给他加上锁,这也是为什么new一个对象的系统开销比较大的原因。
Sun Hotspot JVM中new一个对象,如果对象较小的话是不会加锁的。因为它会直接为每一个线程开辟一块新的空间。
JVM栈实例的创建与线程相关。启动一个线程就会创建一个JVM栈的实例。
栈中存放的大部门是基本数据类型以及堆中对象的引用。
包括类名称,类修饰符,类中的静态变量,类中final类型的常量,类中字段信息,类中方法信息
Class的getClassName,inInterface等方法调用的时候会在这个区域中获得相应的信息。
JVM堆中的对象的引用不再出现在JVM栈中的时候,JVM的垃圾回收机制就会把这个堆中的对象所占用的空间回收。
原文地址:http://www.cnblogs.com/voctrals/p/3840861.html