每个线程独自拥有。 Heap Java程序在运行时创建的所有类实或数组都放在同一个堆中。而一个Java虚拟 实例中只存在一个堆空间,因此所有线程都将共享这个堆。每一个java程序独 占一个JVM实例,因而每个java程序都有它自己的堆空间,它们不会彼此干扰。 但是同一java程序的多个线程都共享着同一个堆空间,就得考虑多线程访问对 象(堆数据)的同步问题。(这里可能出现的异常java.lang.OutOfMemoryError: Java heap space) Method area 在Java虚拟机中,被装载的class的信息存储在Method area的内存中。当虚 拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个 class文件内容并把它传输到虚拟机中。紧接着虚拟机提取其中的类型信息,并 将这些信息存储到方法区。该类型中的类(静态)变量同样也存储在方法区中。 与Heap一样,method area是多线程共享的,因此要考虑多线程访问的同步问 题。比如,假设同时两个线程都企图访问一个名为Lava的类,而这个类还没有 内装载入虚拟机,那么,这时应该只有一个线程去装载它,而另一个线程则只能 等待。(这里可能出现的异常java.lang.OutOfMemoryError:PermGen full) Java stack Java stack以帧为单位保存线程的运行状态。虚拟机只会直接对Java stack执行两种操作:以帧为单位的压栈或出栈。每当线程调用一个方法的时 候,就对当前状态作为一个帧保存到java stack中(压栈):当一个方法调用返 回时,从java stack弹出一个帧(出栈)。栈的大小是有一定的限制,这个可能 出现StackOverF1ow问题。下面的程序可以说明这个问题。 public class TestStackOverFlow public static void main(String[]args){ Recursive r=new Recursive(: r.doit(10000); /Exception in thread "main" java.lang.StackOverflowError } } class Recursive public int doit(int t){ if(t<=1){ return 1;每个线程独自拥有。 Heap Java 程序在运行时创建的所有类实或数组都放在同一个堆中。而一个 Java 虚拟 实例中只存在一个堆空间,因此所有线程都将共享这个堆。每一个 java 程序独 占一个 JVM 实例,因而每个 java 程序都有它自己的堆空间,它们不会彼此干扰。 但是同一 java 程序的多个线程都共享着同一个堆空间,就得考虑多线程访问对 象(堆数据)的同步问题。(这里可能出现的异常 java.lang.OutOfMemoryError: Java heap space) Method area 在 Java 虚拟机中,被装载的 class 的信息存储在 Method area 的内存中。当虚 拟机装载某个类型时,它使用类装载器定位相应的 class 文件,然后读入这个 class 文件内容并把它传输到虚拟机中。紧接着虚拟机提取其中的类型信息,并 将这些信息存储到方法区。该类型中的类(静态)变量同样也存储在方法区中。 与 Heap 一样,method area 是多线程共享的,因此要考虑多线程访问的同步问 题。比如,假设同时两个线程都企图访问一个名为 Lava 的类,而这个类还没有 内装载入虚拟机,那么,这时应该只有一个线程去装载它,而另一个线程则只能 等待。 (这里可能出现的异常 java.lang.OutOfMemoryError: PermGen full) Java stack Java stack 以帧为单位保存线程的运行状态。虚拟机只会直接对 Java stack 执行两种操作:以帧为单位的压栈或出栈。每当线程调用一个方法的时 候,就对当前状态作为一个帧保存到 java stack 中(压栈);当一个方法调用返 回时,从 java stack 弹出一个帧(出栈)。栈的大小是有一定的限制,这个可能 出现 StackOverFlow 问题。 下面的程序可以说明这个问题。 public class TestStackOverFlow { public static void main(String[] args) { Recursive r = new Recursive(); r.doit(10000); // Exception in thread "main" java.lang.StackOverflowError } } class Recursive { public int doit(int t) { if (t <= 1) { return 1;