
JVM
Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机和Java API类库。
冷锋-
只要现在努力一切都来得及,最近暂停更
展开
-
总结Minor GC、Full GC触发条件
GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。GC机制要准确理解Java的垃圾回收机制,就要从:“什么时候”,“对什么东西”,“做了什么”三个方面来具体分析。第一:“什么时候”即就是GC触发的条件。GC触发的条件有两种。(1)程序调用System.gc时可以触发(会建议JVM进行垃圾回收,不代表一定会进转载 2020-12-18 16:52:41 · 872 阅读 · 2 评论 -
深入理解JVM--虚拟机栈执行过程
虚拟机中Main主线程在执行内,栈的执行过程如下图: 从线程栈的角度来看,JVM基本单位是方法调用;实际上,JVM执行的最基本单位的指令(即原子操作)是汇编语言性质的机器字节码。原创 2020-08-04 22:50:45 · 516 阅读 · 0 评论 -
Jvisualvm 远程监控tomcat运行情况
第一步:增加tomcat监控对外端口在tomcat的bin目录下找到catalina.sh,并加上JAVA_OPTS='-server -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M -XX:NewSize=256m -XX:MaxNewSize=512m -XX:+UseParallelGC -XX:Paralle...原创 2019-09-16 10:58:57 · 235 阅读 · 0 评论 -
深入理解JVM之--字节码
上篇讲到栈帧,现在我们需要了解栈帧的执行过程,那就涉及到反编译字节码。一. 反编译代码(1)源代码/** * 编译:javac com\jvm\StackFrame.java * 反编译:javap -p -v com\jvm\StackFrame.class */public class StackFrame { public static void ...原创 2020-03-04 17:19:14 · 310 阅读 · 0 评论 -
深入理解JVM之--栈帧
概述 虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行时,都会创建一个栈帧,用于存储局部变量,操作数栈,动态链接,方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。栈帧结构,及逻辑图1.栈帧的概念 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是...原创 2020-03-04 17:05:59 · 987 阅读 · 0 评论 -
深入理解Jvm--MinorGC过程
第一次GC:在不断创建对象的过程中,当Eden区域被占满,此时会开始做Young GC也叫Minor GC1)第一次GC时Survivous中S0区和S1区都为空,将其中一个作为To Survivous(用来存储Eden区域执行GC后不能被回收的对象)。比如:将S0作为To Survivous,则S1为From Survivous。2)将Eden区域经过GC不能被回收的对象存储到To ...原创 2020-01-17 16:12:14 · 1218 阅读 · 0 评论 -
深入理解JVM之--内存结构
前言在开始之前,先了解一下Jdk1.8开始,舍弃内存结构中的永久代及其原因。(1)jdk1.8 永久代变化图 1.永久代经常内存溢出,引发java.lang.OutOfMemoryError: PermGen异常。 2. 移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 的融合,因为 JRockit 没有永久代。...原创 2020-01-17 15:39:56 · 340 阅读 · 0 评论 -
深入理解JVM之--常量池、运行时常量池、字符串常量池
前言在JDK7之前,字符串常量是存在永久带Perm 区的,JDK7开始在将常量池迁移到堆中,这个变化也导致了String的新特性,接下来,我们按照jdk1.7开始后的版本进行介绍。JdK1.7之前Jdk1.7开始一.常量池共有三类:1.运行时常量池2.Class文件常量池3.字符串常量池二. 详解常量池(Constant Pool)1.1常量池(...原创 2020-01-17 09:25:45 · 1767 阅读 · 6 评论 -
深入理解JVM之--运行时数据区域
运行时数据区域 JVM在执行Java程序的过程中会把说管理的内粗分为不同的数据区域。有的区域是在虚拟机启动而创建,有的区域则是跟随线程的启动和结束而建立销毁。如下图,在JVM GC调优中通常都是堆、方法区。1.程序计数器(Pc Register)每个线程都有自己的Pc Register,它的作用是当前线程所执行的指令地址。2.Java虚拟器栈(statck)...原创 2020-01-16 15:45:55 · 260 阅读 · 0 评论 -
深入理解JVM之--类的加载机制
1.类的加载过程 Java中从类被加载到虚拟机内存中开始,到卸载出内存结束。整个生命周期包括: 加载--验证---准备---解析---初始化---使用---卸载,一共七个阶段。其中验证-准备--解析被统称为”连接“,如下图:2.类的初始化JVM规定有且只有四种情况对类进行“初始化”(前提,类没有被初始化)1.使用new关键字实例化对象的时候; 读取或者设置类...原创 2020-01-15 20:17:24 · 164 阅读 · 0 评论 -
深入理解JVM之--垃圾收集算法
垃圾收集算法 前言开始之前,首先先了解一下对象回收等相关知识(一) 对象回收(1)判断对象是否存活1.引用计数算法给对象中添加一个引用计数器,每当有一个地方引用此对象,计数器就加1;当引用失效时,计数器就减1。计数器值为0的情况下,对象就不可被使用。缺点:很难解决对象之间的相互循环引用的问题。2.根搜索算法通过GC Roots的对象作为起始点,从这些节点开始往...原创 2020-01-03 11:14:43 · 178 阅读 · 0 评论