深入理解JVM--我的学习笔记
来源:互联网 发布:java框架有必要学吗 编辑:程序博客网 时间:2024/05/17 01:13
现在转行做Java开发,相信有过Java开发经验的人都知道,做Java开发要学很多东西:JavaSE,JVM,设计模式,线程并发以及锁原理等等。虽然不多,但内容很有深度,需要反复的斟酌才能有更深一步的理解。本人近来在看《深入理解JVM》,但是怕看后又忘了或是理解不到位,不够深入。所以把看过的东西用自己的语言写在这里,共勉。
首先说一下为什么要学习JVM。JVM是Java程序运行锁必须的环境,没有它Java就不能运行。Java程序运行时与之相关的class,instance,内存都有JVM管理,所以理解了JVM的运行机制,出现BUG时可以很快的定位Bug的原因和位置;这也是通向Java架构师必须要走的一步。另外,在Java面试的过程中,不少的技术经理也都会问到关于JVM的一些东西,回答的不好基本就没戏了。所以为了工作,为了兴趣都应该学习JVM的运行机制。好了,闲话说道这里,马上进入正题。(文章会不定时更新,欢迎各位批评指正,共同进步)。
第一节 JVM的内存管理
JVM的内存对计算机的物理内存做了映射处理,即JVM的内存的不同部分可能对应着物理内存的运存、寄存器或告诉缓存(想了解具体映射关系的同学,可以参考相应的博文,不过意义不大)。
JVM将内存划分为六个部分:Java堆,方法区,程序计数器区,虚拟机栈(VM Stack),本地方法栈(native stack),直接内存区(direct memory)。下面具体介绍各个部分。
(1)Java堆。这个区域应该是每一个Java程序员都知道的地方,你创建的每一个对象都存放在这个区域。GC的大部分操作都是在这里,毕竟GC的主要工作就是释放无用的对象实例。这个区域是线程共享的。
(2)方法区。这个区域也是线程共享的(就这俩是想成共享的)。进一步可以分为常量池、静态区、jit编译器编译过的代码等等。常量池又分为Class常量池和字符串常量池,其中字符串常量池是可以动态扩展的(运行时产生的字符串常量也添加到这里);Class常量池里存放着程序中每一个用到的类的Class文件(这个会在后边的对象布局中用到);静态区存放的是静态成员包括静态域和静态方法;
(3)程序计数器区。该区域是线程私有的(VM stack,native stack也是线程私有的),它可以看做的字节码在运行时的指示器。因为操作系统的时间片运行原理,每个线程在自己的时间片用完后都要挂起,以便其他线程或进程能运行,所以要对线程进行现场保护,该区域也就需要线程私有了。
(4)虚拟机栈。这个区域是为Java方法服务的。方法在执行时所需要的参数类型,返回类型等都在这里,其中最重要的是变量符号表,这个符号表中存放了方法的基本类型,引用类型和returnValue类型,其大小在编译时期就已确定,运行时大小不变。
(5)本地方法栈。这个区域和虚拟机栈类似,只不过这个栈时为本地方法服务的。但不同的虚拟机又不同的实现,sun公司的Hotspot将这两个栈合二为一了。
(6)直接内存区。这个区不是JVM内存的一部分,也不是JVM规范的一部分,其大小不受Java堆大小的影响,理论上可以任意大小,但是计算机的物理内存和交换区大小有限,所以还是受物理机的限制。这部分也是经常被访问的地方,也是在考虑JVM内存大小时容易忽略的地方。应注意 !
简单总结:线程共享的区域----Java堆和方法区;线程私有的区域----程序计数器区,虚拟机栈,本地方法栈;
GC经常访问的是Java堆,堆方法区的访问效果也不错,主要是涉及到类的卸载。
- 深入理解JVM--我的学习笔记
- 《深入理解JVM》学习笔记(1)
- 深入理解JVM(我的总结)
- 深入理解JVM笔记
- 《深入理解jvm》笔记---第一章
- 深入理解JVM笔记三
- 深入理解jvm笔记1
- 深入理解JVM学习笔记-自动内存管理机制
- JVM内存模型(深入理解Java虚拟机学习笔记)
- JVM垃圾回收(深入理解Java虚拟机学习笔记)
- 深入理解JVM学习笔记——Java内存区域
- 深入理解JVM学习笔记——Java垃圾回收
- 深入理解Java虚拟机学习笔记-1.JVM内存模型
- 深入理解Java虚拟机学习笔记-2.JVM垃圾回收
- 《深入理解java虚拟机》学习笔记(1)--jvm内存区域
- JVM深入探索与实践,谈谈我的理解
- JVM内存的理解(学习笔记)
- 【深入理解JVM】学习笔记——-1、JVM基本结构
- 6.S5PV210时钟初始化c语言实现代码
- 如何设计一个在线烧录方案?
- Java的代理模式(一)静态代理
- lintcode --不同的二叉查找树
- PAT-L1-002. 打印沙漏
- 深入理解JVM--我的学习笔记
- NYOJ 石子合并(一)经典区间DP
- nodejs服务端使用jquery操作Dom
- TSUNG学习教程 工作原理(三)
- Session和Cookie的区别与联系
- 【python】计算π的值
- Java并发编程的艺术笔记
- 双滚轮条件选择器
- FFmpeg 学习资料汇总