
JVM
不怕慢,就怕站
一点一点改变自己!
展开
-
JVM(七)
gc垃圾回收机制 1.引用计数法(了解)容易相互引用不释放资源 2.复制算法(用在新生代) 复制算法的基本思想是将内存存在两块,每次只用其中一块,当这一块内存用完,就将活着的对象复制到另一 块上面。复制算法不会产生内存碎片。 优点:没碎片 缺点:消耗空间 伊甸园区 from区 to区 第一次:伊甸园区里的对象被扫描后,存活的复制到from区,然后清空伊甸园区 下一次:扫描伊甸园区和from区,...原创 2020-01-09 13:59:38 · 99 阅读 · 0 评论 -
JVM(六)
堆内存分为新生代和老年代,在1.7以前有永久代,1.8叫元空间,并且从堆内存中去掉,放到了物理内存中。 所以物理上只有新生代和老年代。 新生代分为伊甸园区,和幸存区1(from区)和幸存区2(to区) 大小比列 8:1:1 新生代占堆内存的1/3,老年代占2/3。 堆内存调优 在idea开发工具里配置JVM启动参数 -Xms2048m -Xmx2048m -XX:+PrintGCDet...原创 2020-01-09 12:35:05 · 102 阅读 · 0 评论 -
JVM(五)
大学的时候 程序=算法+数据结构 实际开发中 程序=框架+业务逻辑 数据结构中队列和栈必须要懂 队列(FIFO) 先进先出 例子:排队打饭 栈(FILO)(后进先出)例子:子弹弹夹 栈也叫栈内存,主管java程序的运行,是在线程创建时创建,它的生命周期是跟随线程的生命周期,线程 结束内存也就释放了,对于栈来说不存在垃圾回收问题,只要线程一结束栈就Over,生命周期和线程一致, 是线程私有的。 ...原创 2020-01-08 17:11:43 · 89 阅读 · 0 评论 -
JVM(四)
方法区 首先千万不要由这种错觉,方法区不是放方法的地方。 供各线程共享的运行时内存区域,它存储了每一个类的结构信息,例如运行时常量池、字段、和方法 数据、构造函数和普通方法的字节码内容。上面的是规范,在不同虚拟机里实现是不同的,最典型的是 永生代和元空间。jdk1.8及以后叫元空间 实例变量存在堆内存中,和方法区无关。 说白了就是类的结构化信息(类似于模板 大Class) ...原创 2020-01-08 16:15:39 · 100 阅读 · 0 评论 -
JVM(三)
程序计数器(Program Counter Register) 类似与火车之间的钩子 收集程序里的排班值日表 每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码 (用来存储指向下一条指定的地址,也即将要执行的指令代码),由执行引擎读取下一条指令, 是一个非常小的内存空间,几乎可以忽略不记。 这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过...原创 2020-01-08 15:29:39 · 85 阅读 · 0 评论 -
JVM(二)
Native method Stack(本地方法栈) java的多线程 Thread t1 =new Thread(); t1.start(); t1.start(); 报错: Exception in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.start...原创 2020-01-08 14:48:56 · 98 阅读 · 0 评论 -
JVM(一)
五块 堆 栈 方法区 本地方法栈 程序计数器 ClassLoader 类加载器(快递员) 是要把java编译的.class文件加载到JVM 它会加载文件开头有特定标识的(cafe babe) 1.启动类加载器 bootStrapClassLoader (C++开发的) 它会加载 java下jre下lib下的rt.jar 随着应用启动加载到jvm中,简单说就是 加载咱们日让开放用到的那些类,例如O...原创 2020-01-08 14:14:30 · 106 阅读 · 0 评论