![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
haoxin963
身为一名资深Java程序员,我已经把人工智能融入我的代码中,梦想用Java创造出能和我一起喝咖啡的智能机器人!
展开
-
JVM(一)
JVM简介JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就...原创 2018-08-23 09:36:17 · 157 阅读 · 0 评论 -
JVM(二)-java内存区域和内存溢出异常
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 一、运行时数据区JVM在执行Java程序时会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁。JVM保存下面几个运行时的数据区域。1、程序计数器...原创 2018-08-23 10:48:15 · 152 阅读 · 0 评论 -
JVM(三)-垃圾回收机制与内存分配策略
上一篇博客介绍了java内存运行时的各个区域,其中程序计数器,虚拟机栈,本地方法栈这3个区域随着线程而生,随着线程而灭。栈中的栈帧随着方法的进入和退出有条不紊执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,方法结束或者线程退出时,内存自然就跟着回收了。而java的堆个方法区则不一样。我们只有在程序运行时才知道会创建多少对...原创 2018-08-23 14:02:05 · 280 阅读 · 0 评论 -
JVM(四)-类文件结构
Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各种变量、关键字和运算符的语...原创 2018-08-23 15:04:18 · 210 阅读 · 0 评论 -
JVM(七)-垃圾回收算法及收集器
垃圾回收算法标记清除标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。在标记阶段首先通过根节点,标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。标记清除算法带来的一个问题是会存在大量的空间碎片,因为回收后的空间是不连续的,这样给大对象分配内存的时候可能会提前触发full gc。复制算法将现有的内存空间分为两快...原创 2018-11-06 14:32:02 · 205 阅读 · 0 评论 -
JVM(五)-类加载机制
一、什么是类的加载 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制。 在Java中,类型的加载、连接和初始化过程都在程序运行期间完成的,这种策略虽然会使类加载时增加一些性能开销,但是提供了高度的灵活性,Java里天生可以动态扩展的语言特就是依赖于运行期动态加载和动态连接的特...原创 2018-12-23 12:20:21 · 170 阅读 · 0 评论 -
JVM(六)-类加载器
上一篇博客介绍了类加载机制,知道类加载主要有加载、验证、准备、解析、初始化五个阶段,其中加载阶段是可控性最强的阶段,因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来完成加载,这篇博客主要介绍类加载器。一、什么是类加载器 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:J...原创 2018-12-23 16:19:59 · 160 阅读 · 0 评论 -
JVM(八)-jvm监控工具
java应用开发中经常会遇到以下问题:内存不足OutOfMemory(大对象没有gc等),内存泄露; 线程死锁,线程数过多; 锁争用(Lock Contention),资源未及时释放(数据库); Java进程CPU消耗过高.如果遇到了以上这种问题,在线下可以有各种本地工具支持查看,但到线上了,就没有这么多的本地调试工具支持,我们该如何基于监控工具来进行定位问题?我们一般会基于数据收...原创 2019-03-22 15:29:01 · 742 阅读 · 0 评论