初识JVM中堆栈的存储
2014-11-09 14:53
337 查看
Java语言有一个非常重要的特点就是跨平台性,可以在不同的操作系统上使用同一段Java程序,这得益于Java虚拟机(JVM),Java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
在JVM中,堆区只有一个,方法区只有一个,栈可以有多个,并且堆的大小要大于栈的。
在方法区中,用来存储关于类的描述,包含所有的class和static类型的变量,这些变量在整个程序中唯一,所以方法区也被称为静态区,被所有进程共享。
在堆中,用来存放类的对象,被所有线程共享,在堆中不存放基本类型和对象引用,只存放对象本身。
在栈中,用来存放方法中的局部变量(成员变量在堆区),以及对象的引用,每个线程只包含一个栈区,并且为自身独有,其他栈不可以访问,存在多少个线程就有多少栈。栈有3个部分:基本类型变量区、执行环境上下文、操作指令区。
想要在程序中看到堆溢出的现象,可以执行下面的Java程序:
由于堆中存储的是对象,当创建的对象过多时就会发生栈溢出,错误提示:java.lang.OutOfMemoryError: Java heap space
要想看到栈溢出的现象,递归可以导致栈溢出,执行下面的代码:
如果做一些利用内存较大的程序的时候,强大的Java提供了JVM优化功能,可以再控制台中或Eclipse中修改堆栈的大小
java –Xms128m //JVM占用最小内存
4000
–Xmx512m //JVM占用最大内存
–XX:PermSize=64m //最小堆大小
在JVM中,堆区只有一个,方法区只有一个,栈可以有多个,并且堆的大小要大于栈的。
在方法区中,用来存储关于类的描述,包含所有的class和static类型的变量,这些变量在整个程序中唯一,所以方法区也被称为静态区,被所有进程共享。
在堆中,用来存放类的对象,被所有线程共享,在堆中不存放基本类型和对象引用,只存放对象本身。
在栈中,用来存放方法中的局部变量(成员变量在堆区),以及对象的引用,每个线程只包含一个栈区,并且为自身独有,其他栈不可以访问,存在多少个线程就有多少栈。栈有3个部分:基本类型变量区、执行环境上下文、操作指令区。
想要在程序中看到堆溢出的现象,可以执行下面的Java程序:
public class TestHeap { private static int i = 1 ; @Test public void heapOverflow(){ User[] arr = new User[1024]; for(int i = 0 ; i < 1024 ; i ++){ arr[i] = new User(); } } }
由于堆中存储的是对象,当创建的对象过多时就会发生栈溢出,错误提示:java.lang.OutOfMemoryError: Java heap space
要想看到栈溢出的现象,递归可以导致栈溢出,执行下面的代码:
public class TestStack { private static int i = 1 ; @Test public void teststack(){ call(); } public void call(){ System.out.println(i); i ++ ; call(); } }由于递归不停的调用自身,等到内存不够分配,就会出现栈溢出,错误提示:java.lang.StackOverflowError
如果做一些利用内存较大的程序的时候,强大的Java提供了JVM优化功能,可以再控制台中或Eclipse中修改堆栈的大小
java –Xms128m //JVM占用最小内存
4000
–Xmx512m //JVM占用最大内存
–XX:PermSize=64m //最小堆大小
相关文章推荐
- 初识JVM中堆栈的存储
- JVM内存结构,堆栈和方法区分别存储的内容
- eclipse JVM Tomcat 内存堆栈大小设置
- JVM - 2. java堆栈里面到底有什么
- JVM进阶(一)——初识JAVA栈
- JVM 堆栈区域数据存放流程
- 数据存储的常用结构 堆栈、队列、数组、链表
- Java杂谈之垃圾回收和clone以及堆栈的存储
- JVM 内存分配模型概念和java中各种对象的存储
- Java虚拟机详解01----初识JVM
- JVM进阶(一)——初识JAVA栈
- 对比常量存储与堆栈
- 初识Mysql存储过程
- 堆栈详解(数据与内存中的存储方式) .
- JAVA中的数据存储(堆及堆栈)
- jvm中的堆栈与数据结构中的堆栈
- JVM堆栈大小设置--TOMCAT
- JVM 线程堆栈分析过程详解
- 做一个合格的程序猿之MYSQL存储引擎INNODB简介--初识索引(三)
- 堆栈--顺序存储