工作中关于Jvm的学习整理

刚刚工作,工作中慢慢懂得自己知道的真的是沧海一粟,并且深感书到用时方恨少。平时也比较忙,一些知识点的也记录在自己的本子上,整理的也比较难。想了想还是尽量写到自己的博客上吧,以便自己随时翻阅。---2019/11/21

几周前维护的开发环境的机子,由于没有机子做测试,就把两台机子的应用合并到一台机子上了,打了tar包,做了应用迁移。

那天下班前作的迁移,应用正常都在。第二天上班发现,ssh,挂了上不去了,有开着telnet 也用不了了。没办法只能去重启机子,重开服务,以为是ssh版本问题,没太在意,没过多久,测试又说机子上不去。检查了机子ssh版本,发现没什么不对。用

ps aux |  head -1 ;  ps aux |  sort -rn +3 |  head -10 看了下java 内存占用情况。发现内存基本都没了。

应用迁移忘了,改小java 的堆容量,于是乎就改了启动脚本 重新分配了堆的大小。(改成了1G :-Xmx1.5G -Xms1.5G)

最后又想起来自己jvm这一块的知识比较薄弱于是翻书,看博客,看文档。补了点jvm的知识。算是比较大概的了解jvm。

现在抽时间做做笔记:

jvm 内存分类

        线程私有:pc程序计数器,jvm虚拟机栈,本地方法栈

        线程公有:堆,方法区

  补充 : 直接内存(direct)又称堆外内存,不在jvm中,常由于NiO 创建的直接缓冲区(DirectByteBuffer),直接缓冲区,能避免io操作时数据的堆内外复制的过程,能提升系统性能;

jvm中的内存分配策略

       堆的分区:新生代 老年代

      其中新生代又细分为:eden区  servier区

    新对象优先分配在eden区,大对象直接进去老年代。(大对象指 大的数组对象,很长的Stirng,大对象的阈值可以通过jvm参数指定)

     eden 区每次发生一次 Mintor GC  对象年龄 +1 ,当对象年龄到达一定值 一般是5岁则从eden 进去servier区

servier 区有动态年龄判断机制,可以把符合条件的对象进入老年代

   动态判断年龄机制:  在servier区某一个年龄段(X)的对象的数量>=servier区对象数量的一半时,则大于该年龄段(X)的对象进去老年代。

内存分配保证机制:假如新生代满了,后续对象直接进入老年代。

GC算法:

标记-清除法、未完待续~20191122

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值