随笔分类 - jvm
Java虚拟机
摘要:与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame①)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每
阅读全文
摘要:The stack frame has three parts: local variables, operand stack, and frame data. The sizes of the local variables and operand stack, which are measure
阅读全文
摘要:The local variables section of the Java stack frame is organized as a zero-based array of words. Instructions that use a value from the local variable
阅读全文
摘要:Like the local variables, the operand stack is organized as an array of words. But unlike the local variables, which are accessed via array indices, t
阅读全文
摘要:In addition to the local variables and operand stack, the Java stack frame includes data to support constant pool resolution, normal method return, an
阅读全文
摘要:jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意!!!:使用的jdk版本是jdk8. 类加载统计: Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded:未加载
阅读全文
摘要:目录 1、obj 必须为引用类型,不能是基本类型 2、obj 为 null 3、obj 为 class 类的实例对象 4、obj 为 class 接口的实现类 5、obj 为 class 类的直接或间接子类 6、问题 7、深究原理 8、instanceof 的实现策略 instanceof 严格来说
阅读全文
摘要:简介: 可能在很多人眼里,在java中提到锁、安全性、同步,首先想到的则是java提供的大佬(synchronized)。那么为什么在多线程下,单单靠一个关键字修饰代码块就可以实现所谓的安全性呢?可以说是对初学者而言及神奇又强大的存在。也成了大多数初学者百试不爽的良药。 但是在逐渐对java
阅读全文
摘要:1、jps(JVM Process Status Tool)--显示所有HotSpot虚拟机进程举例:jps -q (只查询虚拟机进程ID)jps -m (启动时传递main()的参数)jps -l(输出类全名,或者jar路径)jps -v(输出虚拟机进程启动参数)2、jstat(JVM S
阅读全文
摘要:理解Java内存区域与Java内存模型Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有数据区域。 方法区(Method Area): 方法区属于线程共
阅读全文
摘要:一、基本概念 Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是
阅读全文
摘要:原因:Java中存在内存泄露,就是因为对象无用却可达。 举个例子: 在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。因此,如果对象加入到Vector后,还必须从Vecto
阅读全文
摘要:、命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 使用方法 jmap -histo pid。如果使用SHELL ,可采用jmap -histo
阅读全文
摘要:本文是亲自测试的详细配置过程,不是转载而且linux下不需修改/etc/hosts文件 由于在建项目的需要,监控tomcat的内存使用,检查内存泄漏的情况。其实JDK自身已经提供了很多工具,都在JAVA_HOME/bin/目录下:jvisualvm、jconsole、jstatd、jmap等等,以下
阅读全文
摘要:1、UseParNewGC:并发串行收集器,它是工作在新生代的垃圾收集器,它只是将串行收集器多线程化,除了这个并没有太多创新之处,而且它们共用了相当多的代码。它与串行收集器一样,也是独占式收集器,在收集过程中,应用程序会全部暂停。但它却是许多运行在Server模式下的虚拟机中首选的新生代收集器,其中
阅读全文
摘要:从 Full GC 信息可知,新生代可用的内存大小约为 18M,则新生代实际分配得到的内存空间约为 20M(为什么是 20M? 请继续看下面...)。老年代分得的内存大小约为 42M,堆的可用内存的大小约为 60M。可以计算出: 18432K ( 新生代可用空间 ) + 42112K ( 老年代空间
阅读全文
摘要:对于JVM自身的物理结构,我们可以从下图鸟瞰一下: JVM内存组成结构 JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: 1)堆 所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Surviv
阅读全文