博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jvm学习
阅读量:7078 次
发布时间:2019-06-28

本文共 1104 字,大约阅读时间需要 3 分钟。

hot3.png

一.1.Java语言规范定义了什么是Java语言

    2.java语言与jvm相对独立

    3.jvm主要定义二进制class文件和jvm指令集

VM指令集

类型转化
l2i  
出栈入栈操作
aload  astore
运算
iadd  isub
流程控制
ifeq ifne
函数调用
invokevirtual invokeinterface  invokespecial  invokestatic

二.引用的四种状态:

强引用:

        1.new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用。

  如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

软引用:

  2.如果一个对象只具有软引用,则内存空间足够时,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。(备注:如果内存不足,随时有可能被回收。)

  只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。

弱引用:

  3弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期

  每次执行GC的时候,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象

虚引用:

  4.“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收

  虚引用主要用来跟踪对象被垃圾回收器回收的活动。

注:关于各种引用的详解,可以参考这篇博客:

三.

Java中的内存划分:

Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对数据进行了不同空间的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

jvm运行时的状态,具体划分为如下5个内存空间:(非常重要

  • 程序计数器:保证线程切换后能恢复到原来的执行位置
  • 虚拟机栈:(栈内存)为虚拟机执行java方法服务:方法被调用时创建栈帧-->局部变量表->局部变量、对象引用
  • 本地方法栈:为虚拟机执使用到的Native方法服务
  • 堆内存:存放所有new出来的东西
  • 方法区:存储被虚拟机加载的类信息、常量、静态常量、静态方法等。
  • 运行时常量池(方法区的一部分)

转载于:https://my.oschina.net/u/3369787/blog/869397

你可能感兴趣的文章
博为峰Java面试题-JavaSE I/O之File写入读出
查看>>
USER username (Login failed): Invalid shell: '/bin/false'
查看>>
我的友情链接
查看>>
Linux下整合Apache和Tomcat
查看>>
桌面图标右键选择发送到就会出现卡住假死
查看>>
关于旅行的文章..............搜集
查看>>
关于VLOOUP函数与index match函数
查看>>
Netscaler重置密码的方法
查看>>
MySQL内存设置—— MySQL server has gone away
查看>>
Java语言中的----运算符
查看>>
Cannot Register the virtual hard
查看>>
Linux系统的各种后门和日志工具详细介绍
查看>>
支付宝及时到账支付成功返回信息
查看>>
linux基础之bash基础
查看>>
MyEclipse 快捷键
查看>>
jQuery data- 取值
查看>>
05-k8s-fannel
查看>>
冷饭热炒-谈DOS和DDOS***
查看>>
ntop的安装与使用
查看>>
ES Java API_基于bulk实现多4S店销售数据批量上传
查看>>