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. hdu 1560 DNA sequence(搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1560 DNA sequence Time Limit: 15000/5000 MS (Java/Others)  ...

  2. 网站开启Gzip压缩-apache

    找到并打开apache/conf目录中的httpd.conf文件 httpd.conf中打开deflate_Module和headers_Module模块,具体做法为将 如下两句前面的#去掉: Loa ...

  3. jQuery CSS 添加/删除类名

    addClass(class) — 为每个匹配的元素添加指定的类名.参数 : class — 一个或多个要添加到元素中的CSS类名,请用空格分开(String)示例 一 :为匹配的元素加上 'sele ...

  4. 背投广告js

    js: $('#appwrap').append('<a href="http://web.2144.cn/gateway/reg?pos=8966" id="ad ...

  5. RadioGroup 的 RadioButton 选择改变字体颜色和背景颜色

    RadioGroup <RadioGroup android:id="@+id/client_charge_radiogroup" android:layout_width= ...

  6. asp.net DropDownList无刷新ajax二级联动实现详细过程

    只适合新手制作DropDownList无刷新ajax二级联动效果: 数据库实现,添加两表如图:表1,pingpai,表2,type,具体数据库实现看自己的理解: //页面主要代码: <asp:S ...

  7. 找不到mysql服务或mysql服务名无效

    问题原因:mysql服务没有安装. 解决办法: 在 mysql bin目录下 以管理员的权限 执行 mysqld -install命令 出现:Service successfully installe ...

  8. Linux内核态抢占机制分析

    http://blog.sina.com.cn/s/blog_502c8cc401012pxj.html [摘要]本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核( ...

  9. Linux多线程编程(不限Linux)转

    ——本文一个例子展开,介绍Linux下面线程的操作.多线程的同步和互斥. 前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步 ...

  10. Android 内核初识(8)Binder

    简介 Binder是Android系统提供的一种IPC(进程间通信)机制.由于Android是基于Linux内核的,因此,除了Binder外,还存在其他的IPC机制,例如管道和socket等.Bind ...