java增强: jvm内存模型

  1. jvm存储模型:堆,栈,方法区....

  2. jvm各区域内存:调配控制

  3. jvm内存的动态分配,回收, (对象的创建,垃圾回收gc)

  4. jvm性能监测工具: jconsole, jvisualvm, jmap   (gc监测工具:jstat)


 JVM (Java Virtual Machine, 它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的, 分为JVM指令系统 ,JVM垃圾回收机制, JVM运行时数据区-内存模型)

JVM内存的各区域作用

1) 方法区

用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码等信息。方法区是线程间共享的,当两个线程同时需要加载一个类型时,只有一个类会请求ClassLoader加载,另一个线程会等待。

2) 堆区

虚拟机中用于存放对象与数组实例的地方,垃圾回收的主要区域就是这里(还可能有方法区)。如果垃圾收集算法采用按代收集(目前大都是这样),这部分还可以细分为新生代和老年代。新生代又可能分为Eden区,From Survivor区和To Survivor区,主要是为了垃圾回收。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。

3)栈区

虚拟机栈也是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法,就会生成一个栈帧(Stack Frame)用于存储方法的本地变量表、操作栈、方法出口等信息,当这个方法执行完后,就会弹出相应的栈帧。

栈帧分为三部分:局部变量区(Local Variables)、操作数栈(Operand Stack)和帧数据区(Frame Data)。

如果请求的栈的深度过大,虚拟机可能会抛出StackOverflowError异常,如果虚拟机的实现中允许虚拟机栈动态扩展,当内存不足以扩展栈的时候,会抛出OutOfMemoryError异常。

4)本地方法栈

与虚拟机栈类似,只是是执行本地方法时使用的。

5) 程序寄存器

类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器。这一个区域不会有OutOfMemeryError。当执行Java方法时,这里存储的执行的指令的地址,如果执行的是本地方法,这里的值是Undefined

JVM内存分配过程

JVM堆内存: 调配

( -Xms400m -Xmx400m -XX:NewSize=300m -XX:MaxNewSize=300m

-XX:NewRatio=1 :       年老代内存 / 年轻代内存=1

 -XX:SurvivorRatio=8 : eden区内存 / suvivor区内存=8

-XX:+UseSerialGC          
-XX:+UseParallelGC        
-XX:+UseParallelOldGC    
-XX:+UseConcMarkSweepGc
-XX:+UseG1GC   )       

堆:总内存大小-Xms400m: 最小值400m-Xmx400:  最大值400m 
 old区  
 young区-XX:NewSize=300m  初始值300m-XX:MaxNewSize=300m   最大值300m
  eden区-XX:NewRatio=1  伊甸区/单个survivor区大小的比例
  survivor-from区 
  survivor-to    区 

JVM垃圾回收算法

 JVM性能监测工具

(-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gclogs   )

启动一个java进程: 一个死循环

查看系统进程

启动jconsole:  jconsole

启动jvisualvm:  jvisualvm

使用jmap -heap 查看jvm的某进程状态

使用jstat -gc 查看gc状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

根哥的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值