JVM
lyzx_in_csdn
努力只为更强大的存在
展开
-
《深入理解java虚拟机》2.4之OutOfMemory异常实战
<strong>1、java堆内存溢出异常</strong>package com.lyzx.jvm;import java.util.ArrayList;import java.util.List;/** * 测试java堆内存溢出异常 * 使用的参数是 * -Xms10M java堆内存的最小值 * -Xmx10M java堆内存的最大值...原创 2018-04-21 21:57:46 · 170 阅读 · 0 评论 -
《深入理解java虚拟机》之java工具-jstat
原文章链接:https://www.cnblogs.com/kongzhongqijing/articles/3625574.html jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题...转载 2018-10-26 17:40:54 · 188 阅读 · 0 评论 -
《深入理解Java虚拟机》之java工具-jps
原文链接 :Java命令学习系列(一)——Jps最近准备研究一下虚拟机,做以下笔记,原文链接在上面,如要阅读请点击上面的链接,给原文作者更多支持 jps(java process status) -l 显示全包名 -v 显示虚拟机参数 -m 运行时参入主类的参数 Java命令学习系列(一)——Jpsjps位于jdk的bin目录下,其作用是显示当前系统的java进...转载 2018-10-26 16:35:23 · 214 阅读 · 0 评论 -
《深入理解Java虚拟机》之对象的创建-内存布局-访问定位
JSON Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 创建Java对象 从虚拟机角度来讲,创建一个对象有一下几步骤 1、...原创 2017-10-13 15:19:22 · 178 阅读 · 0 评论 -
《深入理解java虚拟机》之Java类加载机制
JSON Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Java类加载的全过程 1、加载 >>将cla...原创 2017-10-13 10:08:35 · 289 阅读 · 0 评论 -
《深入理解java虚拟机》之虚拟机优化案例
1、高性能硬件上的程序部署策略 服务运行一段时间后发现,网站会出现长时间的卡顿, 分析原因:一次Full GC要用14s的时间,网站会加载大文件到内存中,这些大对象直接进入老年代 没有在Minor GC中清理掉,即使有12G的内存,依然会被很快占用完 如果使用64位JDK 使用...原创 2018-10-28 11:59:24 · 184 阅读 · 0 评论 -
《深入理解java虚拟机》3.3之垃圾回收算法
3.3 jvm的垃圾回收算法大致分为3种 3.3.1标记清除算法基本过程:分为标记和清除两部分,首先通过一次标记,标记完成后统一进行清除操作。优点:算法足够简单,很容易实现缺点:标记和清除的效率都不高, 会产生大量的碎片如下图所示 -------------华丽的分割线---------------- 3.3.2复制算法...原创 2018-04-29 13:38:06 · 110 阅读 · 0 评论 -
《深入理解java虚拟机》3.5之垃圾收集器
3.5.1、串行收集器(Serial) 上古时期的可爱的单线程垃圾收集器,使用一个线程或者一个cpu(核心)去回收垃圾,在收集垃圾时必须使整个虚拟机都停下来(stop the world) 优点:简单高效(对于限定cpu的机器来说),对于client模式虚拟机的新生代来说是一个不错的选择缺点:随着机器性能的提升,效率提升不明显 3.5.2、ParNew收集器p...原创 2018-05-31 01:05:48 · 271 阅读 · 0 评论 -
《深入理解java虚拟机》之简单聊聊自定义类加载器
首先说我们写的java代码(xxx.java文件)如何被jvm使用? 通过javac 编译为可被虚拟机识别的机器码(二进制),然后通过类加载器将二进制文件放入内存,这个过程称为内的加载过程,而加载类(xxx.java文件)的类被称作类加载器,实际也是有java代码写的一个类(除了引导类加载器,该加载器有C++编写)1、类加载器结构图如下(该图来自于网络 https://blog.csdn...原创 2018-05-13 12:57:37 · 206 阅读 · 0 评论 -
《深入理解java虚拟机》之对象的内存分配续
首先强烈感谢我的两位同学,广州微笑和杭州青果。这篇博客灵感来自于他们。上一篇博客说了,Java对象的内存分配中在堆空间中分配内存的几条普遍规则,当然也说了,在分配到堆内存之前也进行了其它方面的尝试,那今天就说一说jvm这些的尝试首先一张图看jvm内存分配的选择从上图可知,jvm首先尝试在栈上分配内存,如果栈上分配内存失败了,再尝试在TLAB上尝试分配如果分配失败了就判断这个对象...原创 2018-05-05 12:05:10 · 239 阅读 · 0 评论 -
《深入理解java虚拟机》3.6内存分配(堆空间的内存分配)
java内存管理其实主要做了2件事,一个是内存分配一个是内存回收下面说说内存分配的事,内存分配大致可以理解为在新建一个对象时把这个对象放入虚拟机的堆内存(大多数情况下)注意:其实在对象分配到堆内存之前还有好几个步骤在栈上分配内存,后续会加上这部分内容在分配堆内存之前的尝试 本文主要聊一聊在堆上分配内存的几条普遍的规则: 3.6.1、对象优先分配到eden ...原创 2018-04-24 23:42:34 · 257 阅读 · 0 评论 -
《深入理解java虚拟机》2.3之虚拟机对象探秘
1、对象的创建 当jvm遇到new指令时,先检查这个指令的参数能否定位到常量池中的一个类的符号引用,如果可以定位则 1.1、为对象分配内存,一个类所占的内存大小在类加载完毕后就已经确定了.分配内存有2中方式 a、如果内存时规整的,即用过的在一边,没有用过的在一边,那么采用指针碰撞(Bumpthe Pointer)的方式管 理,即通过一个指针为界限,指...原创 2018-04-20 23:47:50 · 199 阅读 · 0 评论 -
《深入理解java虚拟机》2.2之虚拟机的内存布局
虚拟机的内存布局如下 其中各部分的作用如下1、程序计数器: 指向当前线程正在执行的字节码的地址,如果一个线程正在执行一个方法,那么当前线程的 程序计数器就指向正在执行的字节码的地址,线程的上下文切换和它有很大的关系,线程私有的, 每个线程有单独的一份,线程之间互不干扰 2、虚拟机栈: 线程私有,和线程的生命...原创 2018-04-19 23:29:02 · 215 阅读 · 0 评论 -
《深入理解java虚拟机》之通过Jconsole检测线程死锁
XML Code * 写一个死锁示例 * 线程死锁是由于线程之间相互等待彼此释放自己锁需要的锁 * 然后相互等待导致程序僵死 * 例如A线程需要获取o1,o2两个锁,线程B需要o2,o1两个锁 * 当线程A拥有o1的锁,则它要执行完就需要获取o2锁,此时o2锁的拥有者是B * 线程A等待线程B释放o2锁,同时线程B也在等待线程A释放o1锁,所以两个线程相互等待对方释放自己需要的锁...原创 2017-11-27 16:03:04 · 362 阅读 · 0 评论