程序计数器:

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

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. xshell连接kali

    连接出现错误,连接不上去,看到一篇文章可以使用,https://blog.csdn.net/yemaxq/article/details/78171241

  2. Service的用法

    基本用法: 1.创建一个类继承Service类,并重写onBind() 2.重写其他方法:onCreate().onStartCommand().onDestory() 3.在AndroidManif ...

  3. java代码=====实现修改while()

    总结: package com.mmm; public class cse { public static void main(String[] args) { // int count=0;你妹,我 ...

  4. python在文件中输入整数

    a=[] b=[] for i in range(len(predicted)): b.append((int)(float(predicted[i]))) a.append(int(test_set ...

  5. PAT甲级目录

    树(23) 备注 1004 Counting Leaves   1020 Tree Traversals   1043 Is It a Binary Search Tree 判断BST,BST的性质 ...

  6. 小程序picker组件当range是objectArray时的使用

  7. 模拟admin组件自己开发stark组件之创建篇

    admin组件 admin组件为我们提供了针对django管理页面 我们先简短来看下django的admin组件的启动流程,注册流程,url匹配过程 启动注册 1. 扫描所有应用下的注册了应用中的ad ...

  8. 《Effective C++(第三版)》-笔记

    1. 让自己习惯C++ 条款01: 视C++为一个语言联邦 1.1 C++ 是一个多重泛型编程语言(multiparadigm programming),支持:过程形式(procedural),面向对 ...

  9. AOP 动态织入的.NET实现

    AOP(面向切面编程:Aspect Oriented Programming)为诸如日志记录.性能统计.安全控制.事务处理.异常处理等与具体业务逻辑无关,却需要在全局范围进行执行的功能提供了一种良好重 ...

  10. 5、数据类型三:hash

    Hash数据类型使用很普遍,它同样是key-value的方式来组织的,只是其value又包含多个field-fieldValue对.想要获取某个fieldValue,可以通过key-field联合来定 ...