• jvm内存分布


    jvm 1.7 版本:

    jvm 的内存分为堆和非堆两大部分。

    堆:

    堆分为 新生代和老年代。一般对象都会在新生代的内存中创建,新生代中的对象经过几次的GC 回收后依然存活(这个次数可以设置)则移动到老年代。新生代和老年代的内存不足时都会触发GC。新生代的GC 的方法一般为复制清理,而老年代则多为标记清理。方法不一样时根据这两个分代区域内存的特点来采用的。

    -Xms512m 堆初始化的内存大小,-Xmx1024m 堆最大的内存为1024m  -Xmn512m  新生代的空间大小。

    非堆:

    程序计数器:用来记录线程执行到了哪一步(记录指令)。所以每个线程都会有独立的计数器

    虚拟机栈:记录方法运行时的信息,也是线程独立的。  -Xss128k  设置线程栈的深度(也就是线程可以使用的内存大小),超出时抛出StackOverFlowError。

    本地方法栈:和虚拟机栈一样,不过用于native 方法。

    方法区:也就是所说的永久代,用来存放类的信息,常量,静态变量,jit 即时编译代码 等。可以不实现GC,但一般也会。例如类卸载之类也会回收

      -XX:MaxPermSize=256m 设置永久代最大可用空间。

    字符串常量池:jvm 1.7 之前是放在方法区内,1.7 时移出方法区,因此不再受 MaxPermSize 参数的限制。

    本地内存:其余的本机内存,这部分内存不是jvm 规范规定的内存,但是java 运行时还是会用到这些内存,如多线程,字符串常量等都会增加消耗,如果不足也会OutOfMemoryError

  • 相关阅读:
    使用StreamHttpResponse和FileResponse下载文件的注意事项及文件私有化
    Django中@login_required用法简介
    Django之template
    单链表反转的原理和python代码实现
    两个队列实现栈,两个栈实现队列
    Linux--5 mariadb和redis的安装
    Linux--4
    Linux--3
    Linux--2 Linux之文档与目录结构、shell基本命令
    Linux--1 初识
  • 原文地址:https://www.cnblogs.com/predisw/p/4981073.html
Copyright © 2020-2023  润新知