zoukankan      html  css  js  c++  java
  • JVM体系结构

    JVM体系结构

    组成


    计算机的组成分为:数据、指令和控制三部分。同样JVM在大致上也可以如此区分为:
    数据:方法区、Heap堆
    指令:程序计数器、虚拟机栈、本地方法栈。(可以通过javap -c -v xxx.class > yyy.txt查看指令)

    • 程序计数器:指向当前线程正在执行的字节码指令的地址(行号)

    • 虚拟机栈:每个方法在执行的时候都会创建一个对应的栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。方法是由线程执行的,线程只是一个执行体,所以也会存储在虚拟机栈中。 stackoutflowerror

    • 本地方法栈:虚拟机使用native方法的服务

    • 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。(class文件等)

    • 堆(heap):java虚拟机中所管理的内存中最大的一块,所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的是存放对象实例,几乎所有的对象实例都在这里分配内存。outofmemorryerror

    概览

    java gc 主要回收的是 方法区 和 堆中的内容

    类加载器

    • 类加载器是什么(1,Custom ClassLoader 2,App ClassLoader 3,Extension ClassLoader 4,Bootstrap ClassLoader)
    • 双亲委派机制(1,自底向上检查类是否已经加载;2,自顶向下尝试加载类)
    • Java类加载的沙箱安全机制

    常见的垃圾回收算法

    • 引用计数

    在双端循环,互相引用的时候,容易报错,目前很少使用这种方式了

    • 复制

    复制算法在年轻代的时候,进行使用,复制时候有交换

    优点:没有产生内存碎片

    • 标记清除

    先标记,后清除,缺点是会产生内存碎片,用于老年代多一些

    • 标记整理

    标记清除整理

    但是需要付出代价,因为移动对象需要成本

  • 相关阅读:
    写在前面
    你应该知道的 RPC 原理
    虚函数 继承 多态
    指针 函数指针 指针数组
    Python使用RMF聚类分析客户价值
    数据挖掘关联分析中的支持度、置信度和提升度
    OpenCV2.4.4+Cmake2.8+Vs2010编译createsamples+traincascade程序用来训练样本
    UNITY + OpenCVSharp调节图像对比度
    使用单精度类型变量
    有符号基本整型
  • 原文地址:https://www.cnblogs.com/bbgs-xc/p/12839024.html
Copyright © 2011-2022 走看看