JAVA进阶--深入理解JVM
文章平均质量分 54
自然鸟神
我热爱编程,搜索引擎
展开
-
JVM:GC如何慧眼识金断垃圾
Java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。那么GC具体通过什么手段来判断一个对象已经”死去”的?1.引用计数算法(已被淘汰的算法)给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。目前主流的转载 2016-08-24 09:33:49 · 391 阅读 · 0 评论 -
Java远程调试各参数说明
首先,JAVA自身支持调试功能,并提供了一个简单的调试工具--JDB,类似于功能强大的GDB,JDB也是一个字符界面的调试环境,并支持设置断点,支持线程线级的调试。 JAVA的调试方法如下: -Xdebug -Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,la...转载 2018-09-08 17:03:49 · 2810 阅读 · 0 评论 -
JVM历险记第四章:终极杀器
大法师的咒语竟然是在特定的环境中才能实现。这点我是万万没有想到的。具体说hotspot环境使用的最多。使用的还是三种大杀器串行搜集器的实现:serial(用于新生代,采用复制算法)、serial old(用于年老代,采用标记/整理算法)并行搜集器的实现:ParNew(用于新生代,采用复制算法)、Parallel Scavenge(用于新生代,采用复制算法)、Parallel old(用于年老代,采...原创 2018-03-26 20:00:18 · 234 阅读 · 0 评论 -
JVM历险记第三章:遇到了回收大法师
从五大部落到遇到根的迷,在内存里面已经有些日子了。前两天遇到了各种法师,专门回收死亡的对象。。。只看法师口中默念¥¥$$7&&.就看一道金光从根出发遍及各个相连的对象。。。。然后使出所谓的三板斧:对于不同部分的堆数据使用不同的技法第一招叫做标记清除大法:这招使出之后运行着的线程都暂停了,开始迅速标记存活的对象,然后瞬间粉碎和根不能到达的地方的对象,不过这一招威力不太行第二招叫做复制...原创 2018-03-26 19:38:07 · 198 阅读 · 0 评论 -
JVM历险记第二章:认识了根
都说数据对象朝生夕灭,但是有门路好像就能长生不死!!!我就偶遇到了这个救命的稻草,,不不。。是根!还记得刚来内存的时候遇到五大部落。。。其实今天看起来其中另有玄机啊!在路上遇到第一个可以被当做根的是虚拟机栈部落中的引用对象,你只要不被引用对象所抛弃的话,就不会被垃圾粉碎机粉碎。。。话说虚拟机栈中被赋予这种权利的还有本地方法栈部落中的JNI引用对象。。龙珠都有七个怎么能让这两个部落独大呢!最后介绍压...原创 2018-03-21 16:16:47 · 257 阅读 · 0 评论 -
JVM历险记第一章:初到内存
我是一个初次来到内存的数据,我被java程序输送到此。来到内存后我很迷茫,因为不知道应该到哪去,看起来好像有五个部落。PC寄存器部落:它说它只接受它亲戚线程的数据,没有私下关系根本不让进。人家的名号大:“程序计数寄存器”,每个线程好像都有一个PC寄存器部落,突然好羡慕人家。毕竟可以划到属于自己的地方,每个PC寄存器好像门头的地址在不停的变换着,据听说它这个数字就是它正在运行的方法地址。有时候突然门...原创 2018-03-16 17:50:59 · 263 阅读 · 0 评论 -
JVM内存组成及分配
java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员...转载 2018-01-15 22:51:38 · 200 阅读 · 0 评论 -
JVM调优实战讨论:YGC调优
事情过往交代: YongGC需要降到10ms,目前是20ms而且不增加总的YGC时间,并且不会增加FULLGC的次数。。讨论开始:A:大神们,求助: 正在做YGC优化,遇到了些问题。 YGC的耗时主要是在复制阶段吧?由复制的对象大小决定?如果想知道每次被复制的对象是哪些,包括那些age 为1的对象,怎么看?B:s 区互相挪也耗时吧A:目标是把YGC单次时间降下去,调原创 2017-12-21 15:48:24 · 7174 阅读 · 0 评论 -
JVM日志打印学习笔记
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-原创 2017-10-12 17:08:04 · 2076 阅读 · 1 评论 -
Java对象设计成OOP-Klass
HotSpot源码中为什么要把Java对象设计成OOP-Klass这种结构?仅仅是为了避免每个Java对象都生成一个虚函数表吗?http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/87ee5ee27509/src/share/vm/oops/klass.hppvtbl主要是实现多态这个特性的,如果一个类的所有的实例都是原创 2017-07-14 18:38:53 · 1294 阅读 · 0 评论 -
新创建对象直接触发fullGC问题
今天在群里遇到个问题,这段程序,老年代占用会不断增大、直到fullgcArrayList扩容默认申请的对象在young分区,而其包含的对象晋升到老年代了,所以无论是young gc还是cms gc都不能一次完全把垃圾对象回收掉,只能full gc才能一次性全部gc掉隔代引用的问题虚拟机提供了一个-XX:PretenureSizeThreshold参数,令大于这个设置值的对象直接在老年代原创 2017-07-13 13:51:37 · 740 阅读 · 0 评论 -
降低Java垃圾回收开销的5条建议
保持GC低开销的窍门有哪些?随着一再拖延而即将发布的 Java9,G1(“Garbage First”)垃圾回收器将被成为 HotSpot 虚拟机默认的垃圾回收器。从 serial 垃圾回收器到CMS 收集器, JVM 见证了许多 GC 实现,而 G1 将成为其下一代垃圾回收器。随着垃圾收集器的发展,每一代 GC 与其上一代相比,都带来了巨大的进步和改善。parallel GC 与 ser转载 2017-02-04 17:40:29 · 317 阅读 · 0 评论 -
转:三个实例演示 Java Thread Dump 日志分析
jstack Dump 日志文件中的线程状态dump 文件里,值得关注的线程状态有:死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition(重点关注) 等待获取监视器,Waiting on monitor entry(重点关注) 暂停,Suspended 对象等待中,Object.wait() 或 TIMED_W...转载 2019-01-20 14:13:22 · 252 阅读 · 0 评论