zoukankan      html  css  js  c++  java
  • JVM运行时数据区域

    1. 运行时数据区域?
    2. Java内存模型?
    3. 如何判定一个对象是否存活?
    4. 什么样的垃圾才能被回收?什么时候会回收?
    5. 新老永久区?
    6. 垃圾回收算法、回收器分类、CMS原理?
    7. java内存分配与回收策率以及Minor GC和Major GC ?
    8. 内部类的存储方式?

     https://www.zhihu.com/question/27339390


    一、运行时数据区域?

      

      

      1. 程序计数器:(一块较小的内存空间,线程私有)

        a. 当前线程所执行的字节码的 行号指示器;记录当前执行到哪里了,线程间轮流切换时保存执行位置。

        b. 唯一一个没有规定有OutOfMemoryError的区域。

      2. Java虚拟机栈:(线程私有)

        a. 生命周期与线程相同。

        b. 每个方法调用时,会创建一个栈桢(Stack Frame),并添加到虚拟机栈中。

        c. 栈桢中保存了这个方法的:局部变量表、动态链接、操作数栈、方法出入口等信息。

        d. 如果线程请求栈深度大于虚拟机允许的最大深度,会抛出StackOverFlowError异常。如果在动态扩展栈深度过程中,无法申请到足够内存,会抛出OutOfMemoryError。

      3. 本地方法栈:(线程私有)

        a. 和Java虚拟机栈类似,它执行的是Native的方法。

      4. 堆:(线程共享)

        a. 虚拟机管理的内存中最大的一块区域,所有 对象实例 和 数组 都要在堆上分配。

        b. 堆是垃圾收集器管理的主要区域,因此常叫做 GC堆。

        c. 堆大小可固定,也可扩展(-Xmx -Xms控制);若堆中没有足够内存完成实例的分配,且堆也不能扩展,将会抛出OutOfMemoryError。

      5. 方法区:(线程共享)

        a. 虚拟机加载的类信息,常量(即final static),静态变量(static),即时编译器编译后的代码等数据。

        b. 当方法区不能满足内存分配时,会抛出OutOfMemoryError。

      6. 运行时常量池:

        a. 方法区的一部分。

        b. 用于存放编译期生成的各种 字面量(即直接数,其中又包含 字符串常量、基本数值) 和 符号引用;

           - 可能过反编译(javap -verbose Test.class) 查看Constant pool里保存的信息。

           - 符号引用加载到虚拟机会转化为直接引用,此时直接引用仍然保存在运行时常量池中。

        c. 当常量池无法再申请到内存时会抛出 OutOfMemoryError。

      7. 直接内存:

        a. 直接内存并不是虚拟机运行时数据区的一部分,也不是规范中定义的内存区域。

        b. NIO中引入了基于Channel与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。这样能显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。

        c. 直接内存分配不会受到堆大小的限制,它会受到操作系统或物理内存的限制,所以也会导致OutOfMemoryError。

     

  • 相关阅读:
    2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计
    2018-2019-1 20165318 实验三 实时系统
    2018-2019-1 20165318《信息安全系统设计基础》第九周课上测试
    2018-2019-1 20165318 20165322 20165326 实验二 固件程序设计
    2018-2019-1 20165318《信息安全系统设计基础》第八周课上测试
    2018-2019-1 20165318 20165322 20165326 实验一 开发环境的熟悉
    2018-2019-1 20165318《信息安全系统设计基础》第六周课上测试
    20165318 缓冲区溢出漏洞实验
    20165318 2017-2018-2《Java程序设计》课程总结
    缓冲区溢出漏洞实验
  • 原文地址:https://www.cnblogs.com/mzzcy/p/7039424.html
Copyright © 2011-2022 走看看