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

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

    但是使用第二种方式 。

  • 相关阅读:
    c++ stl常用
    c++流操作
    操作符重载operator
    函数指针和指针函数
    指针c艹
    Oracle 账户锁定问题解决办法
    java回收算法
    JDK与JRE的区别
    关于getClass().getClassLoader()
    After reading a picture than out a picture
  • 原文地址:https://www.cnblogs.com/yvzhu/p/13960720.html
Copyright © 2011-2022 走看看