Java核心知识点-JVM结构和工作方式

来自:Shawn_wang - 博客

链接:http://blog.csdn.net/u013782203/article/details/50953336

程序猿自媒体已获转载授权


一、JVM体系结构 


1.1 JVM中主要包括(PC寄存器,栈,)(堆,方法区,)本地方法区




一个Java线程中,包括PC寄存器(保存当前执行的指令位置),和栈帧(一个方法对应一个栈帧),本地变量(保存计算中的临时数据),当一个线程结束后,线程内所有数据就自动销毁,不需要垃圾回收。




  • PC寄存器和栈




将1压入栈中,将2压入栈中,将1,2弹出计算1+2,将3压入栈顶,OVER。


  • 方法区:


方法区是堆的一部分,就是java的永久区PermGen。 




  • 本地方法区


本地方法区是为了JVM运行native方法(c/c++等语言写的方法)准备的区。

1.2 内存分配方式:


  • 静态内存分配:


在编译时确定需要的内存空间,当程序加载时系统把内存一次性分配给它。静态内存分配是在java栈上分配的,当方法结束时对应的栈帧也就撤销,所以分配的内存空间就被回收。


public void staticData(int arg){//int类型占4个字节

    String s="haha";//引用类型占4个字节,(常量池中)

    long l=1.00;//long占8个字节

    Long lg=1L;//原生类型,这里是引用引用占4个字节(常量池中)

    Object o=new Object();//(堆中)

}


上面一段代码会占用内存空间4+4+8+4+4=24。


  • 动态内存分配:


程序执行的时候才知道要分配的内存大小,当对象创建的时候,在堆上给对象分配一块空间,空间回收时间不定,由JVM垃圾回收器管理。


1.3 垃圾回收算法 




  • 新创建的对象会分配到Young的Eden上,如果Eden满了就触发MinorGC,将Eden区中存活的对象保存到Survivor的一个区中,同时将Survivor另一个区存活的对象也保存到Survivor这个区中,Survivor区始终有一个区是空的。

  • survivor的一个区满了之后,会将对象直接放到Old区,Old区满了会触发FullGC,将回收整个堆空间。

  • perm区主要保存class对象,垃圾回收也是FullGC触发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值