专栏首页编程软文java虚拟机jvm

java虚拟机jvm

Java内存结构和java内存模型的区别。往往很多人会搞起来。这里主要对这2种进行解释并进行操作。经实践会JVM调优和不会JVM调优差别确实很大,足足可以提升服务器一倍的性能。

java内存结构:所谓的堆,栈,方法区和本地方法栈

java内存模型:

image.png

image.png

image.png

image.png

image.png

image.png

这个堆栈分配在idea中设置的地方

image.png

新生代设置比较小的话,垃圾回收会频繁去回收,否则内存不够用,频繁回收又影响性能,不回收又会导致内存溢出,所以这个配比很关键

一般设置虚拟机内存大小都是为当前PC的内存大小,新生代和老年代的内存比例是1:2,一般老年代都会多点,因为这样可以减少垃圾回收的次数,提高性能。初始堆内存和最大堆内存设置一样。


内存溢出,有栈溢出和堆溢出,栈溢出就像下面的死循环,这个在栈当中申明的int最大只能到一定的数字

image.png

image.png

总结:jvm参数调优,主要设置堆内存,主要让gc不要去频繁去回收垃圾,减少对老年代的回收。

image.png

这里题外介绍个知识点:什么叫守护线程

gc线程就是守护线程:主线程挂了,gc线程也挂了
非守护线程就是主线程挂了,但是new Thread依然在执行。
如果要把非守护线程变成守护线程,需要使用join,例:new Thread().setDeamon();

image.png

接下来介绍几个垃圾回收机制的算法

1.引用计算法

image.png

2.标记清除算法

image.png

3.复制算法。缺点是可用内存是原来内存的一半

image.png

4.标记压缩算法

image.png

5.GC分代算法

就是根据新生代和老年代进行垃圾回收,一般新生代回收的较多,老年代回收的较少,所以应该要避免老年代的gc回收,老年代回收比较慢
垃圾回收时的停顿现象
每次gc回收的时候,其他所有线程都会停顿,如果不停顿的话,那又有可能使用对象,或者新增对象,不便于垃圾清理。


垃圾收集器:
串行回收---单线程(单核回收)
并行回收---多线程(多核回收)  企业用的比较多,性能好CMS回收---并行GC,用标记清除算法进行回收,性能是最好的,一般用并行回收就可以了
G1回收,是在jdk1.7提出来的,用的比较少

测试接口吞吐量

启动jmeter测试工具,压力测试工具,主要测试网站的吞吐量,就是每秒能被访问多少次

image.png

image.png

image.png

image.png

image.png

image.png

本文分享自微信公众号 - 编程软文(zhuyuansj),作者:zhuyuansj

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JConsole和JVisualJVM的入门

    最近公司有一个all-in-one的项目一直会出现网络异常的问题,目前通过各方面判断是由于线程的问题,引起mysql线程问题又有可能跟定时任务,长连接,另外还有...

    编程软文
  • Git神器sourceTreesetup,让你的git效率迅速提升

    编程软文
  • 将execel表格的数据导入到mysql数据库

    编程软文
  • JConsole和JVisualJVM的入门

    最近公司有一个all-in-one的项目一直会出现网络异常的问题,目前通过各方面判断是由于线程的问题,引起mysql线程问题又有可能跟定时任务,长连接,另外还有...

    编程软文
  • python3 并发编程

    用户5760343
  • 腾讯云文字识别产品国际化使用体验

    文字识别国际版本的链接:https://intl.cloud.tencent.com/product/ocr#m_overview

    算法发
  • try.mlsql.tech 上线,快来体验

    好友借了一台服务器给我用,2核4G, 虽然配置有点低,但是已经超开心了,一直希望能搭建一个能运行一些简单脚本的服务,这样用户就不需要自己搭建了,但一直碍于现在服...

    用户2936994
  • python asyncio aiohttp

    用户5760343
  • [ASP.NET Core 3.1] 发布Linux+[Supervisord]监控服务运行

    Centos7.x 安装 Supervisord 使用supervisor管理进程

    小狐狸
  • 笔记10 | 学习整理静态static 和 终态final

    项勇

扫码关注云+社区

领取腾讯云代金券