java虚拟机调——笔记

马士兵java虚拟机调优笔记

主讲内容:

JAVA内存结构

 

GC确定垃圾

1、引用计数

     会有循环引用的问题-多个NULL对象互相引用

2、正向可达

     从roots对象计算可以到达的对象

拓展:

     强引用(StrongReference):这是Java程序中最常用的引用方式。程序创建一个对象,并把这个对象赋给一个引用变量,程序通过该引用变量来操作实际的对象。当一个或一个以上的引用变量被引用时,它处于可达状态,不可能被系统垃圾回收机制回收。

     软引用(SoftReference):软引用需要通过SoftReference类来实现,当一个对象只有软引用时,它有可能被垃圾回收机制回收。对于只有软引用的对象而言,当系统内存空间足够时,它不会被系统回收。当系统内存空间不足时,系统可能回收它。软引用通常用于对内存敏感的程序中。

     弱引用(WeakReference):弱引用通过WeakReference类实现,弱引用和软引用很像,当弱引用的引用级别更低。对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内存。当然,并不是说当一个对象只有弱引用时,它就会立即被回收——正如那些失去引用的对象一样,必须等到系统垃圾回收机制运行时才会被回收。

     虚引用(PhantomReference):虚引用通过PhantomReference类实现,虚引用完全类似于没有引用。虚引用对对象本身没有太大影响,对象甚至感觉不到虚引用的存在。如果一个对象只有虚引用时,那么它和没有引用的效果大致相同。虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,虚引用必须和引用队列(ReferenceQueue)联合使用。

 

垃圾回收算法

   Mark-Sweep 标记清除

   Copying 复制

   Mark-Compact 标记压缩

 

JVM采用分代算法

     new

          存活对象少

          使用copying,占用的内存空间也不大,效率也高

     old

          垃圾少

          一般使用Mark-Compact

JVM中的垃圾收集器

     Serial Collector

          -XX:+UseSerialGC

          单线程

     Parallel Collector/Throughout Collector

          -XX:UseParallelGC

          并发量大,不过每次垃圾收集,JVM

     The Most Concurrent Collectors

          CMS Collector

                    停顿时间短

          G1

                    不仅停顿短,同时并发大

 

JVM参数

     -     标准参数,所有JVM都应该支持

     -X    非标准参数,每个JVM实现都不同

     -XX   不稳定参数,下一个版本可能会取消

 

Java对象的分配

     栈上分配

          线程私有小对象

          无逃逸

          支持标量替换

          无序调整

     线程本地分配TLAB(Thread Local Allocation Buffer)

          占用eden,默认1%

          多线程的时候不用竞争eden就可以申请空间,提高效率

          小对象

          无需调整

     老年代

          大对象

     eden

 

堆内存参数调整

     用VisualVM观察虚拟机堆信息(在jdk/bin/jvisualvm.exe)-查看栈信息打印的信息

 

调优Tomcat并使用JMeter进行评测

     到Tomcat\bin\catalina.bat start

 

参考资料:

 

猜你喜欢

转载自blog.csdn.net/m0_37461645/article/details/81511253