主要容量是按照字段的大小和有多少个字段以及字段的嵌套对象来看出来的。
假设我们用双核4G的虚拟机,我们可知分到的jvm的进程可能也就是2G多。刨除其他的堆最后分配的也就是1G多一点了。
其中新生代也就是几百兆了。 1s要是30和订单则20~30s就放满了。
我们这样的系统最好的是4核8G。
---
假设并发量大了,一个订单可能会处理几分钟的,此时每20s进行一次min gc,多次之后进入老年代,在老年代变为垃圾对象,此时会满了之后出full gc。而增加堆的内存,此时会放好几分钟才会引发min gc,减少进入到老年代的概率。
---
我们可以设置下:
---
复习下参数:
---
逃逸分析:
即时编译技术。
---
JVM调优:https://my.oschina.net/alchemystar/blog/1603817
---
下半节课56:30
---
我们可以看下这个:
1024是1KB。
---
此时allocation2放在了eden区域。allocation1放在了survivor区域,放不下,放在了老年代。
---
大对象直接进入到老年代:只在series和parellnew有效。
这个是大约是1M
1M是大对象直接进入到老年代
直接进入到老年代
---
动态年龄判断机制:
计算的方式:
---
老年代分配担保机制:
-----
如何判断对象会被回收?
1.引用计数法
2.可达性分析
---
四种引用类型:
1.强引用
2.软引用,相当在钩子程序里面判断是不是要再次回收。
---
举例:
写一个User对象:
1.不会被标记,不会使用finalize方法。
2.会被标记,调用finalize方法,打印负数。
如何自救呢?
finalize很少用的。不推荐很少及时执行的。
---
方法区的类的元信息会什么时候回收?
我们拿到类的对象:
反射生成实例。
啊
a1被清理了 则就类元信息被清除。
---