JVM和性能优化

JVM内存的划分有五片:

  1. 寄存器;
  2. 本地方法区;
  3. 方法区(元空间);
  4. 栈内存;
  5. 堆内存。

https://blog.csdn.net/lingbo229/article/details/82586822

堆与栈的区别很明显

​ 1.栈内存存储的是局部变量而堆内存存储的是实体;

​ 2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

​ 3.栈内 存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

  浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝

深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝

 

堆和普通树的区别

https://www.jianshu.com/p/6b526aa481b1

 

 

JAVA 对象创建的过程

分5步

1.类加载检查(对 new关键字里的参数进行检查匹配该类有没有被创建引用初始化过,有就调用没有就重新创建)

2.分配内存,在堆上分配一块内存,内存大小在第一步已经确定,分配内存有两种一种是指针碰撞法 还有一种空闲列表法,但是两种都存在并发问题,所以使用本地线程分配缓存(TLAB)来解决

3,。初始化内存空间

4.设置对象头,

对象头包括两部分信息:

  1. 第一部分用于存放对象运行时自身的数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分数据的长度在32位和64位的虚拟机中分别是32bit和64bit,官方称为“Mark Word”。对象需要存储的数据很明显会超过32bit或64bit,所以Mark Word被设计为一个非固定的数据结构以便在绩效的空间内存储尽量多的数据信息,他会根据对象的状态复用自己的存储空间。
  2. 第二部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪一个类的实例。

5.调用对象init方法

JVM堆中有年轻代、年老代、持久代,年轻代分为Eden、survior,survior有两个,持久代也是永久代,其中包含静态文件、对象的类信息等 JDK1.8以后移除了持久代,改为元空间占用外部内存。

java中会存在内存泄漏吗

会的,首先是长生命周期持有对短生命周期的引用,还有放在静态集合类如Hashmap 、HashSet中 当初穿进去的key的哈希值与修改过的哈希值不一样,导致找不到该对象的结果,就会删除对象 保留结果 导致内存泄漏

https://www.cnblogs.com/camile123/p/8472349.html

类加载过程

加载(将.class文件通过二进制加载到内存中,在堆中加载一个Java.lang。.class),

连接(将.class文件验证是否符合JVM规范,分为验证(验证 元数据、字节码、符号引用验证)、准备(为静态变量分配空间,并初始化默认值),解析(将符号引用转为直接引用))

JAVA加载类的原理机制

java中所有类都得加载到JVM中才能运行,首先将.class文件加载到内存中,类加载器也是一个类,通过classloader和他的子类将其加入到内存中,而且加载是具有动态性的,将基类先加载到JVM中其他类只有用到的时候开始加载,加载分为三个加载器 且关系是父类到子类的过程,不采用继承采用组合的方式,为根加载器、扩展加载器、系统加载器和用户自定义类加载器。协调工作才用了委托模型机制,委托模型机制的工作原理很简单:当类加载器需要加载类的时候,先请示其Parent(即上一层加载器)在其搜索路径载入,如果找不到,才在自己的搜索路径搜索该类。这样的顺序其实就是加载器层次上自顶而下的搜索,因为加载器必须保证基础类的加载。之所以是这种机制,还有一个安全上的考虑:如果某人将一个恶意的基础类加载到jvm,委托模型机制会搜索其父类加载器,显然是不可能找到的,自然就不会将该类加载进来。

初始化

 

加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。

https://blog.csdn.net/m0_38075425/article/details/81627349

Tomcat类加载器 Webapp 加载器略有不同,它首先会在自己的资源库中搜索,而不是向上委托,打破了标准的委托机制,但是底层还是遵循双亲委派机制。

性能的测试指标我理解分为四点

1.运行速度

2.内存分配(是否占用过大内存、是否会造成内存泄漏)

3.启动时间(程序启动到正常处理业务的时间)

4.负载承受能力(当系统压力上升,处理业务的速度和响应时间是否会下降)

 

一致性Hash算法!

原理通过构造hash环,用户请求根据用户id 的hash计算出值然后到 hash(服务器)的节点上请求,如果服务器挂了会直接瞬时针向下一个服务器上请求,如果增加服务器就是新增的服务器顺时针最近的服务器的一部分请求会被新增的服务器所替代。

https://www.jianshu.com/p/e968c081f563

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值