1.内存分配参数---大纲

  1. Ø如何设置堆内存
  2. Ø如何设置栈内存
  3. Ø如何设置方法区
  4. Ø如何设置对的分配比率
  5. Ø设置参数打印堆栈;
  6. ØJava程序的两种模式:Server&Client

2.设置堆内存

Ø设置最大堆内存
Ø参数:-Xmx10M,表示堆内存最大为10M,如果超过10M则会出现内存溢出的异常。
Ø查看方法: maxMemory()
Ø设置最小堆内存
Ø参数:-Xms2M,系统初始化的时候就会分配2M内存给java程序。
Ø设置新生代内存
Ø参数1:-Xmn5M,表示堆内存中新生代内存大小为5M,如果超过则会向老年代申请空间。
Ø参数2:-XX:NewSize(最小的新生代大小)-XX:MaxNewSize(最大的新生代大小)
Ø-Xmn5M==-XX:NewSize5M –XX:MaxNewSize5M
Ø参数2不建议使用,会引起内存震荡。

3、方法区内存

Ø之前说过,对于使用了CGLib,Javassist,ASM等动态生成大量class类的框架尤其需要注意该内存的设置。
Ø最小设置
Ø参数:-XX:PermSize=4M;
Ø解释:表示方法区最小的内存为4M,JVM初始化的时候就会分配至少4M的方法区内存。
Ø最大设置
Ø参数:-XX:MaxPermSize=10M
Ø解释:表示方法区最大的内存为10M,当动态扩展超过10M的时候就会出现内存溢出。

4、栈内存

Ø栈内存貌似没有设置最大最小的参数,根据我的理解配置的参数是最大的,也就是说最大不能超过,如果没有线程则不会分配,这样应该是合理的,他的生命周期和线程一样。
Ø配置参数:-Xss10M
Ø解释:表示为没一个线程分配10M的空间
Ø注意事项:
Ø如果一个线程的内存使用超过了-Xss的设置则会抛出异常
Ø如果给栈内存设置较大,则同时开启的线程数必然减少。
Ø栈内存的大小还会影响到堆内存的大小;

5、分配比率

Ø堆的分配比率:
Ø新生代:占据整个堆的1/4~1/3为最佳
Ø新生代和s区的分配:最好设置为8:1为最佳
Ø配置参数:-XX:SurvivorRatio=8
Ø新生代和老年代的分配:最好设置为2:1为最佳
Ø配置参数:-XX:NewRatio=2

6、参数总结

配置

说明

-Xms

设置堆内存的最小值

-Xmx

设置堆内存的最大值

-Xss

设置栈内存的大小

-XX:MinHeapFreeRatio

设置堆内存的最小空闲比例

-XX:MaxHeapFreeRatio

这是堆内存的最大空闲比例

-XX:NewSize

设置新生代的最小内存值

-XX:NewMaxSize

设置新生代的最大内存值

-XX:SurviorRatio

设置Eden区和Survior区的比例

-XX:MaxPermSize

设置持久代的最大值

-XX:PermSize

设置持久代的最小值

-XX:TargetSurvivorRatio

设置survivor区的可使用率

7、打印GC信息

Ø不论是在进行MinorGC还是FullGC,使用该参数都可以当前的内存使用情况;
Ø参数如下:
Ø-XX:+PrintGCDetails
Ø-verbose:gc

Ø上面两个都可以,第一个较为详细!

8、Java运行模式

ØJava不会显式的制定运行的模式,JVM会根据内存的大小自动进行判断,主要有Server和Client两种模式。
ØServer模式
Ø启动速度慢
Ø运行速度快
ØJVM在Server模式默认-Xms是128M,-Xmx是1024M
ØClient模式
Ø启动速度快
Ø运行速度没有Server模式快
ØJVM在client模式默认-Xms是1M,-Xmx是64M

