• 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

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

    但是使用第二种方式 。

  • 相关阅读:
    浅析Java CompletionService
    经验总结13--EF配置
    消息摘要算法-HMAC算法
    03012_预处理对象executeQuery方法(实现数据库的查询)
    GO学习笔记:函数defer
    GO学习笔记:函数传值与传指针
    GO学习笔记:函数作为值、类型
    GO学习笔记:函数Panic和Recover
    GO学习笔记:import
    GO学习笔记:struct类型
  • 原文地址:https://www.cnblogs.com/yvzhu/p/13960720.html
Copyright © 2020-2023  润新知