范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java面试问题(十二)JVM模型与调优

  JVM结构和内存管理 说一下 JVM 的主要组成部分及其作用?
  JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。Execution engine(执行引擎):执行classes中的指令。Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。Runtime data area(运行时数据区域):这就是我们常说的JVM的内存。
  作用(执行流程):
  首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。说一下 JVM 运行时数据区
  Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有些区域随着虚拟机进程的启动而存在,有些区域则是依赖线程的启动和结束而建立和销毁。Java 虚拟机所管理的内存被划分为如下几个区域:
  不同虚拟机的运行时数据区可能略微有所不同,但都会遵从 Java 虚拟机规范, Java 虚拟机规范规定的区域分为以下 5 个部分:程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成;Java 虚拟机栈(Java Virtual Machine Stacks):用于存储局部变量表、操作数栈、动态链接、方法出口等信息;本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的;Java 堆(Java Heap):Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存;方法区(Methed Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。
  综上:
  内存的数据区大的方向上被划分为线程共享区和线程隔离区。在线程共享区中有方法区(主要存储类信息,常量,静态变量等)和java堆(存储所有的对象实例),数据隔离区有虚拟机栈(局部变量,操作数栈,动态链接等),本地方法栈和程序计数器。深拷贝和浅拷贝浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。说一下堆栈的区别?
  物理地址堆的物理地址分配对对象是不连续的。因此性能慢些。在GC的时候也要考虑到不连续的分配,所以有各种算法。比如,标记-消除,复制,标记-压缩,分代(即新生代使用复制算法,老年代使用标记——压缩)栈使用的是数据结构中的栈,先进后出的原则,物理地址分配是连续的。所以性能快。
  内存分别堆因为是不连续的,所以分配的内存是在运行期确认的,因此大小不固定。一般堆大小远远大于栈。栈是连续的,所以分配的内存大小要在编译期就确认,大小是固定的。
  存放的内容堆存放的是对象的实例和数组。因此该区更关注的是数据的存储栈存放:局部变量,操作数栈,返回结果。该区更关注的是程序方法的执行。
  注意:
  静态变量放在方法区
  静态的对象还是放在堆。
  程序的可见度堆对于整个应用程序都是共享、可见的。栈只对于线程是可见的。所以也是线程私有。他的生命周期和线程相同。队列和栈是什么?有什么区别?
  队列和栈都是被用来预存储数据的。操作的名称不同。队列的插入称为入队,队列的删除称为出队。栈的插入称为进栈,栈的删除称为出栈。可操作的方式不同。队列是在队尾入队,队头出队,即两边都可操作。而栈的进栈和出栈都是在栈顶进行的,无法对栈底直接进行操作。操作的方法不同。队列是先进先出(FIFO),即队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(不能从中间插入),每次离开的成员总是队列头上(不允许中途离队)。而栈为后进先出(LIFO),即每次删除(出栈)的总是当前栈中最新的元素,即-最后插入(进栈)的元素,而最先插入的被放在栈的底部,要到最后才能删除。HotSpot虚拟机对象探秘对象的创建
  说到对象的创建,首先让我们看看 Java 中提供的几种对象创建方式:
  Header
  解释
  使用new关键字
  调用了构造函数
  使用Class的newInstance方法
  调用了构造函数
  使用Constructor类的newInstance方法
  调用了构造函数
  使用clone方法
  没有调用构造函数
  使用反序列化
  没有调用构造函数
  内存角度分析对象的创建过程:
  虚拟机遇到一条new指令时,先检查常量池是否已经加载相应的类,如果没有,必须先执行相应的类加载。类加载通过后,接下来分配内存。若Java堆中内存是绝对规整的,使用"指针碰撞"方式分配内存;如果不是规整的,就从空闲列表中分配,叫做"空闲列表"方式。划分内存时还需要考虑一个问题-并发,也有两种方式: CAS同步处理,或者本地线程分配缓冲(Thread Local Allocation Buffer, TLAB)。然后内存空间初始化操作,接着是做一些必要的对象设置(元信息、哈希码…),最后执行方法。
  举例说明:
  第一步,JVM去方法区寻找Test类的代码信息,如果有直接调用,没有的话使用类的加载机制把类加载进来。同时把静态变量、静态方法、常量加载进来;这是因为字符串是常量,age中的18是基本类型。
  第二步,jvm进入main方法,看到Person person=new Person()。首先分析Person这个类,同样的寻找Person类的代码信息,有就加载,没有的话类加载机制加载进来。同时也加载静态变量、静态方法、常量("我正在走路…")
  第三步,jvm接下来看到了person,person在main方法内部,因而是局部变量,存放在栈空间中。
  第四步,jvm接下来看到了new Person()。new出的对象(实例),存放在堆空间中。
  第五步,jvm接下来看到了"=",把new Person的地址告诉person变量,person通过四字节的地址(十六进制),引用该实例。为对象分配内存
  类加载完成后,接着会在Java堆中划分一块内存分配给对象。内存分配根据Java堆是否规整,有两种方式:指针碰撞:如果Java堆的内存是规整,即所有用过的内存放在一边,而空闲的的放在另一边。分配内存时将位于中间的指针指示器向空闲的内存移动一段与对象大小相等的距离,这样便完成分配内存工作。空闲列表:如果Java堆的内存不是规整的,则需要由虚拟机维护一个列表来记录那些内存是可用的,这样在分配的时候可以从列表中查询到足够大的内存分配给对象,并在分配后更新列表记录。
  选择哪种分配方式是由 Java 堆是否规整来决定的,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。
  对象分配的并发问题处理
  对象的创建在虚拟机中是一个非常频繁的行为,哪怕只是修改一个指针所指向的位置,在并发情况下也是不安全的,可能出现正在给对象 A 分配内存,指针还没来得及修改,对象 B 又同时使用了原来的指针来分配内存的情况。解决这个问题有两种方案:
  对分配内存空间的动作进行同步处理(采用 CAS + 失败重试来保障更新操作的原子性);
  把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在 Java 堆中预先分配一小块内存,称为本地线程分配缓冲(Thread Local Allocation Buffer, TLAB)。哪个线程要分配内存,就在哪个线程的 TLAB 上分配。只有 TLAB 用完并分配新的 TLAB 时,才需要同步锁。通过-XX:+/-UserTLAB参数来设定虚拟机是否使用TLAB。
  虚拟机类加载机制 简述java类加载机制?
  虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。描述一下JVM加载Class文件的原理机制
  Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。
  类装载方式,有两种 :隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中,显式装载, 通过class.forname()等方法,显式加载需要的类
  Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。什么是类加载器,类加载器有哪些?
  实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。
  主要有一下四种类加载器:启动类加载器(Bootstrap ClassLoader)用来加载java核心类库,无法被java程序直接引用。扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。用户自定义类加载器,通过继承 java.lang.ClassLoader类的方式实现。说一下类装载的执行过程?
  类装载分为以下 5 个步骤:加载:根据查找路径找到相应的 class 文件然后导入;验证:检查加载的 class 文件的正确性;准备:给类中的静态变量分配内存空间;解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址;初始化:对静态变量和静态代码块执行初始化工作。什么是双亲委派模型?
  在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。
  类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库;其他类加载器:扩展类加载器(Extension ClassLoader):负责加载libext目录或Java. ext. dirs系统变量指定的路径中的所有类库;应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。
  双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。
  当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。
  内存溢出异常 Java会存在内存泄漏吗?请简单描述
  内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。理论上来说,Java是有GC垃圾回收机制的,也就是说,不再被使用的对象,会被GC自动回收掉,自动从内存中清除。
  但是,即使这样,Java也还是存在着内存泄漏的情况,java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。垃圾收集器简述Java垃圾回收机制
  在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。简述一下什么叫年轻代,年老代,持久代?
  1.年轻代:年轻代主要存放新创建的对象,垃圾回收会比较频繁。(稍微讲细一点就是即可,年轻代分成Eden Space和Suvivor Space。当对象在堆创建时,将进入年轻代的Eden Space。垃圾回收器进行垃圾回收时,扫描Eden Space,如果对象仍然存活,则复制到Suvivor Space。)
  2.年老代:年老代主要存放JVM认为生命周期比较长的对象(在扫描Suvivor Space时,如果对象已经经过了几次的扫描仍然存活,JVM认为其为一个持久化对象,则将其移到Old Gen。)
  3.持久代:持久代主要存放类定义、字节码和常量等很少会变更的信息。
  年轻代使用的是复制算法(避免频繁创建对象导致碎片过多,一般会对算法优化来规避算法占用内存的问题,优化后有效内存能近乎达到百分之90)。
  年老代使用的标记-整理算法(因为较少的发生gc,使用标记整理算法提高内存利用率)。
  直观的对比:
  效率:复制算法>标记-整理算法
  内存整齐度:复制算法=标记-整理算法
  内存利用率:标记-整理算法>复制算法GC是什么?为什么要GC
  GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存
  回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动
  回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。垃圾回收的优点和原理。并考虑2种回收机制
  java语言最显著的特点就是引入了垃圾回收机制,它使java程序员在编写程序时不再考虑内存管理的问题。
  由于有这个垃圾回收机制,java中的对象不再有"作用域"的概念,只有引用的对象才有"作用域"。
  垃圾回收机制有效的防止了内存泄露,可以有效的使用可使用的内存。
  垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已经死亡的或很长时间没有用过的对象进行清除和回收。
  程序员不能实时的对某个对象或所有对象调用垃圾回收器进行垃圾回收。
  垃圾回收有分代复制垃圾回收、标记垃圾回收、增量垃圾回收。垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。
  通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
  可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。Java 中都有哪些引用类型?
  强引用:发生 gc 的时候不会被回收。
  软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。
  弱引用:有用但不是必须的对象,在下一次GC时会被回收。
  虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用 PhantomReference 实现虚引用,虚引用的用途是在 gc 时返回一个通知。怎么判断对象是否可以被回收?
  垃圾收集器在做垃圾回收的时候,首先需要判定的就是哪些内存是需要被回收的,哪些对象是「存活」的,是不可以被回收的;哪些对象已经「死掉」了,需要被回收。
  一般有两种方法来判断:
  引用计数器法:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题;
  可达性分析算法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。在Java中,对象什么时候可以被垃圾回收
  当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。
  垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。JVM中的永久代中会发生垃圾回收吗
  垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。
  (注意:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)说一下 JVM 有哪些垃圾回收算法?标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。说一下 JVM 有哪些垃圾回收器?Serial收集器: 单线程的收集器,收集垃圾时,必须stop the world,使用复制算法。ParNew收集器: Serial收集器的多线程版本,也需要stop the world,复制算法。Parallel Scavenge收集器: 新生代收集器,复制算法的收集器,并发的多线程收集器,目标是达到一个可控的吞吐量。如果虚拟机总共运行100分钟,其中垃圾花掉1分钟,吞吐量就是99%。Serial Old收集器: 是Serial收集器的老年代版本,单线程收集器,使用标记整理算法。Parallel Old收集器: 是Parallel Scavenge收集器的老年代版本,使用多线程,标记-整理算法。CMS(Concurrent Mark Sweep) 收集器: 是一种以获得最短回收停顿时间为目标的收集器,标记清除算法,运作过程:初始标记,并发标记,重新标记,并发清除,收集结束会产生大量空间碎片。G1收集器: 标记整理算法实现,运作流程主要包括以下:初始标记,并发标记,最终标记,筛选标记。不会产生空间碎片,可以精确地控制停顿。
  最核心的是CMS收集器和G1收集器,区别如下:CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;G1收集器收集范围是老年代和新生代,不需要结合其他收集器使用;CMS收集器以最小的停顿时间为目标的收集器;G1收集器可预测垃圾回收的停顿时间CMS收集器是使用"标记-清除"算法进行的垃圾回收,容易产生内存碎片G1收集器使用的是"标记-整理"算法,进行了空间整合,降低了内存空间碎片。
  JVM调优 说一下 JVM 调优的工具?
  JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是 jconsole 和 jvisualvm 这两款视图监控工具。jconsole:用于对 JVM 中的内存、线程和类等进行监控;jvisualvm:JDK 自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、gc 变化等。常用的 JVM 调优的参数都有哪些?-Xms2g:初始化堆大小为 2g;-Xmx2g:堆最大内存为 2g;-XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;-XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;–XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;-XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;-XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组合;-XX:+PrintGC:开启打印 gc 信息;-XX:+PrintGCDetails:打印 gc 详细信息。

想买B级轿车?该买哪款?上月这10台B级最火,15万起别犹豫了最低15万起,看中型B级车不香?8月中型轿车销量最火排行榜TOP10名公布想要买中型轿车的老铁赶紧看过来,8月份销量排行榜前十名,已经是正式出炉,最低15万左右还可以买得起,没想到年轻人选择一部高端旗舰机,更看重的是什么呢?今天在后台有读者询问,年轻人选择一部高端旗舰机,更看重的是什么呢?其实这是一个非常有趣的话题,在回答之前,先明白什么高端旗舰和中端机抑或千元机的主要区别是什么。笔者认为一台高端旗舰新车嫌皮卡太费油,纯电动要不要了解一下?试驾雷达RD6文懂车帝原创许博懂车帝原创产品皮卡车型对于喜欢户外游玩或者是对装载能力有着强需求的消费者来说,确实是一个不错的选择。不过,市售的燃油车型对于现今的油价来说,在经济性方面多少有些不太明天凌晨2点将公布9月加息数据及年底终端利率还有不到14个小时就是公布九月份的加息数据了,在这个时间段其实真的什么分析都没有用,决定权都是掌握在美联储的手中,不论是美元指数,还是美债殖利率,不论是币市的资金体量还是BTC和E蓝牙耳机消费趋势数据报告有购买计划用户超7成预算低于1000元,音质音效是关注重点每经记者李少婷每经实习记者杨卉每经编辑张海妮图片来源每日经济新闻(资料图)不知自何时起,小巧轻便的蓝牙耳机成了打工人的标配,地铁沉浸式追剧睡前网抑云听课打游戏,随处可见蓝牙耳机用户新研究估算全球蚂蚁总数约2亿亿只新华社北京9月20日电蚂蚁是一种常见的昆虫,那地球上到底有多少只蚂蚁呢?一项最新的科学研究给出的估算结果是至少有2亿亿只。德国维尔茨堡大学中国香港大学等机构的研究人员在最新一期美国借助折叠屏优势,vivoXFold开启各场景奇妙体验vivo推出了首款折叠屏机型vivoXFold,该手机性能强悍,折叠屏方案更完善,展示了折叠屏旗舰新水准。最令人惊喜的是,该手机内屏更大更耐用,折痕也更浅,并支持多角度悬停,带来了起诉重整方变卖资产核心公司或被剥离,完成破产重整已三年的庞大集团仍未渡过危机近日,据第一财经报道,从庞大集团知情人士处获悉,庞庆华就重整方当初的相关承诺迟迟未兑现事宜,已向法院提起诉讼。庞大集团于2019年12月完成破产重整,创始人庞庆华及其一致行动人向重TCL中环旗下中环领先天津半导体基地投产中证网讯(记者万宇)TCL中环(002129)旗下中环领先天津半导体基地近日投产,该基地投资30亿元占地60亩,项目达产后将形成8英寸及以下抛光片135万片月的产能规模,项目建成后多地楼市开始复活?人民币破7物价上涨,房价将迎来底线说起当下楼市最尴尬的局面是什么?无疑就是消费者预期发生了不可逆转的变化,超过90的人都觉得此时不适合买房,或者说房价在未来5年内一定出现大跌,这一点在二三城市市场表现的淋淋尽致。至郎平重返美国安度晚年!专心陪伴女儿白浪,洛杉矶豪宅内饰曝光中国女排此前派出了二线队参加了女排亚洲杯的角逐,最终这支年轻的球队在决赛中出输给了同样没有派出主力阵容参赛的日本女排。在这场比赛结束后,很多球迷对于结果非常失望,尤其是输给日本更是
博眼球蹭热度!英方召见中国大使,提无理要求,遭中俄两方怒怼文柳扶风工作室李不言正如美西方掀起的反俄浪潮一样,反华似乎也成了这些国家政客们的政治正确。面对中国的日渐强大,美西方国家的得意与傲慢几乎维持不住了。毕竟中国在走上坡路,而它们却是江英国干涉台海,中国主动出击,直接提起苏格兰,这是一个好的开始随着美国公然在台湾问题上迈出危险一步,其西方阵营中的盟友也开始对此事进行大规模的炒作,而英国可谓其中的先锋。为此,中方日前对英方的错误言论进行了严正的批驳。不过,与之前不尽相同的是西伯利亚波动明显,8月下旬要来强冷空气?分析不确定或小范围真的太热了!今天我国中东部多地热浪滚滚,出现40度以上的气温的区域可谓相当广阔。更有破纪录的高温出现,比如湖北竹山今天下午1626分气温升至44。3度,一举创下中东部地区今年最高气趣睡科技今日登陆创业板,股价开盘大涨超1048月12日,成都趣睡科技股份有限公司(以下简称趣睡科技)登陆创业板上市,保荐人为中金公司,本次发行价格37。53元股,对应发行人2021年扣非前后孰低净利润摊薄后市盈率为26。50纸黄金被叫停,个人外汇期权停发新产品,银行为何紧急避险?撰文周梦婷编辑孙月当前,已有包括招商银行工商银行建设银行在内的多家银行叫停了纸贵金属业务。而早在2021年,银行们就已开始调整纸贵金属业务,从各家银行公告和市场分析来看,原因主要集稀土永磁概念细分龙头,股价在9。86元,每股净资产却高达11。54股票涨跌象波浪,不要进在浪头上。从86元跌到10。78元,跌幅已经超87。47,经过震仓调整,近期出现低位放量频繁出现涨停板,说明有资金在关注,放量企稳后市可期。核心概念华为概念智心态决定疗效在我们的临床工作中,经常会遇到两类患者,一类人因为周边的亲朋好友患恶性肿瘤去世,自己出现一点点轻微的症状就异常紧张,怀疑自己也得了肿瘤,赶快跑到医院来做各项检查,看到基本正常的检查丈夫联手大嫂逼我离婚,我反手嫁给他大哥故事内容虚构,仅供阅读他家闹起来那天我也在,四个人齐聚一堂。我大伯哥坚决要离婚,大嫂哭的梨花带雨,贼可怜,我要是个男的,我都要去哄了。所以我老公就是条真汉子,他可心疼了。跪在大嫂脚别对狗狗做这些事,不然它们会以为被抛弃了对大部分狗狗,来说主人的抛弃,就是一种放弃,会让它们失去信仰,觉得一切都没有意思了。所以小编想对宠主们说一句,别对狗狗做这些事,不然它们会以为被抛弃了!不陪狗狗一起互动,还不理它养与灰指甲斗争七年,分享一些良心经验和记录过程与灰指甲斗争七年,分享一些良心经验和记录过程!之前在知乎和贴吧之类的地方搜过大家治疗灰指甲的办法,不过发现有很多人打广告的人,因为自己上过当,所以不想更多的伙伴跟我一样,另外一个原嘘,安静,听我讲个鬼故事晚上加完班独自乘电梯,下一层开门时,外边等电梯的人却瞅了眼电梯说哟,怎么这么多人,我还是等下一趟吧从小到大听了不少鬼故事,吓人归吓人,但也只是心理上的毛骨悚然。基金圈一出鬼故事就不