![](https://img-blog.csdnimg.cn/20200424151303158.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM和GC
剖析JVM的类加载流程,以及类加载器,并深入到类加载的底层机制-双亲委派,到JVM体系结构之内存模型;专注于Java的垃圾回收,Java语言的高性能其实有赖于可靠的GC机制,GC各类算法的原理
loulanyue_
使我有洛阳二尺地,安能配六国将相
展开
-
深入理解Java虚拟机---jdk1.8废弃永久代的原因
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载 的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把 方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区 分开来。说到方法区,不得不提一下“永久代”这个概念,尤其是在JDK 8以前,许多Java程序员都习惯在 HotSpot虚拟机上开发、部署程序,很多人都更愿意把方法区称呼为“永久代”(Permanent Gener原创 2020-06-19 22:21:24 · 591 阅读 · 0 评论 -
在JVM垃圾回收方面(GC),微服务如何完成定制化部署、调优
微服务定制化部署、GC调优原创 2020-05-02 16:07:49 · 353 阅读 · 0 评论 -
JVM下常用的基本配置参数
基本配置参数原创 2020-05-01 22:26:37 · 191 阅读 · 0 评论 -
JVM的常见垃圾收集器
pstack命令可显示每个进程的栈跟踪,pstack pid即可,pstack命令须由pid即可,pstack命令须由pid即可,pstack命令须由pid进程的属主或者root运行。这次出现cpu占比100%的情况,但看memory占比,并无异常,怀疑是某个地方死循环了。经同事提醒,用pstack命令查看相关进程,通过运行多次pstack,发现代码栈总是停在同一个位置。pstack和strac...原创 2019-07-20 21:17:27 · 822 阅读 · 1 评论 -
如何理解JVM中四大引用,强引用、软引用、弱引用、虚引用
1.内部的存储结构内部存储结构:数组+链表+红黑树(JDK8)2.默认的容量大小是多少,默认的装载因子是多少默认容量16,默认装载因子0.75。3.key和value的数据类型分别是什么。key和value对数据类型的要求都是泛型。4.put操作的时候key的取值是否可以为null.key可以为null,放在table[0]中。5.为什么要重写hashCode和equals方法h...原创 2019-06-15 19:00:34 · 1168 阅读 · 0 评论 -
JVM类加载机制和双亲委派模型
类的生命周期加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载(垃圾回收)Loading - Verification - Preparation - Resolution - Initialization - Using - Unloading类加载器名称启动类加载器Bootstrap ClassLoader 存放在<JAVA_HOME>\lib 目录...原创 2019-08-28 21:44:55 · 194 阅读 · 0 评论 -
JVM 里 new 对象时,堆会发生抢占吗?怎么去设计JVM的堆的线程安全
假设JVM虚拟机上,每一次new 对象时,指针就会向右移动一个对象size的距离,一个线程正在给A对象分配内存,指针还没有来的及修改,另一个为B对象分配内存的线程,引用这之前的指针指向,这就发生了抢占,被称为指针碰撞TLAB的实现是给每个线程分配私有的指针,存对象的内存空间还是给所有线程访问,其它线程无法在这个区域分配,保证堆的线程安全Thread Local Allocation Buffe...原创 2020-02-16 12:26:47 · 3107 阅读 · 0 评论 -
剑指JAVA---JVM知识点
谈谈你对Java的理解平台无关性 一次编译到处运行GC 垃圾回收机制语言特性 泛型 反射 lambada表达式面向对象 封装 继承 多态类库 Java自带的集合 并发库 网络库 IO NIO异常处理Compile Once, Run Anywhere如何实现编译时 源码编译成字节码运行时 javap -c 对代码进行反汇编Javac编译,生成字节码JVM解析,转换成特定...原创 2020-02-06 23:38:09 · 226 阅读 · 0 评论 -
深入浅出JAVA虚拟机
一、运行时数据区域程序计数器记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。Java 虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小,在 JDK ...原创 2019-09-20 19:38:29 · 449 阅读 · 0 评论 -
JVM中的OutOfMemoryError
Java为数据结构中的映射定义了一个接口java.util.Map,它包括3个实现类:HashMap、HashTable和TreeMap。 Map是用来存储键值对的数据结构,在数组中通过数组下标来对其内容索引的,而在Map中,则是通过对象来进行索引,用来索引的对象叫做key,其对应的对象叫做value。 HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获...原创 2019-07-03 21:56:16 · 454 阅读 · 1 评论 -
JVM命令参数解析---常用全覆盖
(1)-Xms20M表示设置JVM启动内存的最小值为20M,必须以M为单位(2)-Xmx20M表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高(3)-verbose:gc表示输出虚拟机中GC的详细情况(4)-Xss128k表示可以设置虚拟机栈...原创 2019-07-22 22:04:42 · 299 阅读 · 0 评论 -
深入浅出JVM垃圾回收
内存溢出与内存泄露1、内存溢出内存溢出指的是程序在申请内存的时候,没有足够大的空间可以分配了。2、内存泄露内存泄露指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可达但无用。内存泄露一般都是因为内存中有一块很大的对象,但是无法释放。从定义上可以看出,内存泄露终将导致内存溢出。注意,定位虚拟机问题内存问题的时候第一步就是要判断到底是内存溢出还是内存...原创 2019-07-25 20:40:47 · 149 阅读 · 0 评论 -
JVM的四大垃圾收集算法
一、定义1、计算机存储元件寄存器:中央处理器CPU的一部分,是计算机中读写速度最快的存储元件,但是容量很少内存:属于独立的一个部件,是和CPU沟通的桥梁,用于存放CPU中的运算数据以及与外部存储器交换的数据。尽管在今天,对内存的读写速度已经很快了,但是由于寄存器是在CPU上的,所以对于内存的读写速度和对于寄存器的读写速度上还是有几个数量级的差距。但是没办法,对于内存的读写I/O操作是很难消除...原创 2019-07-24 22:12:25 · 239 阅读 · 0 评论