随笔分类 -  深入理解Java虚拟机

摘要:①jps:虚拟机进程状况工具 功能:列出正在运行的虚拟机进程,并显示1、虚拟机执行主类名称以及2、这些进程的本地虚拟机唯一ID(LVMID)。 使用频率最高的JDK命令行工具,其他的JDK工具大多需要输入它查询到的LVMID来确定监控的是哪一个虚拟机进程。 对于本地虚拟机进程来说,LVMID与操作系 阅读全文
posted @ 2017-07-23 17:26 竹马今安在 阅读(348) 评论(0) 推荐(0)
摘要:如何去给对象分配内存?大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配) ①对象优先在Eden分配 大多数条件下,对象在Eden中分配,当Eden内存不够的时候,虚拟机将发起一次Minor GC。 java堆占10MB,Eden占8MB,创建前三个对象在Eden中 阅读全文
posted @ 2017-07-23 10:52 竹马今安在 阅读(154) 评论(0) 推荐(0)
摘要:新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也非常快 老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC ,经常会伴随至少一次的Minor GC(但并非绝对 阅读全文
posted @ 2017-07-23 09:23 竹马今安在 阅读(244) 评论(0) 推荐(0)
摘要:JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形 阅读全文
posted @ 2017-07-22 19:38 竹马今安在 阅读(243) 评论(0) 推荐(0)
摘要:概述 JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而 阅读全文
posted @ 2017-07-22 16:38 竹马今安在 阅读(20749) 评论(2) 推荐(4)
摘要:(A)、图中展示了7种不同分代的收集器: Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1; (B)、而它们所处区域,则表明其是属于新生代收集器还是老年代收集器: 新生代收集器:Serial、ParNew、Parallel 阅读全文
posted @ 2017-07-22 16:32 竹马今安在 阅读(1187) 评论(0) 推荐(0)
摘要:①枚举根节点 可达性分析中,查找引用链这个操作,可作为GC Roots的节点主要在全局性的引用中(例如常量和静态属性)和执行上下文(例如栈帧中的本地变量表)中,现在很多应用本地方法区就有数百找,要一个个查引用的话,太费时间,另外,可达性分析对时间的敏感性还体现在GC停顿上,因为这项分析工作必须在一个 阅读全文
posted @ 2017-07-21 16:26 竹马今安在 阅读(176) 评论(0) 推荐(0)
摘要:1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话, 阅读全文
posted @ 2017-07-21 16:19 竹马今安在 阅读(171) 评论(0) 推荐(0)
摘要:① 标记-清除算法 最基础的收集算法分为“标记”和“清除”两个阶段;首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。也就是在判断对象生存还是死亡用到的算法 不足:一是效率不高,而是标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后再程序运行过程中需要分配较大对象时, 阅读全文
posted @ 2017-07-21 16:13 竹马今安在 阅读(114) 评论(0) 推荐(0)
摘要:java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域的生命周期与线程相同;栈帧中随着方法的进入和退出有条不紊的执行着出栈和入栈操作,每一个栈帧中分配多少内存在类结构确定下来时就一致的,因此这几个的内存分配和回收都具备确定性,在这几个区域就不需要过多考虑回收的问题,因为方法结 阅读全文
posted @ 2017-07-20 17:48 竹马今安在 阅读(128) 评论(0) 推荐(0)
摘要:以常用的HotSpot和常用的Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程 1.对象的创建 ①虚拟机遇到一条new指令后,首先将去检查这个指令的参数是否能够在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已经被加载、解析和初始化过,如果没有, 阅读全文
posted @ 2017-07-19 15:31 竹马今安在 阅读(347) 评论(0) 推荐(0)
摘要:Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”。 C、C++程序开发在内存管理区域,既拥有每一个对象的“所有权”,又担负着每一个对象声明开始到终结的责任,而Java在虚拟机自动管理机智的帮助下,不需要为每一个new操作去写配对的delete/free操作,不容易发生内存泄漏和内存 阅读全文
posted @ 2017-07-19 09:54 竹马今安在 阅读(274) 评论(0) 推荐(0)
摘要:Java 技术体系 1.java技术语言 2.各种硬件平台上的java虚拟机 3.Class文件格式 4.Java API类库 5.来自商业机构和开源社区的第三方Java类库 我们把Java程序设计语言、Java虚拟机、Java API类库统称为JDK,JDK是用于支持Java开发的最小环境 可以把 阅读全文
posted @ 2017-07-19 08:53 竹马今安在 阅读(177) 评论(0) 推荐(0)