JVM之---Java内存分配参数(第四篇)的更多相关文章

  1. java内存分配和String类型的深度解析

    [尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...

  2. Java深入 - Java 内存分配和回收机制

    Java的GC机制是自动进行的,和c语言有些区别需要程序员自己保证内存的使用和回收. Java的内存分配和回收也主要在Java的堆上进行的,Java的堆中存储了大量的对象实例,所以Java的堆也叫GC ...

  3. Java内存分配和GC

    Java内存分配和回收的机制概括的说,就是:分代分配,分代回收. 对象将根据存活的时间被分为:年轻代(Young Generation).年老代(Old Generation).永久代(Permane ...

  4. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

    Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...

  5. 【转】java内存分配和String类型的深度解析

    一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...

  6. Android内存优化1 了解java内存分配 1

    开篇废话 今天我们一起来学习JVM的内存分配,主要目的是为我们Android内存优化打下基础. 一直在想以什么样的方式来呈现这个知识点才能让我们易于理解,最终决定使用方法为:图解+源代码分析. 欢迎访 ...

  7. Java深入 - Java 内存分配和回收机制-转

    Java的GC机制是自动进行的,和c语言有些区别需要程序员自己保证内存的使用和回收. Java的内存分配和回收也主要在Java的堆上进行的,Java的堆中存储了大量的对象实例,所以Java的堆也叫GC ...

  8. Java内存分配

    概述 对从事C和C++的程序员来说,在内存管理方面,他们既是拥有最高权利的人,也是从事最基础工作的“劳动人民”. 而对于Java程序员来说,JVM自动进行内存管理,程序员不再需要为每一个new操作去写 ...

  9. Java 内存分配全面浅析

    本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java.这类文章网上有很多,但大多比较零碎.本文从认知过程角度出发,将带给读者一个系统的介绍. 进入正题前首先要知道的是Java程 ...

随机推荐

  1. U盘、移动硬盘提示格式化的处理

    移动硬盘突然打不开了,一点击就提示要求格式化,这种问题本人亲历,现已解决,千万别格式化,千万别格式化,用系统自带磁盘恢复 CHKDSK命令即可解决此问题 方法/步骤 1.在开始菜单找到“运行”窗口,也 ...

  2. 如何用JavaScript在浏览器端获取图片的原始尺寸大小?

    var img = $("#img_id"); // Get my img elem var pic_real_width, pic_real_height; $("&l ...

  3. DOM in Angular2

    <elementRef> import {ElementRef} from "@angular/core"; constructor(private element:  ...

  4. 使用NSURLSession获取网络数据和下载文件

    使用NSURLSession获取网络数据 使用NSURLSession下载文件

  5. C# Eval在asp.net中的用法及作用

    Eval( " ")和Bind( " ") 这两种一个单向绑定,一个双向绑定,bind是双向绑定,但需数据源支持 ASP.NET 2.0改善了模板中的数据绑定操 ...

  6. *[codility]Number-of-disc-intersections

    http://codility.com/demo/take-sample-test/beta2010/ 这题以前做的时候是先排序再二分,现在觉得没有必要.首先圆可以看成线段,把线段的进入作为一个事件, ...

  7. Linux下的绘图(流程图、UML、mindmap)工具

    http://blog.csdn.net/piyajee/article/details/5902380

  8. Android 在AlertDialog里添加布局控件

    android里很多时候需要在弹出的AlertDialog里有自己的控件,填写信息,比如弹出一个登陆对话框 那么首先你就要创建这么一个布局的inputphonenum.xml文件了 <?xml ...

  9. 在Hadoop伪分布式模式下安装Hbase

    安装环境:Hadoop 1.2.0, Java 1.7.0_21 1.下载/解压 在hbase官网上选择自己要下的hbase版本,我选择的是hbase-0.94.8. 下载后解压到/usr/local ...

  10. JSP个人总结

    应用JSP技术开发动态网站 JSP基本语法 默认JSP: <%@ page language="java" contentType="text/html; char ...