Java虚拟机的总结

什么是Java?

Java是世界上最流行的编程语言,语法由Java Language Specification 规定,针对于JVM的编程语言。

为什么用Java ?

1.跨平台
    ①通过不同操作系统安装不同的Java虚拟机达到一份代码处处运行
2.自动垃圾回收
    ①使程序员不用再担心内存释放的问题,可以专注于业务逻辑的实现

Java的核心:JVM
        JVM (Java virtual machine)全称:Java虚拟机 简单说就是安装在操作系统上的另一个虚构的操作系统,但是这个操作系统只针对Java翻译后的字解码文件,通过字解码上的信息,来调用操作系统的函数库,来模拟真实的计算机,执行Java语言的各种指令。
在这里插入图片描述

虚拟机的组成部分:

类装载器:将Java本地的类库与编写的类库装载到方法区。
公开的区域:
        方法区:存放Java各种类,方法,常量等等东西的地方
        堆:存放对象的地方,当程序new一个对象时,这里会创建一块内存空间

               私有的区域:
        虚拟机栈:执行方法的地方,当运行到一个方法之后,会以先进后出的方法存 放一个一个方法执行完一个方法后会先释放掉这个方法。
        本地方法栈:将虚拟机栈中执行的指令,作用到物理机调度本地函数的地方
         程序计数器:用于标记程序运行位置,在多线程情况下,线程切换时,程序运 行到哪个地方,由它来记录。

JVM运行流程:

在这里插入图片描述

解放指针的:

GC自动垃圾回收:

        GC(Garbage Collection)自动垃圾回收,JVM的核心之一,使得程序员可以 专心的安排业务逻辑不必担心内存空间浪费的问题。

GC把内存空间分为了三个区域:在这里插入图片描述

GC如何知道哪部分内存需要释放?

1.什么样的对象需要被释放?

判断存活有两种算法:
      1)引用计数算法
    给对象添加一个引用计数器,当有地方引用它时,计数器值就加1;当引用失    效时, 计数器值就减1;计数器为0的对象就是不被使用的。
    2)可达性分析算法
通过GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

2.怎么释放垃圾?

三种方式:
     1 标记-清除算法:
通过可达性分析方式找到所以需要回收的对象,并进行标记,在标记完成后统一回收所有被标记的对象。
主要问题是容易参数内存碎片。
     2 复制算法
它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收,缺点是每次都这样大量复制,太影响性能
    3 标记-整理算法
标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。以此避免内存碎片。

分代收集法,根据对象存活的生命周期分为:新生代、老年代和永久代;
1)新生代:每次都回收大量对象—>复制算法
2)老年代:每次都回收少量对象—>标记整理法
3)永久代:存储class类、常量、方法描述,回收废弃常量和无用类

当然,Java肯定不止这两个优势,同时它通过世界上最大的开源社区,成为了最流行的编程语言。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值