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

JAVA知识每日一问JDK和JRE的区别是什么?

  前言
  JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。JRE/JDK/JVM是什么关系
  JRE(JavaRuntimeEnvironment,Java运行环境) ,也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。
  **JDK(Java Development Kit)**是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
  **JVM(JavaVirtualMachine,Java虚拟机)**是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。
  Java学习笔记共享地址: JVM调优和实战400多页学习笔记 JVM原理
  JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。
  添加描述
  java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。 JVM的体系结构
  添加描述
  类装载器(ClassLoader)(用来装载.class文件)
  执行引擎(执行字节码,或者执行本地方法)
  运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈) JVM运行时数据区
  添加描述
  第一块:PC寄存器
  PC寄存器是用于存储每个线程下一步将执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息。
  第二块:JVM栈
  JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。
  第三块:堆(Heap)
  它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。
  添加描述
  (1) 堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的
  (2) Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer),其大小由JVM根据运行的情况计算而得,在TLAB上分配对象时不需要加锁,因此JVM在给线程的对象分配内存时会尽量的在TLAB上分配,在这种情况下JVM中分配对象内存的性能和C基本是一样高效的,但如果对象过大的话则仍然是直接使用堆空间分配
  (3) TLAB仅作用于新生代的Eden Space,因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。
  (4) 所有新创建的Object 都将会存储在新生代Yong Generation中。如果Young Generation的数据在一次或多次GC后存活下来,那么将被转移到OldGeneration。新的Object总是创建在Eden Space。
  第四块:方法区域(Method Area)
  (1)在Sun JDK中这块区域对应的为PermanetGeneration,又称为持久代。
  (2)方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。
  第五块:运行时常量池(Runtime Constant Pool)
  存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。
  第六块:本地方法堆栈(Native Method Stacks)
  JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。 对象"已死"的判定算法
  由于程序计数器、Java虚拟机栈、本地方法栈都是线程独享,其占用的内存也是随线程生而生、随线程结束而回收。而Java堆和方法区则不同,线程共享,是GC的所关注的部分。
  在堆中几乎存在着所有对象,GC之前需要考虑哪些对象还活着不能回收,哪些对象已经死去可以回收。
  有两种算法可以判定对象是否存活:
  1.)引用计数算法:给对象中添加一个引用计数器,每当一个地方应用了对象,计数器加1;当引用失效,计数器减1;当计数器为0表示该对象已死、可回收。但是它很难解决两个对象之间相互循环引用的情况。
  2.)可达性分析算法:通过一系列称为"GC Roots"的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(即对象到GC Roots不可达),则证明此对象已死、可回收。Java中可以作为GC Roots的对象包括:虚拟机栈中引用的对象、本地方法栈中Native方法引用的对象、方法区静态属性引用的对象、方法区常量引用的对象。
  在主流的商用程序语言(如我们的Java)的主流实现中,都是通过可达性分析算法来判定对象是否存活的。 JVM垃圾回收
  GC (Garbage Collection)的基本原理:将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停
  (1)对新生代的对象的收集称为minor GC;
  (2)对旧生代的对象的收集称为Full GC;
  (3)程序中主动调用System.gc()强制执行的GC为Full GC。
  不同的对象引用类型, GC会采用不同的方法进行回收,JVM对象的引用分为了四种类型:
  (1)强引用:默认情况下,对象采用的均为强引用(这个对象的实例没有其他对象引用,GC时才会被回收)
  (2)软引用:软引用是Java中提供的一种比较适合于缓存场景的应用(只有在内存不够用的情况下才会被GC)
  (3)弱引用:在GC时一定会被GC回收
  (4)虚引用:由于虚引用只是用来得知对象是否被GC 垃圾收集算法1、标记-清除算法
  最基础的算法,分标记和清除两个阶段:首先标记处所需要回收的对象,在标记完成后统一回收所有被标记的对象。
  它有两点不足:一个效率问题,标记和清除过程都效率不高;一个是空间问题,标记清除之后会产生大量不连续的内存碎片(类似于我们电脑的磁盘碎片),空间碎片太多导致需要分配大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾回收动作。
  添加描述 复制算法
  为了解决效率问题,出现了"复制"算法,他将可用内存按容量划分为大小相等的两块,每次只需要使用其中一块。当一块内存用完了,将还存活的对象复制到另一块上面,然后再把刚刚用完的内存空间一次清理掉。这样就解决了内存碎片问题,但是代价就是可以用内容就缩小为原来的一半。
  添加描述 标记-整理算法
  复制算法在对象存活率较高时就会进行频繁的复制操作,效率将降低。因此又有了标记-整理算法,标记过程同标记-清除算法,但是在后续步骤不是直接对对象进行清理,而是让所有存活的对象都向一侧移动,然后直接清理掉端边界以外的内存。
  添加描述 分代收集算法
  当前商业虚拟机的GC都是采用分代收集算法,这种算法并没有什么新的思想,而是根据对象存活周期的不同将堆分为:新生代和老年代,方法区称为永久代(在新的版本中已经将永久代废弃,引入了元空间的概念,永久代使用的是JVM内存而元空间直接使用物理内存)。
  这样就可以根据各个年代的特点采用不同的收集算法。
  添加描述
  新生代中的对象"朝生夕死",每次GC时都会有大量对象死去,少量存活,使用复制算法。新生代又分为Eden区和Survivor区(Survivor from、Survivor to),大小比例默认为8:1:1。
  老年代中的对象因为对象存活率高、没有额外空间进行分配担保,就使用标记-清除或标记-整理算法。
  新产生的对象优先进去Eden区,当Eden区满了之后再使用Survivor from,当Survivor from 也满了之后就进行Minor GC(新生代GC),将Eden和Survivor from中存活的对象copy进入Survivor to,然后清空Eden和Survivor from,这个时候原来的Survivor from成了新的Survivor to,原来的Survivor to成了新的Survivor from。复制的时候,如果Survivor to 无法容纳全部存活的对象,则根据老年代的分配担保(类似于银行的贷款担保)将对象copy进去老年代,如果老年代也无法容纳,则进行Full GC(老年代GC)。
  大对象直接进入老年代:JVM中有个参数配置
  -XX:PretenureSizeThreshold,令大于这个设置值的对象直接进入老年代,目的是为了避免在Eden和Survivor区之间发生大量的内存复制。
  长期存活的对象进入老年代:JVM给每个对象定义一个对象年龄计数器,如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳,将被移入Survivor并且年龄设定为1。没熬过一次Minor GC,年龄就加1,当他的年龄到一定程度(默认为15岁,可以通过XX:MaxTenuringThreshold来设定),就会移入老年代。但是JVM并不是永远要求年龄必须达到最大年龄才会晋升老年代,如果Survivor 空间中相同年龄(如年龄为x)所有对象大小的总和大于Survivor的一半,年龄大于等于x的所有对象直接进入老年代,无需等到最大年龄要求。 垃圾收集器
  垃圾收集算法是方法论,垃圾收集器是具体实现。JVM规范对于垃圾收集器的应该如何实现没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器差别较大,这里只看HotSpot虚拟机。
  JDK7/8后,HotSpot虚拟机所有收集器及组合(连线)如下:
  添加描述 Serial收集器
  Serial收集器是最基本、历史最久的收集器,曾是新生代手机的唯一选择。他是单线程的,只会使用一个CPU或一条收集线程去完成垃圾收集工作,并且它在收集的时候,必须暂停其他所有的工作线程,直到它结束,即"Stop the World"。停掉所有的用户线程,对很多应用来说难以接受。比如你在做一件事情,被别人强制停掉,你心里奔腾而过的"羊驼"还数的过来吗?
  尽管如此,它仍然是虚拟机运行在client模式下的默认新生代收集器:简单而高效(与其他收集器的单个线程相比,因为没有线程切换的开销等)。
  工作示意图:
  添加描述 ParNew收集器
  ParNew收集器是Serial收集器的多线程版本,除了使用了多线程之外,其他的行为(收集算法、stop the world、对象分配规则、回收策略等)同Serial收集器一样。
  是许多运行在Server模式下的JVM中首选的新生代收集器,其中一个很重还要的原因就是除了Serial之外,只有他能和老年代的CMS收集器配合工作。
  工作示意图:
  添加描述 Parallel Scavenge收集器
  新生代收集器,并行的多线程收集器。它的目标是达到一个可控的吞吐量(就是CPU运行用户代码的时间与CPU总消耗时间的比值,即 吞吐量=行用户代码的时间/行用户代码的时间+垃圾收集时间),这样可以高效率的利用CPU时间,尽快完成程序的运算任务,适合在后台运算而不需要太多交互的任务。 Serial Old收集器
  Serial 收集器的老年代版本,单线程,"标记整理"算法,主要是给Client模式下的虚拟机使用。
  另外还可以在Server模式下:
  JDK 1.5之前的版本中雨Parallel Scavenge 收集器搭配使用
  可以作为CMS的后背方案,在CMS发生Concurrent Mode Failure是使用
  工作示意图:
  添加描述 Parallel Old收集器
  Parallel Scavenge的老年代版本,多线程,"标记整理"算法,JDK 1.6才出现。在此之前Parallel Scavenge只能同Serial Old搭配使用,由于Serial Old的性能较差导致Parallel Scavenge的优势发挥不出来,尴了个尬~~
  Parallel Old收集器的出现,使"吞吐量优先"收集器终于有了名副其实的组合。在吞吐量和CPU敏感的场合,都可以使用Parallel Scavenge/Parallel Old组合。组合的工作 示意图如下:
  添加描述 CMS收集器
  CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,停顿时间短,用户体验就好。
  基于"标记清除"算法,并发收集、低停顿,运作过程复杂,分4步:
  _1)初始标记:_仅仅标记GC Roots能直接关联到的对象,速度快,但是需要"Stop The World"
  _2)并发标记:_就是进行追踪引用链的过程,可以和用户线程并发执行。
  _3)重新标记:_修正并发标记阶段因用户线程继续运行而导致标记发生变化的那部分对象的标记记录,比初始标记时间长但远比并发标记时间短,需要"Stop The World"
  _4)并发清除:_清除标记为可以回收对象,可以和用户线程并发执行
  由于整个过程耗时最长的并发标记和并发清除都可以和用户线程一起工作,所以总体上来看,CMS收集器的内存回收过程和用户线程是并发执行的。
  工作示意图:
  添加描述 CSM收集器有3个缺点:
  1)对CPU资源非常敏感
  并发收集虽然不会暂停用户线程,但因为占用一部分CPU资源,还是会导致应用程序变慢,总吞吐量降低。
  CMS的默认收集线程数量是=(CPU数量+3)/4;当CPU数量多于4个,收集线程占用的CPU资源多于25%,对用户程序影响可能较大;不足4个时,影响更大,可能无法接受。
  2)无法处理浮动垃圾 (在并发清除时,用户线程新产生的垃圾叫浮动垃圾),可能出现"Concurrent Mode Failure"失败。
  并发清除时需要预留一定的内存空间,不能像其他收集器在老年代几乎填满再进行收集;如果CMS预留内存空间无法满足程序需要,就会出现一次"Concurrent Mode Failure"失败;这时JVM启用后备预案:临时启用Serail Old收集器,而导致另一次Full GC的产生;
  **3)产生大量内存碎片:**CMS基于"标记-清除"算法,清除后不进行压缩操作产生大量不连续的内存碎片,这样会导致分配大内存对象时,无法找到足够的连续内存,从而需要提前触发另一次Full GC动作。 G1收集器
  G1(Garbage-First)是JDK7-u4才正式推出商用的收集器。G1是面向服务端应用的垃圾收集器。它的使命是未来可以替换掉CMS收集器。 G1收集器特性:
  并行与并发:能充分利用多CPU、多核环境的硬件优势,缩短停顿时间;能和用户线程并发执行。
  **分代收集:**G1可以不需要其他GC收集器的配合就能独立管理整个堆,采用不同的方式处理新生对象和已经存活一段时间的对象。
  **空间整合:**整体上看采用标记整理算法,局部看采用复制算法(两个Region之间),不会有内存碎片,不会因为大对象找不到足够的连续空间而提前触发GC,这点优于CMS收集器。
  **可预测的停顿:**除了追求低停顿还能建立可以预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不超N毫秒,这点优于CMS收集器。
  为什么能做到可预测的停顿?
  是因为可以有计划的避免在整个Java堆中进行全区域的垃圾收集。
  G1收集器将内存分大小相等的独立区域(Region),新生代和老年代概念保留,但是已经不再物理隔离。
  G1跟踪各个Region获得其收集价值大小,在后台维护一个优先列表;
  每次根据允许的收集时间,优先回收价值最大的Region(名称Garbage-First的由来);
  这就保证了在有限的时间内可以获取尽可能高的收集效率。
  对象被其他Region的对象引用了怎么办?
  判断对象存活时,是否需要扫描整个Java堆才能保证准确?在其他的分代收集器,也存在这样的问题(而G1更突出):新生代回收的时候不得不扫描老年代?无论G1还是其他分代收集器,JVM都是使用Remembered Set来避免全局扫描:每个Region都有一个对应的Remembered Set;每次Reference类型数据写操作时,都会产生一个Write Barrier 暂时中断操作;然后检查将要写入的引用指向的对象是否和该Reference类型数据在不同的 Region(其他收集器:检查老年代对象是否引用了新生代对象);如果不同,通过CardTable把相关引用信息记录到引用指向对象的所在Region对应的Remembered Set中; 进行垃圾收集时,在GC根节点的枚举范围加入 Remembered Set ,就可以保证不进行全局扫描,也不会有遗漏。
  不计算维护Remembered Set的操作,回收过程可以分为4个步骤(与CMS较为相似):
  1)初始标记:仅仅标记GC Roots能直接关联到的对象,并修改TAMS(Next Top at Mark Start)的值,让下一阶段用户程序并发运行时能在正确可用的Region中创建新对象,需要"Stop The World"
  2)并发标记:从GC Roots开始进行可达性分析,找出存活对象,耗时长,可与用户线程并发执行
  3)最终标记:修正并发标记阶段因用户线程继续运行而导致标记发生变化的那部分对象的标记记录。并发标记时虚拟机将对象变化记录在线程Remember Set Logs里面,最终标记阶段将Remember Set Logs整合到Remember Set中,比初始标记时间长但远比并发标记时间短,需要"Stop The World"
  4)筛选回收:首先对各个Region的回收价值和成本进行排序,然后根据用户期望的GC停顿时间来定制回收计划,最后按计划回收一些价值高的Region中垃圾对象。回收时采用复制算法,从一个或多个Region复制存活对象到堆上的另一个空的Region,并且在此过程中压缩和释放内存;可以并发进行,降低停顿时间,并增加吞吐量。
  工作示意图:
  添加描述 基本结构
  从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:
  从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别。 最后
  分享一张jvm知识图谱,拿图请点赞(转发也可)蟹蟹。
  另外还整理成了40多套PDF文档:全套的Java面试宝典手册,"性能调优+微服务架构+并发编程+开源框架+分布式"等七大面试专栏,包含Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、并发、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB、memcached等等。如果你对这个感兴趣,小编可以免费分享。
  资料获取方式:关注小编+转发文章+私信【面试题】获取上述资料~
  重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!

