JVM
码农回忆录
这个作者很懒,什么都没留下…
展开
-
GC算法【JVM】
JVM-GC算法 1.什么对象是垃圾? 当一个对象没有任何引用指向他的时候他就是一个垃圾 2.GC的作用 GC的作用实际上很简单就是回收没有用的对象,实际上对象回收后会存在内存碎片化,这样不连续的空间没办法法分配大对象,所以GC也有整理内存碎片化的作用 3.常见GC算法 3.1引用计数算法 原理:给每一个对相关保存一个被引用次数的标记值, 被引用一次改值就增加1, 这样在GC回收的时候直接就判断当前值是否为0即可 优缺点 优点:实现简单 缺点:无法解决循环引用问题 JDK中是否使用? 没有原创 2020-05-26 10:28:41 · 4750 阅读 · 0 评论 -
堆【JVM】
JVM-堆 1. 堆的作用 堆的作用其实就是保存运行时的数据,主要就是存储创建的对象;但是在不同版本的JDK有些许的变化,在JDK8以后堆中还存储了静态变量和字符串常量池 2.堆的内存细分 新生代 Eden Survivor from to 老年代 3. 参数调整 -Xms 默认值为电脑的1/64 -Xmx 默认值为电脑最大内存1/4 注意 为什么设置的堆大小是600M而使用Runtime对象去获取时发现总的可用大小为575M;这里是因为Survivor区在划分时s原创 2020-05-26 09:01:54 · 3027 阅读 · 0 评论 -
Java中为什么字符串拼接效率低
JVM-为什么字符串拼接效率低 前置内容 java虚拟机栈 字符串拼接原理 1. 源码准备 首先编写两个方法一个使用字符串拼接,一个使用StringBuilder进行拼接; public class hello { public void concatStrByDefault() { String basic = "name "; for (int i = 0; i < 100; i++) { basic += i; } System.out.println(b原创 2020-05-25 17:40:26 · 4956 阅读 · 0 评论 -
Java字符串拼接原理
JVM-字符串底层实现原理 前置内容 java虚拟机栈 1.那些字符串会进入字符串常量池 直接写的字面量 字面量的拼接结果(注意:如果字符串拼接中有变量则结果不会进入字符串常量池) 调用String的intern方法可以将String存入字符串常量池 2. 字面量的拼接原理 java源码 package com.hgy; import java.util.Arrays; import java.util.List; public class hello { public stati原创 2020-05-25 17:12:15 · 5439 阅读 · 0 评论 -
虚拟机栈【JVM】
JVM-虚拟机栈 1. 作用 虚拟机栈实际上是程序在运行时来记录方法调用的一个栈, 我们的每一个线程都有一个虚拟机栈,在这个线程里面没调用一个方法就有一个栈帧入栈,当一个方法调用完成这个栈帧就出栈;直到最后一个栈帧出栈整个线程的生命周期也就结束了 2. 栈中存储的基本单位 栈帧 栈帧的基本组成 局部变量表(也就是当前方法里面能使用那些变量) 操作数栈(他是一个类似于解析表达式的栈,主要用于暂存中间结果) 动态链接(保存了运行时常量池的地址,主要可以将符号链接转为直接引用) 其他信息 3.局部变原创 2020-05-24 22:24:25 · 4660 阅读 · 0 评论 -
static和static final的区别
JVM-static vs static final 如果不清楚JVM类加载过程请先看另一篇文章类加载系统 开发时我们经常用到static以及static final来修饰我们的字段变量,那么他们到底有什么区别呢?其实他们的区别可以用使用字节码文件来解析 1. 准备测试代码 package com.hgy; import java.util.Arrays; import java.util.List; public class hello { private static String name原创 2020-05-24 19:19:44 · 5000 阅读 · 0 评论 -
方法区【JVM】
JVM-方法区 1. 方法区的作用 当类加载器加载完成类之后,会将类信息、运行时常量池、静态变量(此处指的是指针,如果是一个对象对象的分配还是在堆中)等存储在方法区;但在JDK不同版本对字符串常量和静态变量的存储有所不同,这部分内容后续列出 2. 不同版本的方法区 JDK6:在JDK6以前方法区也就是HotSpot虚拟机中的永久代,此时类信息、运行时常量池、静态变量等存储在方法区 JDK7:在JDK7中法区也是HotSpot虚拟机中的永久代,此时类信息以及其他信息存储在永久代,但是静态变量以及字符串常原创 2020-05-24 18:53:24 · 5279 阅读 · 0 评论 -
类加载器【JVM】
JVM-类加载器 1. 类加载系统 作用:类加载系统的主要作用就是将编译生成的字节码文件加载到内存,当然此处的字节码文件可以存在磁盘或网络等其它地方。 主要过程: 加载 链接 初始化 1.1 加载过程 加载过程主要把磁盘或网络中其他形式的字节码加载到内存中, 并且在内存中生成Class对象 1.2链接过程 验证 主要用于验证当前字节码文件是否满足虚拟机的格式, 比如class文件在文件开头都有CA FE BA BE这几个十六进制数据,如果没有就说明字节码文件有问题 准备 准备阶段主要原创 2020-05-24 10:27:49 · 4576 阅读 · 0 评论