在阅读《深入理解java虚拟机--周志明》时,第二章没有十分清楚的解释新生代,老年代,永久代的详细概念。通过网上浏览,渐渐梳理清晰了。


java的内存模型,分别为

【堆,方法区(非堆)】→ 线程共享

【虚拟机栈,本地方法栈,程序计数器】→线程隔离

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

程序计数器,记录线程执行位置

虚拟机栈,java方法调用时会创建一个栈帧(其中有局部变量表,由此得出方法的局部变量(如基本类型,对象引用等)是创建在栈中的

本地方法栈,与虚拟机栈类似,不同的是为Native方法(书中没有介绍什么是Native方法,简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java堆,存放对象实例和数组

方法区,存储加载的类信息、常量、静态变量、编译后代码  

--运行时常量池(在方法区中),保存class符号引用以及直接引用

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java堆分成Eden,Survivor,Old

方法区在JDK7中分为PermGen(永久代),CodeCache,而在JDK8中,取消了永久代的概念,变成了元空间MetaSpace。


jvm01--java内存区域

用Jcosole或者Jvisualvm可以看出来

jvm01--java内存区域

相关文章:

  • 2021-12-12
  • 2021-09-27
猜你喜欢
  • 2021-09-07
  • 2021-09-26
相关资源
相似解决方案