Java运行时数据区 ~待续

总是记不住这几个运行时数据区,还是再捋一遍吧。

常见分类,一共5个区域,分为2种类型:

  1. 线程共享
    1. 方法区 Method Area
    2. 堆内存 Heap
  2. 线程独享
    1. 虚拟机栈 VM Stack
    2. 本地方法栈 Native Method Stack
    3. 程序计数器 Program Counter Register

1.方法区

存储已被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码缓存等数据。

JDK6时,计划放弃永久代,逐步改为本地内存来实现方法区的计划;

JDK7,把原本放在永久代的字符串常量池、静态变量等移出;

JDK8,完全废弃永久代的概念,改用在本地内存中实现的元空间Meta-space来代替,把JDK7遗留的(主要是类型信息)全部移到元空间中。

2.堆内存

G1收集器出现为分界,之前,业界绝对主流的Hotspot虚拟机,内部垃圾收集器全部都基于“经典分代”来设计,需要新生代、老年代收集器搭配才能工作;之后,Hotspot虚拟机里也出现了不采用分代设计的新垃圾收集器。

所有线程共享的Java堆中,可以划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB),以提升对象分配时的效率。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章