您现在的位置:首页 > 教案格式 > 正文

java 数组转字符串 java虚拟机学习(六)

2018-01-23 01:02 网络整理 教案网

set转为string数组_java中字符串转为数组_java 数组转字符串

内存分配。对象的内存分配一般分配在堆内存中,也可能经过JIT 编译后被拆散为标量类型间接地在栈上分配。对象主要分配在新生代的Eden 区上,如果启动了本地线程分配缓存,将按线程优先在TLAB (本地线程分配缓存)上分配。少数情况下也可能会直接分配在老年代中,分配的规则不是固定的,与使用哪一种垃圾收集器组合,还与虚拟机中内存相关参数设置有关。

多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。

新生代GC (MinorGC):新生代的垃圾收集动作, Java 对象大多生命短,所以MinorGC 非常频繁,速度也比较快。

老年代GC ( MajorGC或者FullGC):老年代的垃圾收集动作,出现了MajorGC ,经常会伴随至少一次的MinorGC (非绝对的,在ParallelScavenge 收集器的收集策略中就有直接进行MajorGC的策略选择过程)。MajorGC的速度一很会比MinorGC慢10倍以上。

大对象就是需要大量连续内存空间的Java对象,最典型的大对象就是那种很长字符串及大数组。-XX : PretenureSizeThreshold 参数可以设置值大对象直接在老年代中分配。避免垃圾回收时在Eden 区及两个Survivor 区之间发生大量的内存拷贝。

虚拟机分代收集的方法管理内存,在内存回收时就必须能识别哪些对象应当放在新生代,哪些对象应放在老年代中。虚拟机给每个对象定义了一个对象年龄( Age )计数器。如果对象在Eden 出生并经过第一次MinorGC后仍然存话,并且能被Survivor容纳的话,将被移动到Survivor 空间中,并将对象年龄设为1。对象在Survivor 区中每熬过一次Minor GC,年龄就增加1岁,当年龄增加到一定程度(默认为15 岁〉肘,就会被晋升到老年代中。对象晋升老年代的年龄阈值,可以通过参数-XX:MaxTenuringTbreshold 来设置。

为了能更好地适应不同程序的内存状况,虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold 才能晋升到老年代,如果在Survivor 空间中相同年龄所有对象大小的总和大于Survivor 空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold 中要求的年龄。

在发生MinorGC 肘,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,则改为直接进行一次FullGC 。java 数组转字符串如果小于,则查看HandlePromotionFailure 设置是否允许担保失败:如果允许,那只会进行MinorGC :如果不允许,则改为进行一次FullGC。

HotSpot虚拟机提供了许多虚拟机运行时调试工具,方便开发人员在应用运行时对虚拟机和应用性能进行监控和优化

显示指定系统内所有的HotSpot 虚拟机进程。并显示虚拟机执行主类(Main Class, main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID ( LVMID, Local Virtual Machine Identifier) 。

jps 命令格式:jps [ options ] [ hostid ]

主要参数选项:

-q:只输出LVMID ,省略主类的名称

-m:输出虚拟机进程启动时传递给主类main()函数的参数

set转为string数组_java中字符串转为数组_java 数组转字符串

-l:输出主类的全各,如果选程执行的是Jar 包,输出Jar 始径

-v:输出虚拟机进程启动时JVM 参数