jvm

一:java程序启动,都是从main方法启动。main线程是普通线程。普通线程运行,jvm是不会停止的。如果有足够的权限,调用exit方法,也可以停止jvm。一台电脑可以启动多个java程序,一个java程序对应一个jvm虚拟机。

二:jvm所保存的信心全部在数据区。数据区分为五部分,1.本地方法栈(调用navicat方法存信息的栈),2.虚拟机栈(我经常说的栈),3.堆,4.方法区,5.程序计数器。直接内存不属于jvm内存(不属于数据区),它属于电脑内存,当然数据区也是属于电脑内存。每个线程都有自己的程序计数器和堆栈。一般线程共享的部分为:方法区,堆。

三:jvm执行一个方法他会创建一个栈帧,里面包含了局部变量,操作数栈,动态链接,方法出口,对象的引用。

四:介绍数据区的五个部分:

1.方法区:存储static属性,class,本地方法栈也称为永久代。这里面的数据被Gc清除的概率比较低,因为它被Gc清除的条件的比较苛刻。它需要满足3条件。a.class没有被引用创建为对象。b.class的里面方法不能被反射调用。

2:虚拟机栈:存储局部变量,对象的引用。虚拟机栈里面的数据会跟着方法的结束而销毁,所以我们一般可以在方法里面创建对象这样可以优化虚拟机的内存。

3:本地方法栈:这里一般是存储调用navicat方法而产生的数据。

4:堆:存储:成员变量。这个区域包含年轻代和老年代。在hotSpot里面年轻代包含3个区域,1.1个Eden区,2.两个Survivor区(1个:from,1个:to)。一般生成的对象会出现在Eden区,当经过一个Gc没有被清除的对象会被放到Survivor的from区。Survivor区中的from对象经常过15次还没被清除的对象会被放到老年代,当小于15次还没清除的会被放到to区,当to区里面被填满之后会全部移到老年代。

5:程序计数器:存储对象的引用的次数。

四:jvmGc算法;

1.标记清除法:标记清除法会在需要被清除的对象做一个标记,当需要被清除的对象全部被标记后就会被统一回收。缺点:效率不行。

2.复制算法:复制算法一般会将内存分为两块:假设分为:A,B两块。当A内存被用完的时候:会将A内存中还存活的对象全部复制到B内存中,然后再将A内存全部回收,然后就使用B内存。缺点:浪费内存,优点:效率高。

3.标记整理算法:标志整理算法会将存活的对象标记,然后全部往一端移动,然后将这一端界限外的内存全部回收。

4.分代收集算法:分代收集算法是将新生代和老年代全部分开收集。新生代中使用复制算法,老年代中使用标记整理算法。

在说一个例外:程序计数器算法:这个不能作为对象内存回收的方法。这个只能为被引用对象的次数。

五:程序的编译与优化

1:内联方法:将一个方法插入到另一个方法里面。

2:消除同步:在不需要同步的地方不要加同步代码。

3:标量替换:标量就是不能再被分割的变量如:一些基本类型。(聚合量:就是由一些标量组成:如数组,对象)

4:虚拟机栈里面创建对象。

六:java主内存与工作内存。

主内存:包含线程共享的变量,属于虚拟内存的一部分。

主内存和工作内存的交互流程。

java线程------------工作内存--------------save--------------主内存

load

java线程里面包含了栈里面的东西。

线程一般要读取共享变量的步骤:1.从主内存加载变量到工作内存,从工作内存读取共享变量。。

线程一般修改共享变量的步骤:1.从线程将变量刷到工作内存,再将工作内存的变量save到主内存中。

共享变量一般包含8种状态:1.lock  2.unlock  3.use   4.read  5.load  6.assign  7.write  8.store。  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值