一:java内存区域和内存溢出测试
java内存分为线程共享的区域(方法区,堆)和线程不共享的区域(虚拟机栈,本地方法栈,程序计数器):
1,方法区:存放类信息,常量,静态变量,即时编译后的代码等。产生大量的类来填充方法区来测试方法区内存溢出。
2,堆:对象实例,包括数组。如果想要堆内存溢出,直接新建大量对象,然后保持对它的引用便可以了,
3,虚拟机栈:局部变量表(基本数据类型和对象引用),操作数栈,动态链接,方法出口等。因为没一个方法都是一个栈帧,大量的循环调用方法,必然会产生虚拟机栈溢出。
4,本地方法栈:类似虚拟机栈,执行native方法,具体不详。
5,程序计数器:当前线程执行的字节码的行号指示器。
书中有个好例子:
如果在一个方法A中有这么一句: Object obj = new Object(); 那么当执行A方法的时候,在当前线程的虚拟机栈中会开辟一个新的栈帧,Object obj 这句话会在栈帧中声明一个变量,反应到jvm中便是在虚拟机栈中有一个对象引用reference类型数据出现在栈帧中,new Object()是新建一个对象,自然会在堆中开辟一片区域,用来存放这个对象,obj对象属于Object这个类,这个Object类的名字,实现的接口,有哪些方法等这些类的信息都存放在方法区中,堆中的对象会有一个指针指向方法区中的Object类。
二:垃圾收集和对象分配
怎么判断对象应该被回收,两种方法:引用计数和根搜索算法,引用计数解决不了循环引用的问题,根搜索算法的根节点有如下几种:
1:本地变量表引用的对象
2:方法区中的类静态属性引用的对象
3:方法区中的常量引用的对象
4:本地方法栈中jni的引用的对象
基本的垃圾收集算法有三种:
1:标记清除算法,就是先用上面的方法标记,然后统一清除,缺点是会产生大量的碎片。
2:标记整理算法,算法是标记完一个对象后直接把这个对象移动到整个内存区域的另一端,然后整体清除内存。
3:复制算法,用一半来存对象,收集时把存活下来的复制到另一半,当然一半的比例可以调整,当大量的对象存活时效率较低,所以可以用在新生代,因为新手代的对象存活较低。
现在流行的把堆内存分代,按照对 象的存活年龄来分为新生代和老年代,新手代的对象存活时间较短,用复制算法比较好,因为每次复制的对象很少,老年代可以用标记清除和标记整理,因为一般存活的对象较多,需要做清除操作比较少。
参考:《深入理解java虚拟机》周志明
分享到:
相关推荐
JVM内存模型以及垃圾收集策略解析 可以深入了解java虚拟机的原理
对jvm内存模型&垃圾收集算法&类加载机制进行了整理,读者可以作为参考进行学习和探讨,,
第二节:JVM内存模型 1.1 概念 1.2 JVM内存模型 1.3 Heap堆内存模型 第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)...
NULL 博文链接:https://forrest420.iteye.com/blog/1127427
Java 虚拟机JVM内存模型与垃圾收集策略,看完此资料,JVM将不再话下
很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT。 也希望大神们可以批评指正。... Java内存模型 内存分配策略 分代垃圾收集 虚拟机工具 垃圾收集器
JVM内存模型 4 2.1 JVM规范 5 2.2 Sun JVM 8 2.3 SUN JVM内存管理(优化) 10 2.4 SUN JVM调优 13 2.5.JVM简单理解 16 2.5.1 Java栈 16 2.5.2 堆 16 2.5.3 堆栈分离的好处 20 2.5.4 堆(heap)和栈(stack) 20 JAVA垃圾...
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
有关JVM的基础教程。介绍JVM原理:hotspot、classfile、classloader、内存模型、锁、同步、JVM内存管理和垃圾收集。
1:JVM内存模型:类加载机制【转载、验证、准备、解析、初始化】+类装载器【装载器分类、加载原则】+运行时数据区【方法区、堆、虚拟机栈、本地方法栈、程序计数器】。 2:垃圾回收:垃圾确定【引用计数法、可达性分析...
第40节垃圾收集器-parallel收集器详解00:11:02分钟 | 第41节垃圾收集器-cms收集器详解00:14:58分钟 | 第42节最牛的垃圾收集器-g1收集器详解00:18:04分钟 | 第43节内存分配-概述00:04:23分钟 | 第44节内存分配-...
JVM整体结构内存模型(对象的创建,指针压缩,对象大小,对象内存),垃圾收集器,垃圾收集器算法、内存调优(调优工具),垃圾收集,内存回收(算法),类加载机制(类加载过程,双亲委派),一图学完JVM所有的知识...
• HotSpot • ClassFile • ClassLoader • 内存模型、锁、同步 • JVM内存管理和垃圾收集 Java发展历程 JVM列表 OpenJDK 编译执行过程 解析执行和JIT编译
公司内部分享的ppt,主要内容:1)Java发展史概述 2)JVM内存模型 3)GC算法 4)HotSpot内存管理 5)垃圾收集器 6)JVM调优
3 jvm的内存模型 4 jmap的使用以及内存溢出分析 5 实战:内存溢出的定位与分析 6 jstack的使用 7 VisualVM工具的使用 day2: 1 什么是垃圾回收 2 垃圾回收的常见算法 3 垃圾收集器以及内存分配 4 可视化GC日志分析...
讲解java虚拟机 包括内存模型,内存管理,垃圾回收算法,垃圾回收调优,arthas、jmap内存问题排查
- 掌握jvm的内存模型(堆内存) - 掌握jamp命令的使用以及通过MAT工具进行分析 - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握VisualJVM工具的使用 - 了解什么是垃圾回收 - 掌握垃圾会回收的常见算法 ...
深入理解JVM内存模型、垃圾收集等底层知识 熟悉主流框架的设计思想和运行原理 掌握数据库、缓存、分布式系统等企业级开发技能 拓展视野,了解大数据、人工智能等前沿领域 综上所述,这本Java面试书籍旨在为广大Java...
├─(1) 0801_【掌握】JVM内存模型.mp4 ├─(2) 0802_【掌握】Java对象访问模式.mp4 ├─(3) 0803_【掌握】JIT即时编译器.mp4 ├─(4) 0804_【掌握】JVM堆内存结构.mp4 ├─(5) 0805_【掌握】新生代内存管理.mp4 ├...
一份JVM学习的笔记,含查看JVM运行时信息\JVM垃圾收集信息\JVM锁信息等