zoukankan      html  css  js  c++  java
  • java虚拟机 jvm java堆 方法区 java栈

    java堆是java应用程序最密切的内存空间。

    差点儿全部的对象都存在堆中。java堆全然自己主动化管理,通过垃圾回收机制,垃圾对象会自己主动清理。不须要显式释放。

    依据java垃圾回收机制的不同。java堆可能有不同的结构。

    最常见的是将整个java堆分为新生代和老年代。跟人类几乎相同了。老龄化就有可能找上帝去了,新生代存放新对象或者年龄不大的对象,老年代存放老年对象。新生代有可能分为eden区、s0区和s1区,s0区和s1区也被称之为 from to区域。他们是两块大小相等能够互换的内存空间例如以下图所看到的:

     

    在大多数情况下。对象首先被分配在eden区,再一次新生代回收后,假设对象还存在,则会进入s0或者s1,之后没经过一个新生代回收,年龄+1.当对象年龄达到一定条件后,就会老龄化进入老年代。

    以下一个简单的实例展示java堆、java方法区、java栈之间的关系。代码例如以下:

    package cn.xhgg.test;
    public class HeapTest {
    private int id;
    public HeapTest(int id) {
    this.id = id;
    }
    public void show() {
    System.out.println("id:  "+id);
    }
    public static void main(String[] args) {
    HeapTest h1 = new HeapTest(1);
    HeapTest h2 = new HeapTest(3);
    h1.show();
    h2.show();
    }
    }


    HeapTest 实例引用类型肯定分配在堆中、h1h2局部变量存放在java栈中、并指向堆中的两个实例。

    例如以下图所看到的:



  • 相关阅读:
    【模块汇总】
    【葵花宝典@2020Python面试】
    【数据库汇总】
    【Python初阶汇总】
    【葵花宝典@职场动物园】
    【2020Python修炼记】web框架之Django实战-BBS-高仿版博客园
    【2020Python修炼记】web框架之 权限管理+Auth模块
    Java SE基础2:Class类与反射 反射破坏了封装吗?
    Java SE基础1:面向对象三大基本特性
    11.堆与堆的应用
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7396780.html
Copyright © 2011-2022 走看看