JVM总结---各处总结
堆与栈分开设计是为什么呢?
- 栈存储了处理逻辑、堆存储了具体的数据,这样隔离设计更为清晰
- 堆与栈分离,使得堆可以被多个栈共享。
- 栈保存了上下文的信息,因此只能向上增长;而堆是动态分配
线程栈
1、每当启动一个新线程的时候,java虚拟机都会为它分配一个java栈;
2、虚拟机只会对java栈执行两种操作:以栈帧为单位的压栈或者出栈;
3、它压入的每个栈帧(Stack Frame)是----程序指令 以及 局部变量表 ,每个方法调用对应一个栈帧。
局部变量表
包括==>:①各种基本数据类型;②对象的引用。
各种基本数据类型:
boolean、byte、char、short、int、float、long、double ;
4、我们需要注意到:每个 线程 都有 独立的栈 并且是互相隔离的。
栈的大小可以受到几个因素影响:
1️⃣一个是jvm参数 -XSS ;
2️⃣除了JVM设置,我们还可以在创建线程Thread的时候手工指定大小:
你在创建线程的时候参数传递进去,默认是1M
----------------------------------------------------------------------------------------
堆
1、Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块;
2、Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建;
3、此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存;
①首先堆可以划分为新生代和老年代
新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )
②新生代又可以划分为一个Eden区和两个Survivor(幸存)区
1、按照规定,新对象会首先分配在Eden中(如果对象过大,比如大数组,将会直接放到老年代)。
2、在GC中,Eden中的对象会被移动到survivor中,直至对象满足一定的年纪(定义为熬过minor GC【当Eden区满时,触发Minor GC】的次数),会被移动到老年代。
它用于存储已被虚拟机加载的 类信息 ,常量, 静态变量, 即时编译后的代码 等数据
-----------------------------------------------------------------------------
①Minor GC 和 Full GC
Minor GC触发条件
:当Eden,Survivor区满时,触发Minor GC。
Minor GC ---采用的垃圾回收机制是 复制算法
因为:新生代每次垃圾回收倒要回收大部分的对象,也就说需要复制的操作次数较少,
但是在实际中并不是按照1:1比例来划分新生代空间的,一般来说,将新生代划分为一块较大的Eden代和两块较小的Survivor代,比例大概是
8:1:1;每次只是用Eden代,当进行回收时,将Eden代还存活的对象复制到一块Survor1对象中,然后清理掉
Eden代。第二次MinorGC会清理Eden代和Survor1,将对象存放到Survor2中,然后将Eden代和Survor1中的对象清理掉。当Survor2中的对象放不下的时候,会存放到 老年代;
Full GC触发条件:
(1)调用System.gc时,系统建议执行Full GC,但是不必然执行
(2)老年代空间不足
(3)方法区空间不足
(4)通过Minor GC后进入老年代的平均大小》大于老年代的可用内存
(5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
使用到的垃圾回收算法:Mark-Compact算法
由于老年代的特点是每次回收的都是少量对象,一般使用的是 Mark-Compact 算法
转载于:https://www.cnblogs.com/yunshenbuzhichu/p/9676302.html
JVM总结---各处总结相关推荐
- (三)JVM成神路之全面详解执行引擎子系统与JIT即时编译原理
引言 执行引擎子系统是JVM的重要组成部分之一,在JVM系列的开篇曾提到:JVM是一个架构在平台上的平台,虚拟机是一个相似于"物理机"的概念,与物理机一样,都具备代码执行的能力.但 ...
- JVM成神路之全面详解执行引擎子系统、JIT即时编译原理与分派实现
引言 执行引擎子系统是JVM的重要组成部分之一,在JVM系列的开篇曾提到:JVM是一个架构在平台上的平台,虚拟机是一个相似于"物理机"的概念,与物理机一样,都具备代码执行的能力.但 ...
- jvm有这一篇就够了,深入理解
jvmHotSpot虚拟机对象探秘 对象的实例化 对象的内存布局 对象的访问定位 直接内存 执行引擎 StringTable 垃圾回收概述 垃圾回收相关算法 垃圾回收相关概念的概述 垃圾回收器 对象的 ...
- JVM 知识梳理 (二) GC算法
文章目录 一.前言 二.判定哪些对象需要被GC 引用计数法Reference Count 可达性算法(引用链法Tracing) 三.GC算法 标记-清除 标记-压缩 复制算法 总结 分代收集 补充:H ...
- JVM内存调优原则及几种JVM内存调优方法
JVM内存调优原则及几种JVM内存调优方法 1.堆大小设置. 2.回收器选择. 1.在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因 ...
- JVM 常见异常及内存诊断
栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存. 栈帧过多导致栈内存溢出 下述示例代码,由于递归 ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...
一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...
- 面试高频!JVM必备教程~
请你谈谈你对JVM的理解?Java8虚拟机和之间的变化更新? JVM类加载器是怎么样的?有几种? 什么是OOM,什么是StackOverFlowError? 怎么分析? JVM常用调优参数有哪写? G ...
最新文章
- 让 Git 全局性的忽略 .DS_Store
- 【转】numpy-array自带的迭代器-----np.nditer
- web.xml filter 不包含_PHP文件包含
- ES6: 参数默认值及中间域
- 银行计算机储蓄系统程序流程图,银行储蓄系统流程图
- kubernetes 如何彻底删除pod、deployment、service
- 海康大华网络录像机摄像机设备几种NTP校时方法
- IBM p720 在HMC上创建分区并安装AIX系统
- StartActivity的2种用法
- 电脑开机后,显示屏无信号怎么处理?
- 编译安装Memcached
- linux中python怎么退出_linux 怎么退出python
- 正则测试以及练习网站
- B站网页版播放常用快捷键
- 知识分享之Golang——json与omitempty的使用
- 提交form表单方法
- ZUCC_计算机网络实验_实验01 实验一RJ45原理与制作
- 如何将NOAA官网下载的气象雷达原始数据转化为NC文件
- 中国四大发明是公认的
- FPGA NVME IP 核 纯逻辑实现NVME协议,读写SSD