Java JVM 调优 (一)

JDK体系结构:

- Java的特性 - 跨平台,怎么实现跨平台?

- JVM 内存模型

  • 栈内存:存放局部变量表、操作数栈、动态链接、方法出口
  • 堆内存:存放实例对象和数组,类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行
  • 方法区:
  • 类装载器:负责加载class文件,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构,ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine(执行引擎)决定
  • 程序计数器:每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码,用来存储指向下一条指令的地址,也即将要执行的指令代码(简单的讲,程序计数器就是记录了程序内部的运行流程和跳转顺序

栈 -> 先进后出

  • 当我们执行如下代码,会先为 main (1)方法开辟一块内存,然后为 compute (2)方法开辟一块内存,执行完方法 2 内的逻辑,释放内存,返回结果到  main 然后输出结果,最后释放 main (1) 内存;先执行的方法后释放内存,后执行的方法先释放内存,故   为先进后出

老年代占整个堆的 2/3,年轻代占堆的 1/3 ,new出来的对象放在堆里,优先放在 Eden 元区,当 Eden 元区不断有对象,放满的时候,执行引擎开启 垃圾收集线程 - minor gc 收集内存区域的垃圾对象;

 生命周期

  • minor gc 回收整个年轻代区的内存

引用链条中引用了A对象 标记为非垃圾,并将A对象复制到 Survivo s0 区;再一次未被回收,挪到s1区,并将 Eden、s0区对象干掉,再一次 minor gc 对象依然被引用,挪移到 s0 区,并将Eden、s1区对象干掉,经历一次 minor gc 如果没有被干掉,就会在 s0与s1区相互挪动,每挪一次分代年龄+1,当一个对象的分代年龄达到15之后,会被复制到 老年代;

JDK自带调优工具 - Java VisualVM

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

forward93124

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

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

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

打赏作者

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

抵扣说明:

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

余额充值