内存模型:

(1)程序计数器

(2)虚拟机栈

(3)本地方法栈

(4)堆

(5)方法区

注意:堆和方法区是线程共享的,其余区域是线程隔离的。

栈里面存放的是基本的数据类型和引用,而堆里面则是存放各种对象实例的。

垃圾回收机制的算法:

(1)引用计数法

堆中的每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象分配给一个变量,该变量计数设置为1。当任何其他变量被赋值为这个对象的引用时,计数加1,但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时,对象实例的引用计数器减一。任何引用计数器为0的对象实例可以被当作垃圾收集。

(2)标记-清除法(引用链法)

通过一种GCROOT的对象来判断,如果有一条能够达到GCROOT就对该对象标记为存活,其他对象则标记为不存活,存活对象比较多的情况下很高效,但是容易造成内存碎片

(3)标记-整理法

标记-整理算法采用标记-清除算法一样的方式给对象进行标记,但在清除时不同,在回收不存活的对象占用的空间时,会将所有的存活对象向左移动,并更新对应的指针。虽然增加了对象的移动,成本增加,但是解决了内存碎片的问题

(4)复制算法

将内存划分为等大小的两块,每次只使用其中一块,当一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清除。这种算法不容易产生内存碎片,但是内存被压缩到只有一半了,且存活对象增多的话,效率会降低

(5)generation collection算法(分代收集算法)

由于不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的回收算法,可以提高回收效率。

年轻代:(采用copying算法)

1.所有新生成的对象首先放在年轻代。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。

2.新生代内存按照8:1:1的比例分为一个eden区和两个survivor(from,to)区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。如果eden区满了或者放不下了,这时候其中存活的对象复制到from区(如果存活下来的对象from区都放不下,则这些存活的对象全部进入老年代),之后eden区全部回收掉。如果from区的也满了,再次执行Minor GC则会将eden区存活的和from存活的全部复制到to,(此时from和eden区都是空的,from和to互换角色,from变为to,to变为from)。之后每执行一次Minor GC都会将存活对象复制到from(原来的to),互换多次之后,对象的年龄(执行一次Minor GC则增加1岁)超过一定年龄则会复制到老年代(老年代执行Full GC)

老年代:

1.在年轻代中经理了N次垃圾回收后仍然存活的对象,就会被放到老年代中。

2.内存比新生代大很多,当老年代内存满时触发Major GC即Full GC

持久代:

为什么java安装卡在满格_Java面试总结(JVM)相关推荐

  1. java安装好了打不开机_Java安装以后为什么打不开?java打不开一闪而过如何解决?...

    有很多小伙伴表示,总是打不开java,那么这究竟是怎么一回事呢?为什么java会有打不开的情况出现,java闪退又是为什么?下面一起来了解一下吧. java安装之后打不开一闪而过是为什么? 导致jav ...

  2. java安装选择哪个可选功能_java章节习题及期末考试题答案.doc

    Java开发入门 习题 填空题 将.java源文件编译为.class文件的是[ ]命令. 在Eclipse窗口中选择菜单[ ]→New→Java Project创建Java项目. 在安装JDK的过程中 ...

  3. java安装时无法写入文件_Java - 无法写入第二个文件

    我一直在尝试从服务器向客户端发送文件时遇到了一些麻烦.我似乎无法将相同的文件从服务器发送到客户端到两个SEPERATE文件.相反,它只是附加到第一个文件的末尾!任何帮助,将不胜感激.Java - 无法 ...

  4. java导出excel合并单元格_Java 导出Excel 合并Excel单元格

    /** * 导出Excel表格 * * @param allList  要导出的数据 * @param headArr  json键值对 * @param titleArr excel标题 * @pa ...

  5. java学习笔记-良葛格_Java良葛格 学习笔记《二》

    正则表达式 . 符合任一字符 \d 符合0到9任一个数字字符 \D 符合0-9以外的字符 \s 符合'\t'.'\n'.'\x0B'.'\f'.'\r'等空格符 \w 符合a到z.A到Z.0到9等字符 ...

  6. java 指定垃g1圾收集_Java知识梳理--JVM

    众所周知Java是的蓬勃兴起有一部分原因是因为Java的跨平台行,和优秀的内存管理,z这些都赖于其虚拟机的支持,所以虚拟机成为Java学习者跨步不去的坎.下图是对虚拟机整体的概述,可以使我们大体了解虚 ...

  7. java移动接口发短信_Java面试零碎知识点

    1.Java文件经过JVM编译成字节码文件,即.class文件,将字节码文件在不同的操作系统中运行时,操作系统再将字节码文件编译成机器码文件.这就是Java跨平台 2.首先明确一点,java 的 GC ...

  8. java cpu利用率上不去_Java 面试突击之 Java 并发知识基础 amp; 进阶考点全解析

    版权说明:本文转自知乎用户木子超,已获其许可,附上其文章主页链接 知乎用户 一.基础 什么是线程和进程? 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个 ...

  9. java 是用什么写的_java里的jvm是用什么语言写的

    JAVA里的jvm虚拟机用的是C语言+汇编语言开发的.在此之上就是JAVA本身了,虚拟机是起到解析作用. 另外,JAVA并不比C语言慢,说JAVA慢一般是九十年代那时候的JAVA. 现在一段优秀的JA ...

最新文章

  1. 方法革新:8个宏基因组分析新工具 | 热心肠日报
  2. 《数学之美》第3章 统计语言模型
  3. opencv-python视频处理之图片变成视频,视频切成图片
  4. Enterprise Library 3.0 体验(3):使用配置文件的Validation Application Block
  5. C# 接口的作用浅谈举例(转)
  6. Evidence gathering tools
  7. Java Swagger的注释类是怎么被调用到的
  8. [原创] VPDN--PPTP Server
  9. transferto遇到的问题java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp
  10. Centos6.x升级内核方法支持Docker
  11. 【从 0 开始机器学习】逻辑回归识别手写字符!
  12. VB API 之 第七课 字体应用四
  13. C++走向远洋——35(友元,时间)
  14. OpenCV(VS2019)——无法打开“opencv2/opencv.hpp”文件
  15. 在matlab中配置vlfeat,在MATLAB R2018b中配置VLFeat
  16. 软考(一)-软考开始了
  17. C#中Panel控件和GroupBox控件(未完成)
  18. Linux内核学习1——Linux内核编译安装
  19. win10系统任务栏不显示最小化窗口的处理步骤
  20. 梁念坚与鲍尔默大唱反调

热门文章

  1. 谈谈Linux下的数据流重定向和管道命令
  2. C/C++ 知识点---LIB和DLL的区别与使用(网摘)
  3. 管理软件预警通知(Notification)功能的实现案例分析
  4. eclipse中解决/**/多行注释代码后,格式变乱的问题
  5. vue打包后element-ui部分样式(图标)异常问题
  6. 解决IntelliJ无法导入maven包的问题
  7. C ++ 11基于反向范围的for循环
  8. 整数的最大值和最小值
  9. 如何将struct System.Byte byte []转换为C#中的System.IO.Stream对象?
  10. Android中几种常用的定时器和延时方法