黑马程序员技术交流社区

标题: 关于内存分析? [打印本页]

作者: 郝强勇    时间: 2013-2-14 14:13
标题: 关于内存分析?
在一个java程序运行的时候,计算机的内存到底会涉及几个部分的划分呢?比如,栈,堆等等···
作者: pzfpang449    时间: 2013-2-14 16:35
Java采用了自动的内存管理方式,程序员实际上不用关心内存管理的细节,那为什么我们仍然需要了解Java内存管理的内幕?
原因有三:
1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序。比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈(stack),
其栈是先进后出的数据结构,这种方式的特点,让程序员编程时,必须特别注意递归方法要尽量少使用,另外栈的大小也有一定的限制,如果过多的递归,
容易导致stack overflow。
2.了解Java内存管理的细节,一旦内存管理出现问题,有助于找到问题的根本原因所在。
3.了解Java内存管理的内幕,有助于优化JVM,从而使得自己的应用获得最佳的性能体验。

JVM的体系结构如下:
如下图所示,JVM的体系结构包含几个主要的子系统和内存区:
类装载子系统 ,负责把类从文件系统中装入内存
GC子系统 ,垃圾收集器的主要工作室自动回收不再运行的程序引用对象所占用的内存,此外,它还可能负责那些还在使用的对象,以减少的堆碎片。
内存区 ,用于存储字节码,程序运行时创建的对象,传递给方法的参数,返回值,局部变量和中间计算结果。


2. Java的内存分配

在Java程序运行过程中,JVM定义了各种区域用于存储运行时数据。其中的有些数据区域在JVM启动时创建,并只在JVM退出时销毁。其它的数据区域与每个线程相关。
这些数据区域,在线程创建时创建,在线程退出时销毁。

希望对楼主有所帮助。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2