Jvm知识-笔记七

JVM 个人笔记

1.基本概念
java虚拟机就是一一台虚拟的机器,执行虚拟计算的软件。

2.Java虚拟机的基本结构

1.类加载系统 : 负责加载Class信息的功能

2.方法区: 存放类的信息,常量信息,还有字符串字面量和数字常量


3.Java堆: 在Java虚拟机启动的时候建立Java堆,几乎所有的对象实例都存放在Java堆中,堆空间所有线程共享。堆不存放基本数据类型和对象引用,只存放对象本身信息


4. 直接内存:  存放一些数据。

5. Java栈 :存放局部变量,就方法里面的变量,方法参数返回值。每一个线程都有一个私有栈,他们是不共享的。所有在多线程操作同一个局部变量时是不受影响的。

6. 本地方法栈: 和java栈非常类似,不同的是本地方法栈用于本地调用。通常是安卓开发的时候调用C语言库。

7. 垃圾回收系统。 作用就是自己进行垃圾清理的机制。

8. PC寄存器。 每个线程私有的空间。相当于一个计数器。

9. 执行引擎 : 负责执行虚拟机的字节码,一般编译成机器码后执行。


重要知识点总结:
栈 :存放局部变量。    堆: 存放对象,就是所有new出来的东西
方法区: 被虚拟机加载的类信息,常量,静态变量


详解堆,栈,方法区

1.堆: 几乎所有对象都放在其中,并且Java堆通过垃圾回收器完全是自动化清理,不需要释放。

java堆分为新生代和老年代。 新生代分存放新生成的对象,老年代存放老年就是时间比较久的对象

2.Java栈:一块线程私有空间,又三部分组成:局部变量表,操作数据栈,帧数据区 


3.方法区: 和堆一样,方法区是一块所有线程共享的内存区域保存系统的类信息。比如类的字段,方法,常量。 可能出现内存溢出的原因:方法区的大小决定系统可以保存多少个类,如果系统定义太多的类,导致方法区溢出,虚拟机则同样会抛出内存溢出的错误。


内存溢出的解决办法:

   1.堆内存溢出:java程序运行过程中,如果堆内存空间不足,则会抛出内存溢出错误(Out Of MemoryOOm)
Java.lang.OutOfMemoryError的解决方案。
防止: 不要太多的实例对象。 把堆内存改大一点
  如果是Web项目中遇到了堆内存溢出,则修改tomcat堆内存配置。

   2.栈内存溢出: Java虚拟机提供参数-Xss来指定线程最大栈空间,这个参数也直接决定了函数可调用的最大深度。主要表现在递归上。
防止:共享一个函数的时候不要太多的递归

内存泄漏 和 内存溢出的区别:
内存泄漏是指无用对象(不在使用的对象)持续占有内存或无用对象的内存得不到释放,从而造成内存空间的浪费称为内存泄漏。就是垃圾回收器没有来得及回收的时候内存泄漏。
解决情况一般重启一下就可以了。

内存溢出是指超出了配置内存大小。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值