java JVM虚拟机
JVM垃圾处理方法(标记清除、复制、标记整理)
1、标记清除
标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象。
清除阶段:清除所有未被标记的对象。
2、复制算法
将原有的空间分为两块,每次只使用其中的一块,将正在使用的内存中的存活的对象复制到未使用的内存块中,
然后清除正在使用的内存块中的所有对象。
3、标记----整理
1.标记阶段:先通过根节点,标记所有从根节点开始的可达对象,为被标记的为垃圾对象
2、整理阶段:将所有的存活对象压缩到内存的一段,之后清理边界所有空间
三种算法的比较
1、效率:复制算法 > 标记/整理算法 > 标记/清除算法(此处的效率只是简单的对比时间复杂度,实际情况不一定如 此)。
2、内存整齐度:复制算法=标记/整理算法>标记/清除算法。
3、内存利用率:标记/整理算法=标记/清除算法>复制算法
JVM如何GC,新生代,老年代,持久代都储存那些东西,以及各个区的作用?
1、新生代
在方法中去new一个对象,那这个方法调用完毕后,对象就会被回收,这个就是一个典型的新生代对象。
2、老年代
在经历了N次垃圾回收后仍旧存活的对象就会被放到老年代中。而且大对象直接直接进入老年代
当Survivor空间不够用时,需要依赖于老年代进行分配担保,所以大对象直接进入老年代
3、永久代
即方法区
GC用的引用可达性分析算法中,那些对象可作为GC Roots 对象?
1、java虚拟机栈中的对象
2、方法区中的静态成员
3、方法区中的常量引用对象
4、本地方法区中的JNI(Native方法)引用对象。
什么时候进行MinGC 、FullGC
1、MinGC
1》新生代中的垃圾收集动作,采用的是复制算法
2》对于较大的对象,在Minor GC的时候可以直接进入老年代
2、FullGC
1》Full GC 是发生在老年代的垃圾收集动作,采用的是标记--清除/整理算法
2》由于老年代的对象几乎都是在Survivor去熬过来的,不会那么容易死掉,因此Full GC发生的次数不会有Minor GC
那么频繁,并且Time(Full Gc)>Time(Minor Gc)
Java虚拟机内存的划分,每个区域的功能
• 程序计数器(线程私有)
○ 线程创建时创建,执行本地方法时其值为undefined。
• 虚拟机栈(线程私有)
○ (栈内存)为虚拟机执行java方法服务:方法被调用时创建栈帧-->局部变量表->局部变量、对象引用 ○ 如果线程请求的栈深度超出了虚拟机允 许 的深度,就会出现StackOverFlowError。-Xss规定了栈的大空间
○ 虚拟机栈可以动态扩展,如果扩展到无法申请到足够的内存,会出现OOM
• 本地方法栈(线程私有)
○ java虚拟机栈是为虚拟机执行java方法服务的,而本地方法栈则为虚拟机执使用到的Native方法服务。
○ Java虚拟机没有对本地方法栈的使用和数据结构做强制规定。Sun HotSpot把Java虚拟机栈和本地方法栈合二为一
○ 会抛出StackOverFlowError和OutOfMemoryError
• Java堆
○ 被所有线程共享,在Java虚拟机启动时创建,几乎所有的对象实例都存放到堆中
○ GC的管理的主要区域
○ 物理不连续,逻辑上连续,并可以动态扩展,无法扩展时抛出OutOfMemoryError
• 方法区
○ 用于存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码的数据
○ Sun HotSpot 虚拟机把方法区叫做永久待(Permanent Generation)
• 运行时常量池
○ 受到方法区的限制,抛出OutOfMemoryError
JVM线程死锁,你该如何判断是因为什么?如果用VisualVM,dump线程信息出来,会有哪些信息
• 常常需要在隔两分钟后再次收集一次thread dump,如果得到的输出相同,仍然是大量thread都在等待给同一个 地址上锁,那么肯定是死锁了。
java JVM虚拟机的更多相关文章
- JAVA JVM虚拟机选项:Xms Xmx PermSize MaxPermSize 区别
Xms : 是指设定程序启动时占用内存大小.一般该值设置大的会使程序启动快,但是可能会使本机暂时变慢. Xmx : 是指设定程序运行期间最大可占用的内存大小,如果程序运行需要占用更多的内存,超出这个 ...
- 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
点击window---->preferences---->配置的tomcat---->JDK,在Optional Java VM arguments:中输入 -Xmx512M -Xm ...
- Java JVM虚拟机选项Xms/Xmx/PermSize/MaxPermSize(转)
通过JVM的这些选项:Xms/Xmx/PermSize/MaxPermSize可以牵扯出很多问题,比如性能调优等. 说明:以下转载没经过实践. 经验实例(参考): 设置每个线程的堆栈大小.JDK5.0 ...
- java jvm虚拟机类加载器
在Java中任意一个类都是由这个类本身和加载这个类的类加载器来确定这个类在JVM中的唯一性. 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到J ...
- java jvm虚拟机类加载过程
加载 在加载阶段, 虚拟机需要完成以下3件事情:1) 通过一个类的全限定名来获取定义此类的二进制字节流.2) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构.3) 在内存中生成一个代表这 ...
- 【转载】Java JVM : Xms Xmx PermSize MaxPermSize 区别
转载自:http://cxh61207.iteye.com/blog/1160663 java JVM虚拟机选项: Xms Xmx PermSize MaxPermSize 区别 Xms 是指设定程 ...
- java语言与jvm虚拟机简介
一.java语言 1.1 支持面向对象编程oop 强调支持,因为java同样可以面向过程编程. oop的三大特性是:封装.继承.多态. 封装主要针对成员变量而言,oop的思想要求成员变量均为私有,不应 ...
- Powershell远程在Azure A7虚拟机执行Java JVM失败
近期.使用Powershell脚本在A7 (8核,56G内存)配置的 Azure VM(Virtual Machine.虚拟机)上远程运行Java JVM时 (java.exe -version).总 ...
- Java中JVM虚拟机详解
1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...
随机推荐
- (2):Mysql 查看、创建、更改 数据库和表
一.一探究竟 我想看看有多少个数据库,有多少个表,以及表里有啥东西.那么你可以这样: 图形界面: 命令: 查看多少个数据库:注意 后面带s #查看 SHOW DATABASES; #查看表 USE b ...
- [Python设计模式] 第15章 如何兼容各种DB——抽象工厂模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 如何让一个程序,可以灵活替换数据库? 基础版本 class User(): ...
- 在netty3.x中存在两种线程:boss线程和worker线程。
在netty 3.x 中存在两种线程:boss线程和worker线程.
- PHP类中self和$this的区别
1.self代表类,$this代表对象2.能用$this的地方一定使用self,能用self的地方不一定能用$this静态的方法中不能使用$this,静态方法给类访问的. 今天在使用静态方法的时候,使 ...
- oracle 在已有表新增列内批量加数据
创建每列随机值的语句 create table TEST_ZHAA01A_03 as select rownum as id, to_char(sysdate + rownum/24/3600, 'y ...
- python使用mysql
python安装MySQLdb需要ssl,出错,原因如地址: https://stackoverflow.com/questions/46967488/getting-error-403-while- ...
- Mongodb系列- spring-data-mongodb使用MongoTemplate实现分页查询
在用spring-data-mongodb框架开发的过程中,需要实现分页查询,就百度了下,没找到满意的又google了下,找到了思路. 在spring-data-mongodb 官方文档中,建议你使用 ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- 框架Thinkphp5 简单的实现行为 钩子 Hook
这篇文章主要介绍了关于框架Thinkphp5 简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 实现在一个方法开始和结束加入两个行为:api_init.ap ...
- Asp.Net WebApi接口返回值IHttpActionResult
WebApi是微软在VS2012 MVC4版本中绑定发行的,webapi2.0同mvc5发行的 webapi一共有以下接口返回值 1.void无返回值2.IHttpActionResult Json( ...