JVM学习
jvm学习笔记
计忆芳华
一个2017年入坑的java小白。
个人博客:jiyifh.top。
展开
-
【JVM学习-6.3】垃圾回收--相关概念
1. System.gc()的理解在默认情况下,通过System.gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保证马上触发GC)。JVM实现者可以通过system.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编原创 2020-08-20 17:49:49 · 214 阅读 · 0 评论 -
【JVM学习-6.2】垃圾回收--相关算法
文章目录1. 标记阶段:法1_引用计数算法 (java没有采用)1.1 引用计数算法概述1.2 引用计数算法优缺点1.3 分析证明java没有采用引用计数法1.4 小结2. 标记阶段:法2_可达性分析算法(也叫根搜索算法或追踪性垃圾收集)2.1 可达性分析算法概述2.2 可达性分析算法基本思路2.3 GC Roots2.4 可达性分析算法注意3. 对象的finalization机制3.1 finalization概述3.2 虚拟机中对象一般处于三种可能的状态3.3 判定是否可以回收具体过程3.4 代码测试可原创 2020-08-19 10:38:12 · 144 阅读 · 0 评论 -
【JVM学习-6.1】垃圾回收-- 概述
文章目录1. 什么是垃圾1.1 大厂面试题1.2 什么是垃圾( Garbage) 呢?1.3 垃圾收集2. 为什么需要GC3. 早期垃圾回收4. Java垃圾回收机制1. 什么是垃圾Java = (C++)–1.1 大厂面试题蚂蚁金服:你知道哪几种垃圾回收器,各自的优缺点,重点讲一下 cms和g1一面: JVM GC算法有哪些,目前的JDK版本采用什么回收算法一面: ( G1回收器讲下回收过程GC是什么?为什么要有GC?一面: GC的两种判定方法? CMS收集器与G1收集器的特点。百原创 2020-08-17 19:03:58 · 148 阅读 · 0 评论 -
【JVM学习-5】字符串常量池StringTable
文章目录1. String的基本特性2. String的内存分配2.1 StringTable为什么要调整3. String的基本操作4.字符串拼接操作4.1 编译期优化4.2 字符串变量拼接4.3 字符串拼接4.4 final 修饰字符串拼接4.5 拼接操作与append的效率对比5. intern()的使用5.1 面试题5.1.1 new String("ab")会创建几个对象5.1.2 new String("a")+new String("b")会创建几个对象呢5.1.3 关于String.inte原创 2020-08-17 15:56:34 · 257 阅读 · 0 评论 -
【JVM学习-4】执行引擎(Execution Engine)
文章目录1. 执行引擎概述2. Java代码编译和执行过程2.1 什么是解释器( Interpreter),什么是JIT编译器?2.2 为什么说Java是半编译半解释型语言?3. 机器码、指令、汇编语言3.1 机器码3.2 指令3.2.1 指令集3.3 汇编语言3.4 高级语言3.4.1 C、C++源程序执行过程3.4.2 字节码4. 解释器4.1 解析器概述4.2 解析器现状5. JIT编译器5.1 解释器与JIT编译器共存5.1.1 java代码的执行分类:5.1.2 HotSpot VM 为何解释器与原创 2020-08-15 19:51:06 · 255 阅读 · 0 评论 -
【JVM学习-3.8】JVM运行时数据区--直接内存
直接内存概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域直接内存是Java堆外的、直接向系统申请的内存区间来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存IONIO (New IO / Non-Blocking IO)byte[] / char[]BufferStreamChannel/** * IO NIO (New IO / Non-Blocking IO原创 2020-08-11 10:55:28 · 188 阅读 · 0 评论 -
【JVM学习-3.7】JVM运行时数据区--对象的实例化内存布局与访问定位
1. 对象的实例化1.1 创建对象的方式new最常见的方式变形1 : Xxx的静态方法变形2 : XxBuilder/XxoxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone() :不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反序列化:从文件中、从网络中原创 2020-08-10 21:33:56 · 290 阅读 · 0 评论 -
【JVM学习-3.6】JVM运行时数据区--方法区
1. 栈、堆、方法区的交互关系从线程共享与否的角度来看堆、栈、方法区的交互关系2. 方法区的理解方法区在哪?《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。’但对于HotSpotJVM而言,方法区还有一个别名叫做Non-heap(非堆),目的就是要和堆分开。所以,方法区可以看作是一块独立于Java堆的内存空间。方法区的基本理解方法区(Method Area)与Java堆一样,是各个线程共享的内存区域.原创 2020-08-10 15:30:24 · 308 阅读 · 0 评论 -
【JVM学习-3.5】JVM运行时数据区--堆
1. 堆的核心概述进程中堆的唯一性一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。➢ 堆内存的大小是可以调节的。对象创建和GC概述《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆, 在这里还可以划分线程私有的缓冲区( Thread Local Allocation Buffer, TLAB) .原创 2020-08-09 00:11:33 · 216 阅读 · 0 评论 -
【JVM学习-3.4】JVM运行时数据区--本地方法栈
在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface)本地方法接口什么是本地方法?简单来讲,一个Native Method就是一个java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的底层实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去.原创 2020-08-07 22:39:46 · 173 阅读 · 0 评论 -
【JVM学习-3.3】JVM运行时数据区--Java虚拟机栈
JVM运行时数据区简介Java内存空间内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)Java内存分区介绍java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与县城一一对应的,这些与线程对应原创 2020-08-07 21:57:26 · 316 阅读 · 0 评论 -
【JVM学习-3.2】JVM运行时数据区--程序计数器(PC寄存器)
JVM运行时数据区–程序计数器(PC寄存器)程序计数寄存器介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起- -些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。一个线程对应一个 JVM Stack。JVM St原创 2020-08-07 21:43:27 · 341 阅读 · 0 评论 -
【JVM学习-3.1】JVM运行时数据区--JVM运行时数据区简介
JVM运行时数据区简介Java内存空间内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)Java内存分区介绍java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与县城一一对应的,这些与线程对应原创 2020-08-07 21:42:11 · 363 阅读 · 0 评论 -
【JVM学习-2】类加载子系统(详细讲解+代码案例分析)
JVM发展历程Exact VM●为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机。● Exact Memory Management: 准确式内存管理➢也可以叫Non-Conservative/Accurate Memory Management➢虚拟机可以知道内存中某个位置的数据具体是什么类型。●具备现代高性能虚拟机的雏形➢热点探测➢编译器与解释器混合工作模式●只在Solaris平台短暂使用,其他平台,上还是classic vm .➢英雄气短,终被Hotspot虚拟机替换原创 2020-08-02 11:11:57 · 237 阅读 · 0 评论 -
【JVM学习-1】JVM与JAVA的体系结构
你是否也遇到过这些问题?●运行着的线上系统突然卡死,系统无法访问,甚至直接0OM!●想解决线上JVM GC问题,但却无从下手。●新项目上线,对各种JVM参数设置- -脸茫然, 直接默认吧,然后就JJ了●每次面试之前都要重新背一.遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优JVM参数,如何解决GC、00M等问题,一脸懵逼。大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。开发人员如何看待上层框架原创 2020-06-26 21:44:50 · 1039 阅读 · 0 评论