
java虚拟机
朱智文
不求大富大贵,但求一路常青
展开
-
java 虚拟机--新生代与老年代GC
java 虚拟机--新生代与老年代GC 1. Java堆中各代分布:图1:Java堆中各代分布Young:主要是用来存放新生的对象。Old:主要存放应用程序中生命周期长的内存对象。Permanent:是指内存的永久保存区域,主要存放转载 2015-11-22 21:54:03 · 467 阅读 · 0 评论 -
java path路径和classpat路径内容意思
转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/18547959 学习Java的人都要经历配置JDK环境变量这一步,安装好JDK后,我们一般会做如下配置:1.打开我的电脑--属性--高级--环境变量 2.新建环境变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C原创 2017-09-16 22:12:36 · 667 阅读 · 0 评论 -
java虚拟机管理的内存
1:程序计数器:每个线程都有一个独立的程序计数器,用来记录当前线程所执行字节码的行号指示器,如果切换线程执行其他的线程的时候,字节码解释器就是通过这个计数器的值来制定下一个处理的字节码指令,2:java虚拟栈:它是线程私有的,生命周期与线程相同,描述的 java方法的内存模型,每个方法被执行的时候都会创建一个栈帧(stack frame),用来存放局部变量,每个方法被调用到执行完的过程,都原创 2015-11-19 23:31:52 · 510 阅读 · 0 评论 -
JVM性能参数调优实践,不会执行Full GC,网站无停滞
JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整个系统变得很慢,网站停滞时间能达10秒以上,这种情况如果没隔几分钟就来一次,自己都受不了。这种停滞在测试的时候看不出来,只有网站pv达到数十万/天的时候问题就暴露出来了。 要想配置好JVM参数,需要对年轻代、年老代、救助空间和永久代有一定了解,还要了解jvm内存管理逻辑,最终还要根据自己的应用来做调整。关于JV转载 2015-11-24 09:02:53 · 1929 阅读 · 4 评论 -
线程TLAB区域的深入剖析
(1) 堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的(2) Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer),其大小由JVM根据运行的情况计算而得,在TLAB上分配对象时不需要加锁,因此JVM在给线程的对象分转载 2015-11-23 15:55:20 · 4195 阅读 · 0 评论 -
jdk 命令行工具
表 Sun JDK监控和故障处理工具名称主要功能jpsJVM Process Status Tool,显示指定系统内所有HotSpot虚拟机进程jstatJVM Statistics Minitoring Tool,用于收集HotSpot虚拟机各方面的运行数据jinfoConfiguration I转载 2015-11-23 15:44:30 · 504 阅读 · 0 评论 -
空间分配担保
在发生Minor GC 时,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,则进行一次full Gc ,如果小于,则查看HandlePromotionFailure 设置是否允许打包失败;如果允许,那只会进行MinorGC; 如果不允许,则也要改为进行一次Full GC原创 2015-11-23 09:26:48 · 1878 阅读 · 0 评论 -
对象怎样有新生代转到年老代
自动内存管理即:给对象分配内存以及分配给对象的内存现在探讨给内存分配对象的那点事首先:对象内存分配都分配到那个地方?堆上分配,但也可能经过jIT编译后被拆散为标量类型并间接地在栈上分配1:对象优先在Eden分配,当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC:+查看收集器日志:-XX:+PrintGCDetails 告诉虚拟机在发生垃圾收集行为时打印内存原创 2015-11-22 23:18:39 · 4404 阅读 · 0 评论 -
minor GC major Gc full Gc 的理解
在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章、书籍和演讲来介绍我所做的工作。在整个过程中,经常对 Minor、Major、和 Full GC 事件的使用感到困惑。这也是我写这篇博客的原因,我希望能清楚地解释这其中的一些疑惑。文章要求读者熟悉 JVM 内置的通用垃圾回收原则。堆内存划分为 Eden、Survivor 和 Tenured/Old 空间转载 2015-11-22 21:04:24 · 474 阅读 · 0 评论 -
垃圾回收机制的几种算法
第一种:标记-清除法直接在内存里标记无用的对象,然后直接回收;缺点:形成内存碎片第二种:复制算法:将内存划分为大小相等的两块,当一块的内存用完了,就讲还存活的对象复制到另外一块上面,然后将之前的那块清理掉缺点:浪费内存太多(对老年代的使用,效率低)第三种:标记-整理算法将存活的对象都向一端移动,然后直接清理掉端边界以外的内存第四种:分代收集算法:(当前商业虚拟机原创 2015-11-21 23:47:17 · 3715 阅读 · 0 评论 -
判断java虚拟机内存里的对象已死两种方式
第一种:引用计数饭:给对象添加一个引用计数器,每当有一个地方需要引用它的时候 ,计数器的值就加1,否则就减1,计数器的值为0的时候,就说明对象已死缺点:如果该对象被外一个引用指着,前一个引用永远不会再被利用了,但是她的计数器不为零,则那个对象永远不会被认为死掉,实际上,虚拟机还是会回收他们的,所以,虚拟机不是用这种方式回收他们的,第二种:根搜索算法:通过一系列的名为“gc roots原创 2015-11-21 23:35:57 · 744 阅读 · 0 评论 -
几种垃圾收集器(7中)
第一种:serial(串行)原创 2015-11-21 23:54:52 · 779 阅读 · 0 评论 -
对象访问时如何进行的
首先最简单的访问也需要设计三个内存区:java栈,java堆,方法区java栈:存放存放引用java堆:存放实例、方法区:包含能查找到此对象类型数据(如对象类型,父类,实现的借口,方法等)的地址信息不同的虚拟机实现的对象访问方式会有所不同,主流的访问方式有两种,使用句柄,和直接指针1:句柄方式访问:java堆中将会划分出一块内存来作为句柄池,,reference中存储的原创 2015-11-20 10:05:55 · 477 阅读 · 0 评论 -
jvm参数,分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同转载 2015-11-22 23:15:22 · 333 阅读 · 0 评论 -
垃圾回收条件,以及减少GC开销的措施
2.触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC: ①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。转载 2015-11-22 22:47:13 · 1162 阅读 · 0 评论 -
java虚拟机--jvm client模式与server模式的区别
JVM client模式和Server模式JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM如果不显式指定是-Server模式还是-client模式,JVM工作在Server模式可以大大提高性能,但应用的启动会比client模式慢大概10%。当该参数不指定时,虚拟机启动检测主机是否为服务原创 2015-11-22 22:04:55 · 4019 阅读 · 0 评论 -
java只安装了jre,没有安装jdk,是不能运行源代码
java只安装了jre,没有安装jdk,是不能运行源代码的。java中JDK是java development kit的简称,代表开发环境工具,包括编译源程序和运行及调试所需要的环境所需要的环境;JRE是java runtime environment的简称,代表运行环境。也就是说JDK是包含JRE的。其中如果只安装JRE不安装JDK,那么只能运行已经编译好的字节码文件即后缀名为.class的文件原创 2017-09-16 22:30:39 · 9234 阅读 · 0 评论