JVM学习

1.    JVM是java虚拟机,通过类装载器状态到内存,内存又分为几个区域

  方法区 : 常量池 静态变量

  栈: 和线程绑定在一起,记录这个线程怎么走的,比如调用一个方法就会创建一个栈帧

  方法栈

  堆  : 对象存储的空间, 垃圾回收也是都在这

  程序计数器:保存当前线程执行的内存地址、

 

2.    判定是否是垃圾的方法

引用法,引用为0就是垃圾

可达性算法

 

3.    回收算法

标记清除法

复制法,就是分两块区域

标记整理: 标记好区分开来清理

 

4.    分代

年轻代Eden区和2个Survivor区(分别叫from和to)  用的复制算法

老年代  用的标记整理算法

持久代

 

5.    Jvm的类加载过程

验证: 确保加载的类信息符合JVM规范,没有安全方面的问题

准备: 正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都          将在方法去中进行分配

解析: 虚拟机常量池的符号引用替换为字节引用过程

 

6.    jvm调优参数设置

-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以  调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制

-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM     会减少堆直到 -Xms的最小限制

-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap     -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代      大小。

 在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影 响较大,Sun官方推荐配置为整个堆的3/8。

-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个  Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。

-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大 小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,

 减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,  不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是    128k够用的,

大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和  threadstacksize选项解释很类似,官方文档似乎没有解释,

 在论坛中有这样一句话:"-Xss is translated in a VM flag named ThreadStackSize”一般设置   这个值就可以了。

-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。

-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。

 

https://blog.csdn.net/zhan_lang/article/details/88567569

 

7.    jvm调优工具

命令

jps

jinfo

jstat

jstack

jmap

jhat

https://www.cnblogs.com/wxisme/p/9878494.html

https://blog.csdn.net/liuyanlin007/article/details/89560285

https://blog.csdn.net/moneyshi/article/details/50786786

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值