zoukankan      html  css  js  c++  java
  • Java内存结构

    Java 堆(Java Heap):

            概念:Java 堆 是Java 虚拟机管理的内存中最大的一块。是被所有线程共享的一块内存区域。在Java 虚拟机启动时候创建。

            作用:所有实例对象,数组都要在堆上分配。

            别名:GC 堆(garbage collected heap),因为堆是垃圾回收器管理的主要区域

            堆的结构:

                内存回收角度:新生代(eden区,s0,s1),老年代

                内存分配角度:还有可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB))

    如果堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。

    Java虚拟机Java Virtual Machine Stacks):

       概念:java 虚拟机栈是描述的java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

       作用:存放基本数据类型,对象引用,局部变量

       每个线程都是独立栈

       这个区域规定了两种异常状态:如果线程请求的栈深度大于虚拟机所允许的深度,则抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,在扩展是无法申请到足够的内存,就会抛出OutOfMemoryError异常。

    本地方法栈(Native Method Stack):

         Java 语言调用外部语言(C语言,虚拟机使用到的native方法服务

    方法区:jdk1.8之前叫做永久区,垃圾回收机制一般不会去回收的,但是full gc 还是回去回收的。

          概念:线程共享的内存区域

          作用:存储类信息、常量、静态变量、即时编译器编译后的代码等数据。

          运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在加载后进入方法区的运行时常量池中存放。

    执行引擎:
    虚拟机核心的组件就是执行引擎,它负责执行虚拟机的字节码,一般户先进行编译成机器码后执行

     

       

     

  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11116572.html
Copyright © 2011-2022 走看看