jvm
WWYDFL
天赋决定上限,基础决定下限
展开
-
01-025 【jvm】九种OOM常见原因及解决方案
1. java.lang.OutOfMemory:java heap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出java.lang.OutOfMemoryError:Javaheap space 错误(根据实际生产经验,可以对程序日志中的 OutOfMemoryError 配置关键字告警,一经发现,立即处理)。原因分析Javaheap space 错误...转载 2020-02-22 12:23:03 · 393 阅读 · 0 评论 -
01-024 【jvm】垃圾收集器之G1垃圾收集器
以前收集器特点年轻代和老年代是各自独立且连续的内存块;年轻代收集使用单eden+s0+s1进行复制算法;老年代收集必须扫描整个老年代区域;都是以尽可能少而快速地执行GC为设计原则G1是什么G1(Garbage First)收集器,是一款面向服务端应用的收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集器暂停时间的要求。具有以下特性:向CMS一...原创 2020-02-15 17:38:35 · 350 阅读 · 0 评论 -
01-023 【JVM】七大垃圾收集器及相关问题
Serial/Parallel/Cms/G1原创 2020-02-15 17:37:36 · 190 阅读 · 0 评论 -
01-021【jvm】聊聊volatile
volatile/JMM/DCL/可见性/指令重排原创 2020-01-30 01:03:07 · 144 阅读 · 0 评论 -
01-020 【jvm】JMM --Java Memory Model Java内存模型
JMM定义了一套在多线程读写共享数据时(成员变量,数组),对数据的可见性,原子性,有序性的规则和保障1.保证原子性原子性:要么全部执行,要么全不执行。Java中有两种方式实现原子性一种是使用锁机制,锁具有排他性,也就是说它能够保证一个共享变量在任意一个时刻仅仅被一个线程访问,这就消除了竞争;另一种CAS指令。怎么保证原子性?加锁:synhronized、Lock在java中提供了...原创 2020-01-23 14:53:28 · 188 阅读 · 1 评论 -
01-019 【jvm】语法糖概览
1.默认构造器public class Candy1{}编译成class的代码:public class Candy1{ //这个无参构造器是编译器帮我们加上的 public Candy1(){ super();//调用父类Object无参构造方法 }}2.自动拆装箱public class Candy2{ public static voi...原创 2020-01-23 01:45:04 · 112 阅读 · 0 评论 -
01-018 jvm 本地接口/本地方法栈/Native
nativepublic class NativeT2 { public static void main(String[] args) { Thread t1 = new Thread(); t1.start(); t1.start(); //多次start报异常java.lang.IllegalThreadStateEx...原创 2020-01-18 16:54:56 · 257 阅读 · 0 评论 -
01-017 jvm类加载器、双亲委派与沙箱安全
ClassLoader负责加载class文件,class文件在文件开头有特定的文件标示(cafe babe,后面符合Java的语法规定),将class文件字节码内容加载到内存中,并将这些内容转换成方法区中运行时数据结构并且ClassLoader只负责class文件加载,置于它是否可以运行,则由Execution Engine决定ps.大Class装进方法区,一个类的模板,按照模板生成实例N个...原创 2020-01-18 16:14:31 · 286 阅读 · 0 评论 -
01-014 jvm垃圾回收调优
调优领域1.内存2.锁竞争3.CPU占用4.io确定目标Hotspot:科学运算:高吞吐量互联网项目:响应时间后选择合适的回收器CMS、G1(低延迟,吞吐量可调,JDK9)、ZGC(jdk12):低延迟ParallelGC:高吞吐量扩展:Zing:虚拟机,0停顿最快的GC是不发生GC查看full GC前后的内存占用,考虑下面几个问题1.数据是不是太多?2.数据表示是...原创 2019-12-19 22:04:13 · 185 阅读 · 0 评论 -
01-013 jvm垃圾回收器G1
适用场景1.同时注重吞吐量(throughput)和低延迟(low latency),默认暂停目标200ms;2.超大堆内存,会将堆划分为多个大小相等的Region;-XX:G1HeapRegionSize=size设置大小(size=1,2,4,8…)3.整体上适用标记整理算法,两个区域之间是复制算法;-XX:+UseG1Gc(G1启用开关,在jdk9之后是默认的)G1垃圾回收阶段...原创 2019-12-19 19:00:28 · 169 阅读 · 0 评论 -
01-010 【jvm】垃圾回收之回收算法(重点)
标记清除先把没被GC root引用的对象标记起来,再清除对象,对象所释放内存的起始地址首尾记录下来,放入空闲地址列表,下次有需要的时候可以进行内存分配。优点:速度快;缺点:空间不连续,易产生内存碎片,新对象可能存不进去。标记整理优点:没有内存碎片;缺点:对象在整理过程中,内存地址发生变化,速度慢。复制算法优点:没有内存碎片;缺点:占用双倍内存空间。复制过程中完成整理,左侧...原创 2019-12-13 15:33:05 · 93 阅读 · 0 评论 -
01-009 jvm 垃圾回收之五种引用
强引用new 创建的对象特点:沿着GC root的引用链能找到对象,GCroot 都断开引用时才能进行垃圾回收。软引用(SoftReference)没被直接的强引用所引用,垃圾回收并且内存不够时会释放掉软引用。应用举例/** * 演示软引用 * -Xmx20m -XX:+PrintGCDetails -verbose:gc */public class SoftDemo {...原创 2019-12-13 15:09:29 · 477 阅读 · 0 评论 -
01-008 jvm 垃圾回收之判断垃圾
如何判断对象可以进行垃圾回收1.引用计数法引用计数为0时对象可以垃圾回收;可能出现循环引用,造成内存泄露;2.可达性分析 对堆内存中对象扫描,沿着root GC的引用链找不到该对象,可回收。eclipse出品的Memory Analyzer(MAT)工具:分析堆内存。抓取内存快照的命令:jmap -dump:format=b,live,file=1.bin pid抓取后用MAT打开...原创 2019-12-13 14:04:20 · 98 阅读 · 0 评论 -
01-006 jvm StringTable
常量池与串池关系举例:(老师这里讲的特别特别特别好!!)// StringTable [ "a", "b" ,"ab" ] hashtable 结构,不能扩容public class Demo { // 常量池中的信息,都会被加载到运行时常量池中, 这时 a b ab 都是常量池中的符号,还没有变为 java 字符串对象 // ldc #2 会把 a 符号变为 "a" 字符...原创 2019-12-12 22:25:34 · 162 阅读 · 0 评论 -
01-005 jvm方法区
定义方法区(Method Area):1.6永久代(PermGen),1.8元空间(metaspace)1.8中定义:方法区是所有线程共享的,存储一些和类结构相关的一些信息,包括方法、构造器、成员方法等等。虚拟机启动时创建方法区,逻辑上是堆的一个组成部分(不一定)。各个公司可能会有自己的不同实现,比如Oracle的Hotspot在1.8以前实现是永久代(堆的一部分),1.8之后实现是元空...原创 2019-12-12 17:34:13 · 123 阅读 · 0 评论 -
01-004 【jvm】 堆、对象生命周期、堆参数、日志分析调整
定义堆(heap):通过new关键字,创建的对象都使用堆内存特点:①线程共享,要考虑安全问题。②垃圾回收机制堆内存溢出(OutOfMemoryError)-Xmx8M:设置最大堆空间命令内存大时,泄露不容易发现,可能随着时间推移才会暴露出堆内存溢出问题。堆内存诊断1.工具① jps(配置好jdk环境变量,在Idea的Terminal下可执行命令)查看系统中有哪些进程 jps...原创 2019-12-12 16:34:30 · 197 阅读 · 0 评论 -
01-003.jvm 栈
概念Java 虚拟机栈Java Virtual Machine Stacks栈:线程运行时需要的内存空间。栈的数据结构特点:先进后出。栈帧:栈帧就是每个方法运行时需要的内存。每个线程只能有一个活动的栈帧,对应栈顶部的当前正在执行的那个方法。debug状态下IDEA中可以在frame下看栈的运行。线程安全几个问题1.垃圾回收不涉及栈内存。2.栈内存越大越好吗?物理总内存不变,栈...原创 2019-12-12 13:19:20 · 98 阅读 · 0 评论 -
01-002.jvm PC寄存器/程序计数器
程序计数器program counter register寄存器是CPU里读取最快的,用它来做程序计数器Java源代码 》二进制字节码jvm指令》解释器》机器码》CPU作用记录下一条指令的执行地址特点1.线程私有的,每个线程都有自己的程序计数器;2.唯一不会内存溢出的;学习整理于jvm视频课程...原创 2019-12-10 22:08:47 · 142 阅读 · 0 评论 -
01-001.jvm概述
JVM什么是JVM?Java Virtual MachineJava 程序二进制字节码文件运行环境。回忆:JRE:JDK:优点1.一次编译,到处运行;2.自动内存管理,垃圾回收机制;3.数组下标越界检查;4.多态,提升可扩展性;用途1.理解底层原理2.定位解决问题常见的JVMOracle HotSpotOpenJ9…底层不同,接下来以Hotspot为准。...原创 2019-12-10 21:51:51 · 104 阅读 · 0 评论