博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java虚拟机各内存区域的位置及功能的介绍
阅读量:4462 次
发布时间:2019-06-08

本文共 1725 字,大约阅读时间需要 5 分钟。

Java虚拟机运行时数据区:

相关区域介绍:

程序计数器:

  功能:当前线程所执行字节码的行号指示器。若是Java方法记录指令地址,若为Native方法,则不记录

  隔离性:线程隔离

  Error:无

Java虚拟机栈

  功能:描述Java方法执行的内存区:每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

  隔离性:线程隔离

  Error:线程请求的栈深度大于虚拟机所允许的深度时,抛出 StackOverflowError 异常;

     动态扩展时无法申请到足够的内存,抛出 OutOfMemoryError 异常。

  局部变量表:局部变量表所需的内存空间在编译期间分配,包含各种基本数据类型,及对象引用。

本地方法栈:

  功能:为虚拟机使用到的Native方法服务。(虚拟机栈为Java方法(也就是字节码)服务)

  隔离性:线程隔离

  Error: StackOverflowError  和 OutOfMemoryError

Java堆:

  功能:存放对象实例

  隔离性:线程共享

  Error:OutOfMemoryError

  细分:内存回收的角度:新生代、老生代

     内存分配的角度:Java堆中可能划分出多个线程私有的分配缓冲区。

  虚拟机限制:不需要连续内存空间,可以固定大小也可扩展

 

JVM将内存划分为:New(年轻代)Tenured(年老代)Perm (永久代) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx,-Xms,前者是JVM最大允许分配的堆内存,后者是JVM初始分配的堆内存)指定的内存中分配,Perm不属于堆内存,由虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。年轻代(New):年轻代用来存放JVM刚分配的Java对象年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。 New又分为几个部分:Eden:Eden用来存放JVM刚分配的对象Survivor1Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。   堆配置:-Xms:初始堆大小-Xmx:最大堆大小(如果此值大于-Xms的大小,则按需分配,因此为了避免每次垃圾回收完成后JVM重新分配内存,两个只很多时候设置成相同值)-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值,如:n=3,表示年轻代和年老代比值是1:3-XX:SurvivorRatio=m:年轻代中Eden区与两个Survivor区的比值。注意Suvivor区有两个,大小一样大。如:m=3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5XX:MaxPermSize=p:设置持久代的大小 参考

 

方法区:

  功能:存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码等。

  隔离性:线程共享

  Error:OutOfMemoryError

     虚拟机限制:不需要连续内存空间,可以固定大小也可扩展;此区域内存的回收主要针对常量池的回收和对类型的卸载。

  运行时常量池:方法区的一部分

    功能:用于存放编译期生成的各种字面量和符号引用,及翻译出来的直接引用

     特性:动态性,运行期间也可以将新的常量放入池中。

     Error:OutOfMemoryError

 

这有一篇更详细的介绍:

转载于:https://www.cnblogs.com/tf-Y/p/5262249.html

你可能感兴趣的文章
视图系统
查看>>
Palindromes _easy version
查看>>
vue 小记
查看>>
CURRICULUM VITAE
查看>>
菱形缓冲器电路
查看>>
Groovy 程序结构
查看>>
使用 WordPress 的导航菜单
查看>>
input只能输入数字和小数点,并且只能保留小数点后两位 - CSDN博客
查看>>
js 不固定传参
查看>>
远程调试UWP遇到新错误Could not generate the root folder for app package ......
查看>>
[倍增][最短路-Floyd][dp]
查看>>
SpringAOP用到了什么代理,以及动态代理与静态代理的区别
查看>>
利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(1)
查看>>
【leetcode】Populating Next Right Pointers in Each Node
查看>>
获取请求参数乱码的问题
查看>>
代码实现:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称...
查看>>
Android客户端测试点
查看>>
Jquery:怎样让子窗体的div显示在父窗体之上
查看>>
01概率
查看>>
Shell脚本
查看>>