随笔分类 -  【深入理解java虚拟机】

摘要:Java内存模型 概念:java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。 线程之间的通信 两种通信机制: 共享内存 写读内存中公共状态来通信,通过共享对象进行通信。 消息传递 明确的发送消息来进行通信,java中就是wait() notify(). java内 阅读全文
posted @ 2020-10-19 16:40 西北野狼 编辑
摘要:加载器从最底层开始往上的顺序 BootStrap ClassLoader:rt.jar,C++实现,虚拟机的一部分 Extention ClassLoader: 加载扩展的jar包 App ClassLoader:指定的classpath下面的jar包 Custom ClassLoader:自定义的 阅读全文
posted @ 2020-06-02 10:47 西北野狼 编辑
摘要:类加载时机 加载 验证 准备 解析 初始化 使用 卸载 加载 通过全类名来获取定义此类的二进制流(全限定名,用/替换.) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据。 在内存中生成一个代表这个类的Class对象,作为方法区这个类的各种数据的访问入口。 加载二进制流的手段: 从zip包中 阅读全文
posted @ 2020-06-01 14:00 西北野狼 编辑
摘要:主要优化堆,堆内存分为一个伊甸园区(Eden Space)两个幸存区(Survivor Space)。 伊甸园区为new出来的对象; 幸存区为伊甸园区满gc minorGC后进入幸存区; 幸存区 Full gc 后进入养老区 Fenure Generation Space; 最后进入永久存储区 Pe 阅读全文
posted @ 2018-05-07 00:34 西北野狼 编辑
摘要:java堆是用来存储对象实例的;只要不断创建对象,GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,当对象数量达到最大堆的容量限制的时候就会产生内存溢出异常。异常对战信息为OutOfMemoryError,进一步提示:java heap space。 如何解决?内存映射工具,ecl 阅读全文
posted @ 2017-02-12 19:04 西北野狼 编辑
摘要:运行时数据划分为两部分: 线程私有:虚拟机栈、本地方法栈、程序计数器。 线程共享:方法区,堆。 运行时数据区域: 1 程序计数器: 当前线程所执行的字节码的行号指示器。每条线程都需要有一个独立的程序计数器,各条线程之间互不影响,独立存储,我们称之为线程似有的内存。 如果线程执行的事java方法,计数 阅读全文
posted @ 2017-02-12 15:32 西北野狼 编辑
摘要:垃圾回收机制:释放那些不再持有引用的对象的内存。 如何判断对象是否需要回收? 引用计数:对象,内存,磁盘空间等被引用次数保存起来,次数为0时将其进行释放。 对象引用遍历:对象应用遍历从一组对象开始,沿着对象图的每条链接,递归课到达对象,如果不能从根对象到达,则将它进行回收。 垃圾回收方法? 1. 标 阅读全文
posted @ 2017-01-26 21:14 西北野狼 编辑