码迷,mamicode.com
首页 > 其他好文 > 详细

关于JVM个人浅谈(一)

时间:2015-08-05 10:29:59      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:jvm

  Java虚拟机是Java程序运行的基础,也是深入理解java的必备知识。

  首先JVM的内存分布主要有:程序计数器,虚拟机栈,本地方法栈Java堆方法区。其中标红的表示相对更重要。

  1)程序计数器

程序计数器是一块很小的内存,是每一块线程的私有空间,主要负责为每一个线程记录下一条需要运行的指令。如果当前线程正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果电器一个线程正在执行一个Native方法,则程序计数器为空。


  2)Java虚拟机栈

Java虚拟机栈是线程的私有空间,它保存方法的局部变量,部分结果,并参和方法的调用和返回。一般和本地方法栈归到一类,没有做过细的区分。在Java虚拟机规范中,定

义了两种异常与栈空间有关:stackOverflowErro和OOM。如果线程在计算过程中,请求栈的深度大于最大可用深度,则抛出SOF;如果在扩展栈的过程中没有足够的内存空间来支持栈的扩展,则抛出OOM。当然这里需要强调一点,当花在GC的时间超过了GCTimeLimit一样会抛出OOM。在Hot Spot虚拟机中,可以使用-Xss来设置栈的大小,栈的大小直接决定了函数调用的可达深度。这里需要注意一点是:函数嵌套调用的次数由栈的大小决定,栈越大,函数嵌套调用次数越多,对于一个方法而言,他的参数越多,内部局部变量就越多,他的栈帧就越大,器嵌套调用次数就越少。

  3)Java堆(共享区域)

      Java对可以说是Java内存中最重要的部分了,几乎所有的对象和数组都是在堆分配空间的。Java堆分为新生代和年老代。如果Java堆中刚刚产生的对象在经过几轮MiniorGC后仍然存活的话,就会被挪至年年老代。

     新生代又可以划分为eden,surivivor space()简称s0和survivor space1()简称s1.。eden是对象刚出生的地方,大部分对象刚出生都会存放到这里。s0

与s1为survivor空间,这里也是MiniorGC的发送区域。具体如下图:

技术分享  技术分享 技术分享

关于如何配置堆大小,后面会做解释。

4)方法区(共享区域)

    方法区叫永久区域,它保存大部分来之于class的文件,常量池,经过多次MiniorGC仍然存活的对象,以及静态文件。通过-XX:MaxPermSize=进行设置。


好了,现在介绍完Java虚拟机的分布,下一章将介绍GC的基本回收算法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于JVM个人浅谈(一)

标签:jvm

原文地址:http://blog.csdn.net/barnetthe/article/details/47291853

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!