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. Eclipse 启动问题:'Initilizing Java Tooling' has encountered a problem(。。。)

    一.问题描述: . 二.分析及解决 ...

  2. css3 旋转出现动画

    @-moz-keyframes daf{ 0% { -moz-transform: rotate(-360deg) scale(0.2); -webkit-transform: rotate(-360 ...

  3. 用CURL来实现file_get_contents函数:curl_file_get_contents

    <?php $url='http://www.bamuyu.com/news/zixun/list_7_2.html'; $content=curl_file_get_contents($url ...

  4. UVA 10765 Doves and bombs

    给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点. 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于 ...

  5. Arrays.sort 与 Collections.sort

    代码如下: package com.wangzhu.arrays; import java.util.Arrays; import java.util.Collections; public clas ...

  6. Web开发-表单验证

    表单验证是Web开发中必不可少的一个环节,用来限制用户输入数据的规范和一致性.那么如何能够简化这一任务,让开发人员通过简单的属性设置就能达到目的呢? FineUI在这一点上也是下足了功夫,比Asp.N ...

  7. Java调用存储过程时报 The user specified as a definer ('root'@'%') does not exist 解决方法

    Caused by: java.sql.SQLException: The user specified as a definer (''@'') does not exist        at c ...

  8. 结构体dict_table_t

    typedef struct dict_table_struct dict_table_t; /** Data structure for a database table. Most fields ...

  9. cgi ISAP sapi等

    1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...

  10. nginx 去掉服务器版本和名称和nginx_status 状态说明

    可能有时候我们看某些站点想知道别人在使用什么版本的web服务器之类的信息时,却发现并未显示版本号,甚至连WEB服务器都有变化,可以通过以下方法来隐藏Nginx.PHP的版本号信息,来提升一定的安全性: ...