java写值日表_jvm - z_先生 - 博客园

jvm

jvm的理解 虚拟机有什么更新

什么是OOM stackOverflowError 有哪些方法分析

jvm常用的调优参数

jvm类加载器的认识

jvm的体系结构概述

Object o = new Object();

MyObject myObject = new MyObject();

System.out.println(o.getClass().getClassLoader());

System.out.println(myObject.getClass().getClassLoader());

ClassLoader |只负责文件加载 是否可以运行由 Execution Engine决定

User.class - >ClassLoader -> user Class[模板]

方法区就是类的模板

ClassLoader 粗说3个 细说4个

启动类加载器 BootStrap C++

在rt.jar 中 系统自带 Object

扩展类加载器 Extension java

路径 jre->lib->ext

sun.misc.Launcher$AppClassLoader@18b4aac2

应用程序类加载器 AppClassLoader

MyObject myObject = new MyObject();

System.out.println(myObject.getClass().getClassLoader());

System.out.println(myObject.getClass().getClassLoader().getParent());

System.out.println(myObject.getClass().getClassLoader().getParent().getParent());

sun.misc.Launcher$AppClassLoader@18b4aac2

sun.misc.Launcher$ExtClassLoader@6e0be858

null

自定义加载器

双亲委派机制

就是从上到下找 - 案例:自己定义String类

沙箱安全 保证自己写的代码不污染JAVA 代码

native

自己搞不定 需要外援

new Thread()

thread.start() start0

thread.start() //会报错

寄存器

排版值日表

执行引擎 知道下一个要执行的方法的地址

线程私有 很小 不存在GC

方法区

1:存储类的结构信息 线程共享 较少的垃圾回收

2:方法区是规范 不同虚拟机实现不一样 永久代 元空间

重点:堆 栈stack

stack管运行 堆管存储

栈 先进后出 跟随线程的生命周期 不存在GC回收

保存哪些东西 基本类型 对象的引用变量 实例的方法

队列

栈帧 == 方法 例如: main()

栈溢出 stackOverFlowError 递归方法 无终止条件

String str = "hello";

while(true) {

str = str + new Random().nextInt(88888888)+new Random().nextInt(999999999)+new Random().nextInt(999999999)+new Random().nextInt(999999999)+new Random().nextInt(999999999);

}

// Byte[] bytes = new Byte[40 * 1024 * 1024];

java.lang.OutOfMemoryError: Java heap space

栈 堆 方法区的交互关系

指针方式对中的实例数据

栈中存指针 实例对象 来自方法区的模板

堆体系结构的概述

new新生区 伊甸园区 幸存者0from 幸存者1to

注意:from 和 to GC后存在交换 谁空谁是to

​ 默认15次 静茹老年代区

old养老区 养老区满了就会 FullGC 如果还是不行 OutOfMenoryError

永久区==8换成元空间

新生区 1/3 伊甸园 8/10 from 1/10 2 1/10

老年区2/3

heap 堆

98%的对象都是临时对象 伊甸园生 伊甸园死

方法区 类信息 普通常量 静态变量 编译器 还有一个别名叫做 Non-heap 非堆

永久代 元空间 就是落地实现

插曲 String 是引用 但是存储在,存在常量池中 常量池 是方法区的一部分

堆参数调优入门

元空间用的是物理内存 默认只用内存的1/4

-Xms 1/64 初始

-Xmx 1/4 最大

现实:最大最小 一样大

-Xms1024M -Xmx1024M -XX:+PrintGCDetails

System.out.println(Runtime.getRuntime().maxMemory() / (double) 1024 / 1024);

System.out.println(Runtime.getRuntime().totalMemory() / (double) 1024 / 1024);

981.5

981.5

Heap

PSYoungGen total 305664K, used 15729K [0x00000007aab00000, 0x00000007c0000000, 0x00000007c0000000)

eden space 262144K, 6% used [0x00000007aab00000,0x00000007aba5c420,0x00000007bab00000)

from space 43520K, 0% used [0x00000007bd580000,0x00000007bd580000,0x00000007c0000000)

to space 43520K, 0% used [0x00000007bab00000,0x00000007bab00000,0x00000007bd580000)

ParOldGen total 699392K, used 0K [0x0000000780000000, 0x00000007aab00000, 0x00000007aab00000)

object space 699392K, 0% used [0x0000000780000000,0x0000000780000000,0x00000007aab00000)

Metaspace used 3106K, capacity 4496K, committed 4864K, reserved 1056768K

class space used 341K, capacity 388K, committed 512K, reserved 1048576K

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

​ GC前的内栈用 GC后新生代(新生代总大小)

[GC (Allocation Failure) [PSYoungGen: 1427K->490K(1536K)]

GC前总内存 后内存 总内存

5116K->4179K(5632K), 0.0007979 secs]

[Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC (Ergonomics

[PSYoungGen: 359K->0K(1536K)]

[ParOldGen: 3894K->1042K(4096K)] 4253K->1042K(5632K),

[Metaspace: 3209K->3209K(1056768K)], 0.0014423 secs]

[Times: user=0.00 sys=0.00, real=0.00 secs]

垃圾回收GCde理解

分代收集算法 | 次数上频繁收集YONG 次数上较少收集old 基本不动元空间 15次

先minotGC

GC算法总体概述 fullGC 要比YONGGC慢8-10被 old区比较大

sysytem.gc 手动释放

java main方法 2个线程 主线程GC线程

GC四大算法

引用计数 计数本身也有消耗 循环引用不高处理

复制算法 最常用的方法(minORgc中)

GC之后 有交换 水空谁是to

优点不存在碎片 缺点 form -》 to 一样大 消耗空间

标记清除 用在old区

可回收 标记起来 然后拔掉

1:空间节约 碎片出来 2速度慢 挑选的过程

标记压缩整理 用在old区

标记的整理一下 就不存在碎片了 缺点 就是慢工 出细活

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值