JVM性能调优之一JVM内存结构

   这段时间对JVM性能调优进行学习,为了巩固知识和加深理解,先对所学内容进行简单的总结。

【JVM内存模型】

      JVM内存模型主要分为:堆、程序计数器、方法区、虚拟机栈、本地方法栈。

      其中堆和方法区的内存是线程共享的。

1、堆内存(Heap)

  堆内存是JVM中最大一块内存,改内存被所有线程共享。存储内容 包括所有的对象和数组。

  堆内存分为新生代、老年代、永久代(或元空间)。新生代有分为Eden区和Survivor区,而Survivor又分为From Survivor和To Survivor。

  jdk6永久代在非堆内存;jdk7永久代的静态变量和运行时常量池合并到了堆中;jdk8永久代被元空间取代了。

   

2、程序计数器(program Counter Register)

   程序计数器是一块很小的内存空间,主要用来记录各个线程的字节码地址,例如:分支、循环、异常、跳转、线程回复等都依赖于计数器。

    由于java是多线程语言,当执行的线程数大于cpu核数时,线程之间会根据时间片轮询争夺cpu资源。如果一个线程的时间片用完了,或者是其他原因导致这个线程的cpu资源提前被抢夺,那么这个退出来的线程就需要单独一个程序计数器,来记录下一条运行的指令。

3、方法区(Method Area)

       方法区主要是用来存放已经被虚拟机加载的类相关信息。包括类信息、运行时常量池、字符串常量池。类信息包括类的版本、字段、方法、接口和父类等信息。

       JVM在执行某个类的时候,必须经过加载、连接、初始化。而连接又包括验证、准备、解析三个阶段。

 

4、虚拟机栈(VM stack)

     虚拟机栈用来保存方法的局部变量、操作数栈、动态连接方法和返回地址。

 

5、本地方法栈(Native Method Stack)

     本地方法栈和虚拟机栈功能类似,虚拟机栈管理java函数的调用(我理解就是自己写的java方法)。

     本地方法栈用于管理本地方法的调用,本地方法不是java实现的,而是C语言实现的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路奔跑1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值