JVM
鸡毛陈
学海无涯,知行合一。
展开
-
JVM学习之:内存分区
java虚拟机主要分为以下几个区:方法区:有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。该区域是被线程共享的。方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说...转载 2019-08-05 23:17:08 · 345 阅读 · 0 评论 -
JVM学习之:内存分配与回收策略
内存分配与回收策略Minor GC :从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GCMajor GC :清理老年代Full GC :清理整个堆空间—包括年轻代和老年代1、对象优先在Eden分配:在大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC,把仍存活的对象复...原创 2019-08-06 23:57:42 · 128 阅读 · 0 评论 -
JVM学习之:垃圾收集器
垃圾收集器如下图所示,收集器之间有连线,说明它们可以搭配使用新生代1、Serial收集器:工作区域:新生代单线程/多线程:单线程垃圾收集算法:复制算法Serial收集器是最基本、发展历史最悠久的收集器,是一个单线程的收集器,进行垃圾收集时,必须暂停其他所有的工作现场,直到它收集结束。2、ParNew收集器:工作区域:新生代单线程/多线程:多线程垃圾收集算法:复制算法...原创 2019-08-06 20:00:03 · 158 阅读 · 0 评论 -
JVM学习之:四种引用类型
引用与对象每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。//创建一个引用,引用可以独立存在,并不一定需要与一个对象关联String s;通过将这个叫“引用”的标识符指向某个对象,之后便可以通过这个引用来实现操作对象了...转载 2019-07-16 20:42:05 · 130 阅读 · 0 评论 -
JVM学习之:HotSpot虚拟机对象探秘
一、对象的创建对象的创建过程:虚拟机遇到一条new指令时,首先将先去检查这个指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。接着虚拟机将为新生对象分配内存。对象所需的内存大小在类加载的完成后即可完全确定,为对象分配空间的任务就是把一块确定大小的内存从Java中划分出来。指针碰撞假设Jav...转载 2019-08-06 07:28:31 · 130 阅读 · 0 评论 -
JVM学习之:性能监控工具
1、jps:进程状况工具jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。命令格式:jps [ options ] [ hostid ]jps工具主要选项:-q : 只输出LVMID,省略主类的名称-m :输出虚拟机进程启动时传递给主类main()函数的参数-l :输出主类的全名,如果进程执行的是Jar包,输出Jar路径-...原创 2019-08-08 07:46:50 · 162 阅读 · 0 评论 -
JVM学习之:初始化
通过一个例子来看下类初始化过程:Base:public class Base { static{ System.out.println("我是Base,static代码块"); } { System.out.println("我是Base,代码块"); } public Base(){ System.out.println("我是Base构造"); } public ...原创 2019-07-29 21:39:44 · 196 阅读 · 0 评论 -
JVM学习之:堆(Heap)和非堆(Non-heap)内存
堆(Heap)和非堆(Non-heap)内存:堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所有方法区、JVM内部处理或优化所需的内存...原创 2019-06-27 07:01:40 · 21599 阅读 · 0 评论 -
JVM学习之:垃圾回收算法
机制:在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。方法:标记-清除:这是垃圾收集算法中最基础的,根据名字就可以知道,它的思想就是标记哪些要被回收的对象,然后统一...转载 2019-08-05 23:30:34 · 157 阅读 · 0 评论 -
JVM学习之:类加载过程
java类加载需要经历以下几个过程:加载加载是类加载的第一个过程,在这个阶段,将完成以下三件事情:通过一个类的全限定名获取该类的二进制流。将该二进制流中的静态存储结构转化为方法区运行时数据结构。在内存中生成该类的Class对象,作为该类的数据访问入口。验证验证的目的是为了确保Class文件的字节流中的信息不会危害到虚拟机.在该阶段主要完成以下四钟验证:文件格式验...原创 2019-06-12 22:13:31 · 156 阅读 · 0 评论 -
JVM学习之:对象状态判断
判断一个对象是否存活有两种方法:1. 引用计数法所谓引用计数法就是给每一个对象设置一个引用计数器,每当有一个地方引用这个对象时,就将计数器加一,引用失效时,计数器就减一。当一个对象的引用计数器为零时,说明此对象没有被引用,也就是“死对象”,将会被垃圾回收.引用计数法有一个缺陷就是无法解决循环引用问题,也就是说当对象A引用对象B,对象B又引用者对象A,那么此时A,B对象的引用计数器都不为零,也...原创 2019-06-12 22:12:11 · 263 阅读 · 0 评论 -
JVM学习之:Java字节码(.class)文件详解
https://blog.csdn.net/weelyy/article/details/78969412原创 2019-08-11 16:51:00 · 152 阅读 · 0 评论