小米43吋电视960元到手价,当显示器用真香如果你想购买一台大屏显示器,而预算只有一千块,那今天给你推荐一款小米A43电视,43吋大小放在桌上享受大屏震撼。这款小米43寸电视,目前活动售价999元,下单1件和凑单品满1000为什么现在市面上不出曲面屏电视了?虽然现在很多人都不爱看电视了,但电视机还是必不可少的家用电器之一。现如今,随着科技的发展,电视的种类和功能也越来越多。其中,就有曲面屏电视。需求推动供给,供给不足,那么可能是因为市oled屏长期使用纯黑色壁纸会烧屏吗?如果单单用纯黑色的壁纸的话,就会出现图标一直亮着,背景不亮,图标就会先老化,这样显示纯色的时候就会看到图标的影子,一样是烧屏,省电倒是省点电。只有让每个像素点的工作频率一致,一起老末端物流的终极价值只走到第1。5步文新经济沸点郭娟编者按这篇稿件采写于2014年,一位资深的物流创业者再创业,针对的是这个领域当时存在的三个痛点快递员投妥率消费者隐私保护和消费端需求的精准采集。社区商店成为这三个痛美柚立足女性健康长远利益,构建孕妈社群新生态随着公域流量的红利逐渐消退,获客成本不断上升,粘性和留存率也较低,挖掘私域流量成了目前的行业发展趋势,各大互联网公司和品牌纷纷入局,以实现对用户资产的精细化运营。但许多企业直接把私燃油车或被取代!海南禁售燃油车日期确认,全国禁售指日可待石油是不可再生资源,再加上现在的全球变暖问题日益严重,还有各种意外导致的火灾增加了二氧化碳的排放,给全球变暖装备了加速器,改善环境已成为人们的首要目标。现在全球很多国家已经将普及新为什么Crypto是(元宇宙)的关键随着Facebook最近宣布更名为Meta并积极探索元宇宙,有关这一领域将如何发展引发了诸多讨论。话虽如此,元宇宙将是区块链和加密资产走向主流的一个巨大机遇,为何如此呢?元宇宙带来大家玩喵糖的战绩如何?有没有获得4999元奖励的?1号那波我还玩的挺带劲,每天攒喵糖投红包,预选场攒了十六七块的红包吧,结果还来了个好像什么实战场,两对pk,还有门票,输了的除了红包没有还得倒扣门票钱,更悲催的是就算你不去pk,门特斯拉Model规格曝光!2K真全面钛合金机身,支持太阳能充电说起特斯拉,大家都知道它是智能电动车界的大哥。早在几个月前,曾有消息称特斯拉欲进军智能手机市场分一杯羹,而近日,特斯拉的首款手机Model似乎已有了雏形。据消息人士透露,特斯拉Mo油价14连涨,600万新能源车主却笑不出来,为啥?有6个原因2021年11月5日24时,我国油价又迎来了新一轮的调价,这一次调价是成品油年内第二十次调价,而从9月份开始,我国油价已经连续两个多月在上涨,到11月就实现了14连涨。目前,92号iPhoneSE3月又有了新消息,为了控制成本,库克做得天衣无缝我们知道,就在2020年4月份,苹果发布了新一代iPhoneSE手机,做到了3299元的起售价,可以说性价比非常高了,但是遗憾的是,不支持5G,从而果粉对新一代支持5G的iPhon
上海市发布关于支持本市燃料电池汽车产业发展若干政策电车汇消息11月3日,上海市发改委发布了关于支持本市燃料电池汽车产业发展若干政策的通知,政策自2021年11月1日起实施,有效期至2025年12月31日。政策内容涉及支持整车应用支快讯首德名师课堂暨解静娴教授师资培训南通站圆满举行2021年4月19日,由德国SAUTER钢琴制造公司,雅登音响乐器(上海)有限公司主办,南通雅正宇艺琴行承办的首德名师课堂暨解静娴教授师资培训在南通市北文体中心隆重举行!这是暨南京边缘计算时代,支持私有化部署的低代码平台备受追捧随着数字中国建设的提速,从技术到应用,边缘计算正在快速走入制造企业的信息化菜单。然而,除了媒体广泛关注的通信和算力,定制化的软件开发更容易成为边缘计算落地的瓶颈。这两年火热的低代码YYDS!堪称汽车界潮牌极氪,果然没让人失望成都,一个极具现代个性开放性包容性的城市。它常常以精致独特潮流时尚又饱含古典韵味的城市形象展现在大众面前。这座被称为最适宜人类居住的休闲之都,天府之国,吸引人们向往的除了它优质的环上汽集团以SpreadJS表格技术创新,推动新能源5G建设十三五期间,上海汽车集团股份有限公司(简称上汽集团)不断加快自主掌控的核心技术研发,通过深入推进汽车制造领域电动化智能网联化共享化国际化的新四化战略,布局新能源5G建设,牢牢把握住AustrianAudio新品发布CC8小振膜电容麦克风近几个月奥地利专业音频新星AustrianAudio(奥世声)密集发布多款专业麦克风和耳机新品。继上月发布了全新的OC707和OD505手持舞台话筒之后,本月又推出了新品CC8小振专业制造成就专业之选奥产HiX65开放式耳机说到奥地利制造,相信大家的第一反应基本上就是音频产品。奥地利对专业音频的贡献需要单开一篇来细数。但当那个A字头传奇工厂被关停后,在奥地利只留下了一个被迫失业的设计团队和工厂。当然奥ComponentOne。NET控件集发布更新,加入更多。NET5控件ComponentOneEnterprise是葡萄城推出的一款支持。NETCore平台完美集成VisualStudio的。NET控件集,内置300多种。NET控件,可满足WinFo360联手哪吒造的车周鸿祎只要10万元日前,360集团智能汽车战略媒体沟通会在北京举行。360集团创始人董事长周鸿祎宣布,360集团战略投资哪吒汽车,完成全部投资后,将成为哪吒汽车第二大股东,360将持续为哪吒汽车提供连看两部韩美谍战片,真的可以看出东西方文化差异最近上映的新片太少,找些经典老片重温一下历史的精彩。周末连看两部谍战片,分别是马特达蒙的特务风云和全智贤的暗杀。特务风云讲述CIA创始人之一的传奇生涯,其中人物情感心理性格的变化,理想和现实主义的差异大到你无法想象所有电影的开始你都无法预料接下来会发生什么,正如这部名为罗曼先生,你好的电影。一个满腹改变世界的理想,空有一肚子理论知识才华于一身,但看起来与周围的人与环境总显得格格不入,你视他为