JVM内存模型

JDK体系结构


Java语言的跨平台特性

java语言的跨平台其实是靠不同操作系统对应不同的jvm,由jvm将class文件编码成对应操作系统的机器码,从而实现跨平台。


JVM整体结构及内存模型


二、JVM内存参数设置

 

 方法区连个参数 -XX:MetaspaceSize, -XX:MaxMetaspaceSize

 -XX:MaxMetaspaceSize:

方法区最大内存空间,如果不设置默认为-1,及不限制大小,或者说是物理机内存大小。

 -XX:MetaspaceSize:

 该参数设置触发full gc的阈值,默认为21M,方法区占用空间超过该值,JVM会触发一次full gc,之后会对该次GC结果进行评估,如果gc过后清理了大部分的类元信息,释放了大量内存,就会动态调整该参数的值,减少该阈值,反之则增加该阈值。如果一个web项目class文件较多(通常情况),且不设置该值,当方法区内存占满21M后会频繁出现full gc ,具体体现就是启动tomcat项目过程很慢。所以一般需要手动设置该参数大小。一般一个8G的服务机器设置成256M合适。

-Xss

虚拟机栈空间大小设置

java.lang.StackOverflowError 栈空间溢出例子

package com.zcp.jvm;

/**
 * 线程栈空间测试
 */
public class XssTest {

    static int count =0;

    static void redo(){
        count++;
        redo();
    }

    /**
     * -Xss128K  设置不同栈空间大小测试
     * @param args
     */
    public static void main(String[] args) {
        try {
            redo();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println(count);
        }
    }
}

运行结果

1088
Exception in thread "main" java.lang.StackOverflowError
	at com.zcp.jvm.XssTest.redo(XssTest.java:11)
	at com.zcp.jvm.XssTest.redo(XssTest.java:12)
	at com.zcp.jvm.XssTest.redo(XssTest.java:12)
	at com.zcp.jvm.XssTest.redo(XssTest.java:12)
	at com.zcp.jvm.XssTest.redo(XssTest.java:12)

当-Xss值设置的越大,对应count值就越大,体现JVM内存模型中就是 线程栈的栈帧数量越多,虚拟机可分配的线程数就会越小。

JVM内存参数大小该如何设置?
JVM参数大小设置并没有固定标准,需要根据实际项目情况分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值