zoukankan      html  css  js  c++  java
  • java虚拟机知识和 内存 堆(heap)、栈(stack)和方法区(method)

    1.虚拟机实例

    每个java程序都运行在自己的java虚拟机实例中,运行三个java程序就会得到三个虚拟机实例

    守护线程(虚拟机自己使用,比如说执行垃圾收集任务的线程)

    非守护线程(java初试线程,启动main方法的主线程,以及main中启动的的其他线程)

    java虚拟机实例生命周期:当程序的所有非守护线程终止,虚拟机实例也会跟着退出,只要还有任何非守护线程在运行,那么这个java程序也在运行(虚拟机仍然存活)

    JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
    堆区:
    1.存储的是new出来的对象和数组,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
    栈区:
    1.每个线程包含一个栈区不共享,栈中保存的是所有的变量,包括基本类型和引用类型,栈中的每个变量都包含类型、名称、值这些内容,只不过基本类型变量的值为一个具体的值,而引用类型的变量的值为对象在堆中的地址。
    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

    4.存储方法的调用状态-包括他的局部变量,传来的参数,返回值,运算的中间值等
    方法区:
    1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

    3.字符串常量池就是存放在方法区。(具体原因参见:http://zangxt.iteye.com/blog/472236)

    java虚拟机中引用类型:

    类类型:对类实例的引用

    接口类型:对实现接口的某个类实例的引用

    数组类型:数组对象的引用

    null表示该引用变量没有引用任何对象

  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/9179194.html
Copyright © 2011-2022 走看看