zoukankan      html  css  js  c++  java
  • java内存区域

    运行时的内存

    1. 程序计数器

      为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立 的程序计数器。即线程之间的计数器之间素影响,计数器放在线程私有的内存中。

    2. java虚拟机栈

      线程私有。

      方法调用会创建栈帧用来存放局部变量、操作栈、动态链接、方法出口等信息。

      虚拟机规范中对线程栈深有定义,超过会oom

    3. 本地方法栈

      与虚拟机栈作用相同,不同在于存放Native方法

    4. java堆

      所有对象实例都在这里分配内存(JIT技术弥补),是GC的主要工作区。

    5. 方法区

      存放虚拟机的类信息、常量、静态变量、即时编译器编译后的代码等数据。因此是各个线程共享内存区域。

    6. 运行时常量池

      方法区的一部分

      存放:字面量、符号引用、

    7. 直接内存

    对象访问

    Object obj = new Object()

    new Object()在java堆中开辟内存存放所有Object类的实例数据值。

    开辟的内存长度不是固定的。且java堆中还要保存访问对象类型的、父类、实现接口、方法等信息的地址。

    Object obj就是一个对象类型引用。那么如何通过引用来定位java堆中位置呢?一般有两种方式 。

    • 句柄访问方式。

    • 直接指针访问方式 。

    句柄的好处:对象被移动,不需要修改reference

    直接指针好外:速度快,节省一次指针定位的时间开销。

    但是使用第二种方式 。

  • 相关阅读:
    小小的封装了一个pie的echarts
    recent.css常用的页面初始化样式
    bootstrap表格多样式及代码
    Java内存回收机制
    栈帧
    互斥锁和条件变量
    UML类图的常见关系
    堆栈详解(数据与内存中的存储方式)
    PR消减视频中的鼠标声
    SmartPlant Review 三维视图快捷键
  • 原文地址:https://www.cnblogs.com/yvzhu/p/13960720.html
Copyright © 2011-2022 走看看