摘要:
先来看一张图,串行代表两个垃圾回收器按顺序执行,并行代表同时执行。STW代表工作线程暂停,Stop The World的意思。 垃圾回收器 执行顺序 执行方式 作用区域 使用算法 说明 Serial GC 串行 工作线程暂停,单线程进行垃圾回收 新生代 复制算法 Serial Old GC 串行 工 阅读全文
摘要:
为什么要进行垃圾回收? 垃圾是指 JVM 中没有任何引用指向它的对象,如果不及时清理这些垃圾对象,那么它就会一直占用内存,如果垃圾对象越来越多,就会出现OOM了。 要判断对象是否是垃圾对象有两种方式,一、引用计数法。二、可达性分析法。 而要清除垃圾对象有三种常用方式,一、标记-清除算法。二、复制算法 阅读全文
摘要:
1.概念 堆是JVM中最重要的一块区域,JVM规范中规定所有的对象和数组都应该存放在堆中,在执行字节码指令时,会把创建的对象存入堆中,对象的引用地址存入虚拟机栈的栈帧中。不过当方法执行完之后,刚刚所创建的对象并不会立马被回收,也就是说对象并不会随着栈帧的消失而消失,而是要等JVM后台执行GC后,对象 阅读全文
摘要:
1 什么是本地方法 首先要知道什么是本地方法,本地方法并不是 JVM 自己的方法,也不是 jre 里面的方法,而是指那些操作系统自己的方法(如C/C++方法),它们在操作系统目录里。可以这么理解,本地方法就是计算机操作系统对外提供的方法,JVM 通过调用这些方法可以实现 Java 程序和计算机的交互 阅读全文
摘要:
Java虚拟机栈(Java Virtual Machine Stack,简称JVM栈,又称Java方法栈)是 JVM 运行时数据区的一部分,主要用于支持Java方法的执行。每当一个新线程被创建时,JVM就会为这个线程分配一个私有的方法栈,线程执行过程中每个方法调用都会创建一个新的栈帧(Stack F 阅读全文
摘要:
Java程序计数器(Program Counter Register)是Java虚拟机(JVM)运行数据区的一个组成部分。每个线程都有它自己的程序计数器,这部分内存用于存储该线程下一条要执行的字节码指令的地址。如果该方法为本地方法(Native Method),则程序计数器的值为未定义。 特点: 线 阅读全文
摘要:
运行时数据区结构图如下: 可分为 5 个区域,分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用,会在后面的文章展开讲。 类加载子系统会把类信息加载到方法区,程序运行时会创建线程,每个线程都有自己的虚拟机栈、本地方法栈、程序计数器,线程每执行一个方法就会创建一个栈帧 阅读全文
摘要:
类加载系统加载类时分为三个步骤,加载、链接、初始化,下面展开介绍。 类加载子系统结构图: 1 类加载器 JVM 使用类加载器加载 class 文件,类加载器可分为引导类加载器和自定义类加载器两种。 引导类加载器(Bootstrap ClassLoader),有时也被称作启动类加载器或者零类加载器(N 阅读全文
摘要:
JVM Java的特性就是程序员一次编写,到处运行,意思是我们只需要写一份代码,就可以在不同的操作系统(windows、Linux、Mac OS等)中运行。但是不同的操作系统能看懂的指令是不同的,所以实现方式就是给每个操作系统开发一个Java虚拟机(JVM)。 JVM运行的过程是把我们代码编译后的字 阅读全文
摘要:
目录1 序列化和反序列化1.1 概念1.2 序列化可以做什么?3 实现方式3.1 Java 原生方式3.2 第三方方式4 反序列化漏洞 1 序列化和反序列化 1.1 概念 Java 中序列化的意思是将运行时的对象转成可网络传输或者存储的字节流的过程。而反序列化正相反,是把字节流恢复成对象的过程。 1 阅读全文