【java】JVM原理及应用

    java流行起来的原因无非是跨平台,垃圾回收这些,而VM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行,JVM是java的重中之重,在Java这条路上能走多远,主要取决于对JVM的理解程度。


1.内存分析


最初学习java的时候接触内存的概念是从马士兵的视频当中,不过作为初学,对于它的理解也是比较简单粗暴的,下面这张图是进一步学习之后的成果。




区域分析:


引擎区:引擎执行加载等过程需要内存

方法区:存放类信息、常量、静态变量,即类对象,也称为永久代/permgen space/non-heap

栈区:包含本地方法栈和java方法栈,是执行代码所占的内存,heap

堆区:堆存放的是对象,包含新生代和老年代,其中新生代又分为eden、s1、s2


2.线程栈与栈帧的执行


栈是JVM用于执行函数的区域,一个线程对应一个线程栈,一个线程栈对应一到多个栈帧,一个栈帧对应一个方法的执行,栈帧中存放的是局部变量,执行代码,返回地址。




如果一个 web请求到达,处理一次为controller.a调用service.b调用dao.c,它是首先启动一个新线程,及线程栈,再将a/b/c 为栈帧亚茹到线程栈中,最后执行c/b/a返回reponse.


3.垃圾回收算法


(1)标记-清除算法(Mark-Sweep)

下面这两张图分别表示了回收前和回收后的状况,白色的表示未被占用,绿色的表示正在使用,蓝色的表示即将回收,标记回收就是先把即将回收的标记,然后把标记的内存回收。就像我们平时收拾桌子,直接把废物去除。





(2)复制算法(Copying)

颜色表示与上图表示是一样的,将内存分为两等份s1s2,将s1中存活对象全部复制到s2,然后清空s1。就像有一篮子苹果有好有坏,现在我重新拿了另一个篮子,把好的苹果挑到这个篮子里面,然后把原来篮子里面的倒掉。





(3)标记-整理算法(Mark-Compact)

针对的是老年代的回收,首先将正在使用的对象标记,然后往一端移动,最后清除边界以外的内存。像整理书架,抽调中间的书之后把剩下的书往里推使挨着放好。





写在后面:

对于垃圾回收,可以通过引用计数法和可达性分析法来判断哪些是需要回收的对象,垃圾回收的过程目前还不能很系统理解,这一块还需要一个反复的学习和理解,等这个月研究生备考结束就该好好的学习研究一下了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值