jvm
有关Java虚拟机的笔记
来杯茶的ni
因学习而年轻,因年轻而快乐
展开
-
类加载器--命名空间
内容来源于一位大佬的博客:https://www.cnblogs.com/fx-blog/p/11917459.html#%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90本人通过上面的博客,进行一些摘抄:1、命名空间:每个类加载器都有自己的命名空间,命名空间由该加载器及所有的父加载器所加载的...转载 2020-04-26 23:08:26 · 206 阅读 · 0 评论 -
工作线程内存溢出(OOM)不会停止其他线程运行
在多线程环境下,每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。其他的资源(比如堆、地址空间、全局变量)是由同一个进程内的多个线程共享。错误思想:如果堆内存是共享的话,那么单独的子线程内存溢出也就是堆占用满了,所以其他线程自然也就不能工作了。进行试验:代码: public static void main(Strin...原创 2020-04-24 16:05:52 · 1232 阅读 · 0 评论 -
JVM系统自学笔记8--JDK版本升级带来的一些JVM优化
一、JDK 8u20 字符串去重优点:节约大量内存 缺点:略微多占用cpu运行时间,新生代回收时间略微增加-XX:+UseStringDEduplicationString s1 = new String("hello");//char[]{'h','e','l','l','o'}String s1 = new String("hello");//char[]{'h','e','l...原创 2020-04-20 16:47:18 · 259 阅读 · 0 评论 -
JVM系统自学笔记7--G1垃圾回收器
一、介绍1、定义:Garbage First,jdk9后默认垃圾收集器。2、适用场景同时注重吞吐量和低延迟,默认暂停目标时200ms。 超大堆内存会将内存划分为多个相等的Region。 整体上使用标记-整理算法,两个区域使用复制算法。3、相关VM参数-XX:UseG1GC -XX:G1HeapRegionSize=size -XX:MaxGCPauseMillis=ti...原创 2020-04-20 16:38:20 · 230 阅读 · 0 评论 -
JVM系统自学笔记6--垃圾回收器
一、三种类型介绍1、串行单线程 堆内存较小,适用于个人电脑2、吞吐量优先多线程 堆内存大,多核cpu 单位时间内STW时间最小 0.2+0.2 = 0.4----单位时间内,尽可能少调用垃圾回收3、响应时间优先多线程 堆内存大,多核cpu 尽可能STW单次时间减小 0.1+0.1+0.1+0.1+0.1=0.5-----调用垃圾回收时,STW尽可能小二、串行垃圾回收...原创 2020-04-20 14:56:40 · 225 阅读 · 0 评论 -
JVM系统自学笔记5--垃圾回收算法、分代回收、相关配置参数
一、回收算法1、标记清除速度较快 会造成内存碎片化2、标记整理速度慢 不会有内存碎片3、复制不会有内存碎片 需要占用双倍内存空间4、总结复制算法回收速度与存活对象数量相关,数量越少,速度越快,如果存活对象过多,速度可能会比标记整理速度要慢。 实际JVM垃圾回收是根据情况配合三种算法使用,因为三种算法都有其实用的场景。二、分代回收 对象首先分...原创 2020-04-20 13:27:52 · 189 阅读 · 0 评论 -
JVM系统自学笔记4--判断垃圾、五种引用
一、判断垃圾1、引用计数法如果两个对象互相引用,计数器都为1,即使他们都没有被使用,都不会被清理。2、可达性分析算法(jvm使用的)Java虚拟机中的垃圾回收器采用可达性分析来探索所有的对象扫描堆中的对象,判断是否能根据GC Root的引用链找到该对象,找不到则回收二、五种引用1、强引用:指向某一对象的所有强引用都断开,该对象才能被回收。2、软引用:如果垃圾回收之后...原创 2020-04-19 23:30:43 · 303 阅读 · 0 评论 -
JVM系统自学笔记3--直接内存
一、介绍常见于NIO操作中,用于数据缓冲分配回收成本高,但读写能力强不受JVM内存回收管理二、直接内存使用前和使用后1、不使用直接内存因为java无法操作本地文件,在java堆内存中划出java缓冲区;从用户态转移到内核态,本地方法在系统内存中划出一段系统缓冲区,将磁 盘文件分部分缓冲到系统缓冲区中,间接的将系统缓冲区中数据传输到java缓冲区中;内核态转到用户态,调用输出流写...原创 2020-04-17 16:46:39 · 167 阅读 · 0 评论 -
JVM系统自学笔记2--类常量池、运行时常量池、字符串池
一、三者介绍1、class文件常量池(class constant pool):class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。字面量就是我们所说的常量概念,如文本字符串、被声明为final的常量值等。...原创 2020-04-17 15:47:53 · 367 阅读 · 0 评论 -
JVM系统自学笔记1
一、介绍定义:java virtual meachine -java运行时环境(java二进制字节码的运行环境)。好处:一次编写到处运行 自动内存管理,垃圾回收 数组下标越界检查 多态比较:常见的JVM...原创 2020-04-17 14:13:08 · 215 阅读 · 0 评论 -
类加载器自学笔记
一、介绍java类通过编译形成字节码文件,存放在磁盘中。通过类加载器加载到java虚拟机内存中。二、类的加载、连接和初始化当java查询需要某个类时,虚拟机会保证这个类已经被加载、连接和初始化。连接又包含验证、准备和解析。1、类的加载通过类的完全限定名(包名和类名)查找此类的字节码文件,把类的.class文件中的二进制数据读入到内存中,并存放在运行时数据区的方法区内。然后利...原创 2020-04-06 15:44:51 · 157 阅读 · 0 评论 -
jvm自学笔记2
jvm参数设置方法:1、右键,点击Run As下的Run Configuration2.输入对应指令原创 2020-03-12 20:48:11 · 111 阅读 · 0 评论 -
jvm自学笔记1
一、更改虚拟机启动机制1.找到jdk下的jre/lib/i3862.打开jvm.cfg(把要启动的机制放在最上)二、Java虚拟机结构三、Java堆划分1.新生代2.老年代3.永久代四、垃圾回收算法五、...原创 2020-03-11 01:41:49 · 134 阅读 · 0 评论