jvm
文章平均质量分 56
陈豪小可爱
生活需要操练起来了
展开
-
jvm-垃圾回收算法和垃圾回收器(6)
垃圾回收算法: 分代收集理论 标记-复制算法 标记-清除算法 标记-整理算法原创 2021-06-03 14:13:07 · 85 阅读 · 0 评论 -
jvm-对象图(5)
逃逸分析: 分配 1:请求一个服务器的接口,会给本次请求分配一个线程 2:通过类加载器把本次接口需要调用的类,检查是否加载过,加载过直接使用,没加载需要加载到内存中。 3:判断对象是否可分配到栈内存中(逃逸分析:如果该对象没有逃逸:作用于域,可以分配栈内存中,否则堆内存。) 4: 内存分配: 指针碰撞 : 内存规整 本地线程分配缓冲(TLAB) :每个线程,会在堆内存中预先分配一块内存。(默认开启) 5:如果对象存到堆内存。 判断,当前对象是否是大对象,大对象,直接存到老年代(jv...原创 2021-06-03 09:37:58 · 129 阅读 · 0 评论 -
jvm-堆对象分配,布局和访问(4)
jvm中对象创建过程分为五部分 1:类加载检测 2:对象分配 3:初始化零值 4:设置对象头 5原创 2021-06-02 18:03:13 · 92 阅读 · 0 评论 -
jvm-内存空间(3)
public class Demo { public static String name = "333"; public static void main(String[] args) { Demo demo = new Demo(); demo.compute(); } public void compute() { int a=1; int b=2; int c=(a+b)...原创 2021-05-28 17:54:15 · 96 阅读 · 0 评论 -
jvm-类加载 自定义加载器和打破双亲委派(2)
1:自定义类加载器,需要继承ClassLoader import sun.misc.PerfCounter; import java.io.FileInputStream; /** * \* Created with IntelliJ IDEA. * \* User: chenhao * \* Date: 2021/5/28 * \* Time: 9:16 * \* Description: * \ */ public class MyLoader extends Cl...原创 2021-05-28 11:02:38 · 113 阅读 · 0 评论 -
jvm-类加载(1)
1:当执行一个类文件时:是通过类加载器,把类加载到内存中 2:类加载器分为: 1:引导类加载器:负责加载jre的lib目录下的核心类库,比如rt.jar 2:扩展类加载器: 负责加载jre的lib目录下的ext扩展目录下的jar包 3:应用程序加载器 :负责加载classPath下的类,主要是自己创建的那些类 ...原创 2021-05-26 22:51:09 · 77 阅读 · 0 评论 -
jvm-优化分析 工具调优
打开命令行 1:jps 查看当今进程 2:jmap -histo 7636 3:jmap -heap7636 4:jmap -dump:format=b,file=test.hprof 4018 5:jvisualvm 6:jstack 查询是否有死锁 7:jinfo -flags 2079 查看当前进程所占的 jvm配置内...原创 2020-01-08 17:54:16 · 203 阅读 · 0 评论 -
jvm- 垃圾收集器
Serial 收集器:串行收集器(点线程),stw ,如果当前用这个垃圾回收器,会把当前所有的应用线程,全部停止掉,只留一个垃圾回收的线程,GC结束后,会把所有停止的下线程全部激活。 新生代:复制算法,老年代:标记整理算法 ParNew收集器: 如果当前用这个垃圾回收器,会把当前所有的应用线程,全部停止掉,线程数和cpu的核数相同(垃圾回收的线程),GC结束后,会把所有停止的下线程全部激活。...原创 2020-01-07 18:13:56 · 142 阅读 · 0 评论 -
jvm-垃圾回收算法
标记清除算法: 复制算法:两个区域, 从第一个区域把或者的对象移动到另一个区域,之前的区域全部清除。 标记整理算法: 分代收集算法: 一:对象动态年龄 对象动态年龄判断,当对象存放在Survivor区域,一批对象的总和大于这块区域的内存大小的50%, 直接会把当前的对象最大的值直接移动到老年代,这个规则其实是希望那些可能长期存活的对象,尽早进入老年代。 二...原创 2020-01-07 15:45:58 · 151 阅读 · 0 评论 -
jvm - 逃逸分析
jvm的运行模式 有3种: 解释模式: 执行一行jvm字节码就编译一行为机器码(执行的机器码加载后会直接清除) 编译模式:现将所有的jvm的字节码编译成机器码,一次性执行机器码 混合模式:jvm 一般采用混合模式,普通的代码会采用解释模式,像一些热点数据(经常被用的数据,采用编译模式,加载到内存中) 对象逃逸分析(它是在 即时编辑的时候发生的):分析对象的动态作用域,当一个对象...原创 2020-01-07 14:00:19 · 159 阅读 · 0 评论 -
jvm 之 类加载器
加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载 · 加载 : 在硬盘上查找并通过io读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new 对象等等。 · 验证 : 校验字节码文件的正确性 · 准备 :给类的讲台变量分配内存,并赋予默认值 · 解析 :将符号引用替换...原创 2019-12-25 17:47:35 · 459 阅读 · 0 评论 -
jvm-优化数据分析
运行GC的时候,会把应用操作的线程停止掉,客户端就会有停顿,卡顿, jvm调优目的是,减少gc的次数,和停顿时间(full gc 主要) 如果当前对象,大于是s1对象的50% 该数据直接挪动到老年代 数据量分析: 如果一个给jvm虚拟机分配的内存是3个G,那么默认老年代会分2g,eden区分800m,s1 100m. s2 100m 800/16=13秒,, 当时eden区...原创 2019-12-23 14:59:25 · 220 阅读 · 0 评论 -
jvm 之堆
内存堆:分为,老年代(2/3)和年轻代(1/3),如果给堆分配600m的内存,老年代占400m,年轻代占200m, 年青代分为,eden(8/10)和suriver(2/10),eden占160m,suriver占40m suriver:分为 from(1/10)和to(1/10),from是20m,to是20m math.java 执行过程 1:java通过编译器...原创 2019-12-20 15:15:56 · 297 阅读 · 0 评论 -
jvm之栈内存,栈帧区域
javac 把java 文件编译成 .class 文件,然后class文件放在jvm上进行操作 每个线程执行会栈区域分配一个内存,当前 当前类的主线程运行时,会在栈内存分配一个区域,同时方法会在该线程的栈内存区域分配一个栈帧内存区域。 如:一个类有5个方法,一个方法是主方法, 当前类的主方法执行时 会分配一个栈内存,当前这个栈内存里...原创 2019-12-18 18:14:44 · 292 阅读 · 0 评论 -
jvm-基础
栈:不同的线程分配不同的栈区域(先进后出,) 堆:就有一个 当前栈帧:同一个线程的不同方法局部变量的作用范围原创 2019-10-03 20:29:11 · 89 阅读 · 0 评论