程序计数器:

存放下一条要运行的指令;每个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令。程序计数器是一块线程私有的内存空间。

JAVA虚拟机栈:

线程私有的内存空间,它保存方法的局部变量,部分返回结果,并参与方法的调用和返回。虚拟机栈在运行的时候使用一种叫做栈帧的数据结构保存上下文数据。在栈帧中,存放了方法的局部变量表、操作数栈、动态连接方法和返回地址等信息。每个方法的调用都伴随着栈帧的入栈操作,每个方法的返回都伴随着栈帧的出栈操作。

本地方法栈:管理本地方法的调用。和虚拟机一样,它也会抛出StackOverFlowErrow和OutOfMemoryError。

java堆:

几乎所有的对象和数组都是在堆中分配空间的,堆是线程共享的。堆分为新生代和老年代两部分,新生代用于存放刚刚产生的对象和年轻的对象,新生代又可以细分为eden,s0和s1区。eden表示对象的出生地,大部分刚刚出生的对象会存放在这里,s0和s1区空间,称为幸存者,其中存放的对象至少经历了一次垃圾回收,并得以幸存。如果在幸存区的对象到了指定年龄还没有被回收,则有机会进入老年代。

方法区:

被JVM所有线程共享。方法区也称为永久区,主要存放常量和类的定义信息。方法区中最为重要的是类的类型信息,常量池,域信息,方法信息。类的类型信息包括类的完整名称,父类的完整名称,类型修饰符等;常量池包括这个类方法引用的常量信息;域信息包括域名称、域类型和域修饰符;方法信息包括方法名,返回类型、方法参数、方法修饰符。

对永久代的回收,主要从两个方面分析:1是GC对永久区常量池的回收;2是永久区对类元数据的回收。

1是GC对永久区常量池的回收:常量池中的常量没有被任何地方应用,就可以被回收。

2是永久区对类元数据的回收:若系统中动态的生成大量类,可能会导致方法区溢出。JVM要确认一个类信息是否被回收,基本条件有:所有该类的实例被回收,且装载该类的ClassLoader被回收。

JVM内存模型以及堆分配参数的更多相关文章

  1. jvm内存模型及分配参数

    jvm内存模型 程序计数器:是一块很小的内存空间.当线程数量超过cpu数量时,线程之间根据时间片轮询抢夺cpu资源.每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令. java虚拟机 ...

  2. 记录JVM内存模型,参数含义和优化

    一.JVM内存模型 (图片来自网络) 根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) Perm (永久代) 其中New和Tenured属于堆内存,堆内存会从J ...

  3. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置

    VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...

  4. java中栈内存与堆内存(JVM内存模型)

    java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...

  5. JVM内存模型和关键参数设置

    一. JVM内存模型: Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理. 二. Jvm关键参数: 1. 堆大小设置参数: -Xm ...

  6. jvm内存模型和内存分配

    1.什么是jvm? (1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的. (2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和 ...

  7. JVM内存模型及内存分配过程

    一.JVM内存模型 JVM主要管理两种类型内存:堆(Heap)和非堆(Permanent区域). 1.Heap是运行时数据区域,所有类实例和数组的内存均从此处分配.Heap区分两大块,一块是 Youn ...

  8. jvm内存模型-回收算法-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东面试题)

    1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的.(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个 ...

  9. jvm内存模型及分配

    1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的.(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个 ...

随机推荐

  1. POJ 1222 EXTENDED LIGHTS OUT(反转)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12616   Accepted: 8 ...

  2. JDK bin指令

    jmap: 一.调用命令示例: jmap -F-dump:format=b,file=rmsheap.bin 6086 就会在当前目录下生成rmsheap.bin的文件,6086是Pid.-F是在某些 ...

  3. 第三章 k8s cluster环境创建

    1  用如下方法安装指定版本的docker,但是我的环境会报错 # 安装rpm apt install rpm # 下载 RPM 包, docker 版本 wget https://download. ...

  4. jquery.easyui.tabs 中的首个tabs被最后tabs覆盖的问题解决方法

    这是由于tabs对href重载的的问题导致,因此我们需要将href更改为其它自定义的属性即可避免此问题的发生. 解决方法如下: 第一步页面端: 循环体开始 <li> <div> ...

  5. Imply.io单机安装

    安装 wget https://static.imply.io/release/imply-2.5.15.tar.gz .tar.gz -C /usr/local/ cd imply- nohup b ...

  6. Android关于inflate的root参数

    最近在用View inflate(Context context, int resource, ViewGroup root)方法时,在第三个参数root上碰到了点麻烦. 一般在写ListView的a ...

  7. ubuntu 开机 输入密码 无法进入

    1.给笔记本装了ubuntu14.04.4, 发现开机到输入密码的环节之后,验证正确,然而无法进入桌面,一直在密码页循环. 2.网上找了好多方法,进入命令行(ctrl+alr+F1)登录,能登录进去: ...

  8. halcon的长度和角度测量

    halcon代码: 1: *读取并截取图片 2: dev_close_window() 3: read_image (Image, 'D:/MyFile/halcon/长度和角度测量/图.png') ...

  9. ajax 回调函数

    回调函数 如果要处理$.ajax()得到的数据,则需要使用回调函数.beforeSend.error.dataFilter.success.complete. beforeSend 在发送请求之前调用 ...

  10. Java枚举类的serialVersionUID

    起因 最近在公司里敲代码的时候偶然间发现以前留下的枚举类实现了Serializable接口,然后写了个serialVersionUID...我以前一直没在枚举类里使用过..觉得有点神奇....于是百度 ...