java的堆与栈
来源:互联网 发布:数组一般什么时候用 编辑:程序博客网 时间:2024/04/28 07:16
a、堆
java程序在运行时创建的所有类实例或者数组都放在堆中,一个java虚拟机实例只能有一个堆空间,因此所有的线程都共享这个堆,又由于java程序独占一个java虚拟机实例,因而每个java程序都有它自己的堆空间,它们彼此不干扰。但是一个java程序的多个线程却共享着同一个堆空间。因此需要考虑线程访问对象的同步问题了。
堆空间也不必是连续的内存空间,在程序运行时它可以动态的扩展和收缩。只要有一个对象引用虚拟机就必须快速定位对象实例的数据。另外通过对象引用访问相应的类数据(存储于方法区的类型信息)。因此在对象中通常有一个指向方法区的指针。
b、栈
每当启动一个新的线程的时候,java虚拟机都会为他分配一个java栈。java栈是由许多帧组成的。java虚拟机只会对Java栈执行两种操作:以帧为单位压栈或者出栈。当一个线程调用一个java方法的时候,虚拟机就会在该java行程的java栈中压入一个新帧,这个新帧就是当前帧。这个方法就是当前方法,这个方法所在的类就是当前类,当前类的常量池就是当前常量池。当前方法会跟踪当前类和当前常量池。当前帧会存储参数,局部变量,中间运行结果。
java方法可以两种方式完成,通过return返回或者抛出异常终止。虚拟机都会将当前的帧弹出java栈然后释放掉,这样上一个方法的帧就成为当前帧。
文章来源于: <<Inside the JVM>>
0 0
- Java的堆与栈
- Java的栈与堆
- Java 的堆与栈
- java的堆与栈
- Java的栈与堆
- java的堆与栈
- java的堆与栈
- java的堆与栈
- Java的栈与堆
- Java栈与堆
- java 栈与堆
- Java栈与堆
- Java栈与堆
- Java栈与堆
- Java栈与堆
- Java栈与堆
- Java栈与堆
- Java栈与堆
- Zip.tar
- Next Permutation
- l énovo
- Android开发中自定义ListView中存在ImageButton不响应ListItemClick单击事件详细d飞解决办法
- position属性
- java的堆与栈
- android.os.NetworkOnMainThreadException异常
- [API翻译]PagerAdapter - android SDK
- 工作日志 4.20
- 如果编辑不懂文章内容合法与否请访问所附链接地址内容自学
- 2015 OpenCloud峰会总结
- android 对话框和弹出框
- svn密码查看
- ORA-00604 ORA-16000 dataguard standby db(open read only)连接问题