JVM虚拟机
文章平均质量分 83
java jvm虚拟机介绍,包括垃圾手机算法 ,分代回收、 内存划分、jvm优化、jvm工具等
keep_trying_gogo
千万不要在最能吃苦的年纪选择安逸,与君共勉。
展开
-
JVM(一)Java7内存划分
一、内存模型Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。作为Java开发人员来说,并不需要像C/C++开发人员,需要时刻注意内存的释放,而是全权交给虚拟机去管理,那么有就必要了解虚拟机的运行时内存是如何构原创 2017-12-09 14:45:12 · 848 阅读 · 0 评论 -
JVM(二)Java8内存划分
一、永久代在说java8内存模型之前先说一下永久代的概念。在Java虚拟机(JVM)内部,class文件中包括类的版本、字段、方法、接口等描述信息,还有运行时常量池,用于存放编译器生成的各种字面量和符号引用。 在过去类大多是”static”的,很少被卸载或收集,因此被称为“永久的(Permanent)”。同时,由于类class是JVM实现的一部分,并不是由应用创建的,所以又被认为是“非堆原创 2017-12-09 18:17:09 · 19948 阅读 · 0 评论 -
JVM(三)Java垃圾收集(Garbage Collection)简介
一、 垃圾收集简介顾名思义,垃圾收集(Garbage Collection)的意思就是 —— 找到垃圾并进行清理。但现有的垃圾收集实现却恰恰相反: 垃圾收集器跟踪所有正在使用的对象,并把其余部分当做垃圾。记住这一点以后, 我们再深入讲解内存自动回收的原理,探究 JVM 中垃圾收集的具体实现, 。 我们不抠细节, 先从基础开始, 介绍垃圾收集的一般特征、核心概念以及实现算法。 免责声明: 本原创 2017-12-11 17:06:40 · 931 阅读 · 0 评论 -
JVM(四)Java垃圾收集器
一、相关概念并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行。而垃圾收集程序运行在另一个CPU上。吞吐量(Throughput):就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运行用原创 2017-12-12 17:13:23 · 387 阅读 · 0 评论 -
JVM(五)jps
jps 虚拟机进程状态工具1.介绍用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。使用jps时,如果没有指定hostid,它只会显示本地环境中所有的Java进程;如果指定了hostid,它就会显示指定host原创 2017-12-13 14:30:31 · 346 阅读 · 0 评论 -
JVM(六)jstat
1.介绍Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:类的加载及卸载情况查看新生代、老生代及metaSpace的容量及使用情况查看新生代、老生代及metaSpace的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间查看新生代中Eden区及Survior区中容量及分配情况等jstat工具原创 2017-12-13 15:30:43 · 3632 阅读 · 0 评论 -
JVM(七)jmap
jmap命令(Java Memory Map)1.介绍打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)。可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用shell jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工原创 2017-12-13 16:24:56 · 452 阅读 · 0 评论 -
JVM(八)jstack
java jvm常用命令工具——jstack命令(Java Stack Trace)1.介绍Stack Trace for Java,用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息。该命令通常用于定位线程停顿原因,当出现线程停顿时,可通过stack查看每个线程的堆栈信息,进而分析停顿原因。jstack用于打印出给定的java进程ID或core file或远程调试服务的J原创 2017-12-13 16:41:31 · 291 阅读 · 0 评论 -
JVM(九)JVM优化思路分析
1.将新对象预留在年轻代原因:由于 Full GC 的成本远远高于 Minor GC,因此某些情况下需要尽可能将对象分配在年轻代。因此,在 JVM 参数调优时可以为应用程序分配一个合理的年轻代空间,以最大限度避免新对象直接进入年老代的情况发生。总结:合理设置一个年轻代的空间大小 -Xmn 调整这个参数,最好设置成堆内存的3/8,例如最大-Xmx5G,那么 -Xmn应该设置成3/8*2大约原创 2017-12-14 15:53:15 · 455 阅读 · 0 评论 -
JVM(十)Java 内存模型(Java Memory Model,JMM)
名词内存模型 :可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。不同架构的物理机器可以拥有不一样的内存模型,而 Java 虚拟机也有自己的内存模型,并且这里介绍的内存访问操作与硬件的缓存访问操作具有很高的可比性。一、并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线原创 2017-12-15 18:15:13 · 349 阅读 · 0 评论 -
JVM(十一)Java指令重排序
一、指令重排序我们先看一下下面的代码会输入 什么样的结果?public class PossibleReordering {static int x = 0, y = 0;static int a = 0, b = 0;public static void main(String[] args) throws InterruptedException { Thread原创 2017-12-19 10:17:22 · 19343 阅读 · 10 评论 -
JVM(十二)Java顺序一致性模型
一、数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量在另一个线程读同一个变量而且写和读没有通过同步来排序当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(Java指令重排序 这篇文章里的代码正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线原创 2017-12-20 10:45:36 · 734 阅读 · 0 评论