JVM性能调优(一)运行时内存

1,运行时内存图
        

 2,具体区域介绍
        线程私有区域:程序计数器、虚拟机栈、本地方法栈
        线程共享区域:元空间、堆、直接内存
        1>程序计数器:是一块很小的空间,主要用来当前多线程代码执行的位置,和下一条要执行的指令
        2>虚拟机栈:在线程运行时,在执行每一个方法的时候,都会打包成一个栈帧放入Java虚拟机栈中。每一个栈帧存储了局部变量表、操作数栈、动态连接,方法出口等信息。局部变量表存储了编译器可知的各种数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)。栈帧参数调整:栈帧的默认空间为1M,可使用-Xss调整。例如 -Xss256k
        3>本地方法栈:和虚拟机栈一样,只不过这个空间只分配给本地方法
        4>堆:Java虚拟机所管理的最大空间,是所有线程共享的一块空间。此区域主要的目的就是保存创建出来的对象实例,几乎所有的对象实例和数组对象都会在这里分配空间。随着逃逸技术(如果某些方法中的对象实例没有被返回或者没有在该方法外使用就是未发生逃逸)的逐渐成熟,栈上分配(将对象实例打散存储到java虚拟机栈中)和标量替换优化技术使得所有的对象都在堆中分配空间不那么绝对。
java堆是垃圾回收器主要负责的区域,所有堆又称为GC堆。从垃圾回收的角度来看的话,堆又可以分为新生代、老年代,新生代又可细分为Eden、From survivor、To survivor空间,进一步分划是为了更好的进行GC垃圾回收
堆空间调整:-Xms  堆的最小值; -Xmx 堆的最大值; -Xmn 新生代的大小
-XX:NewSize 新生代的最小值; -XX:MaxNewSize  新生代的最大值
栈上分配配置:
-server JVM运行的模式之一, server模式才能进行逃逸分析, JVM运行的模式还有 mix/client

-Xmx10m和-Xms10m:堆的大小

-XX:+DoEscapeAnalysis:启用逃逸分析(默认打开)

-XX:+PrintGC:打印GC日志

-XX:+EliminateAllocations:标量替换(默认打开)

-XX:-UseTLAB 关闭本地线程分配缓冲

对栈上分配发生影响的参数就是三个,-server、-XX:+DoEscapeAnalysis和 -XX:+EliminateAllocations,任何一个发生变化都不会发生栈上分配,因为启用逃逸分析 和标量替换默认是打开的,所以,在我们的例子中,JVM的参数只用-server一样可以 有栈上替换的效果

        5>元空间:用来保存一些常量、类加载信息等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值