java内存与溢出

一.jvm_参数

-Xmx                    //最大堆内存
-Xms                    //最小堆内存
-Xmn                    //新生代内存
-XX:SurvivorRation        //eden与survior比例
-XX:+HeapDumpOnOutOfMemoryError            //内存溢出异常时Dump当前内存堆转储快照
-XX:+HeapDumpPath=/ww/1.dump.hprof         //dump文件位置
-XX:+PrintGCDetails                        //打印GC日志
-XX:+PrintGCDateStamps                    //打印GC时间
-Xss                        //栈容量
-XX:PermSize                //过期的方法区(永久代)容量
-XX:MaxPermSize                //过期的方法区(永久代)最大容量
-XX:MetaspaceSize            //元数据区除非FGC容量
-XX:MaxMetaspaceSize        //无限制
-XX:+UseConcMarkSweepGC        //使用CMS垃圾回收
-XX:+UseG1GC                //G1
-Xloggc:log/gc.log             //gc日志存放区
-XX:+PrintHeapAtGC            //在gc的前后打印出堆的信息

-XX:PretenureSizeThreshold=3145728        //大对象直接老年代分配(只对Serial和ParaNew有效)
-XX:MaxTenuringThreshold                //新生代年龄计数器阈值(超过则晋升老年代)
1:2
[New generation][old generation]
8:1:1
New Generation[eden:survivor1:survivor]

二.java内存

1.程序计数器

> 线程私有
> 而且是唯一一个虚拟机规范没有规定任何OOM的区域

2.虚拟机栈

>线程私有
>描述的java方法执行的内存模型
每一个方法从调用到执行完毕,就对应栈帧从虚拟机栈中入栈到出栈
JVM在此区域规定了另种异常:
    1.线程请求的栈深度大于虚拟机栈允许的深度(StackOverFlowError)
    2.扩展时无法申请到足够的内存(OOM)

3.本地方法栈

与虚拟机栈相似,只不过虚拟机栈执行的是java字节码
而本地方法栈则执行虚拟机使用到的native方法服务

4.堆

新生代  老年代

5.方法区

线程共享
存储一杯虚拟机嘉加载的类信息,常量,静态变量,即时编译后的代码等
也叫永久代(permanent generation)

jdk1.8->替换成了元数据区 Metaspace

6.直接内存

NIO可以使用Native函数直接分配堆外内存

results matching ""

    No results matching ""