c++ new 数组_用Java实现JVM第八章《数组和字符串》

cf7f21919f342c92a6f705bf36bb4cd3.png

案例介绍
本章主要介绍如何实现让虚拟机处理数组和字符串,在虚拟机功能增强后,我们可以执行数组类型计算和输出字符串。本章需要新增实现数组指令;newarray、anewarray、arraylength、aload、astore、multianewarray、ldc,同时需要需要开发字符串池方法等。

数组在Java虚拟机中是给比较特殊的概念,主要有以下原因;
首先,数组类和普通的类是不同的。普通的类从class文件中加载,但是数组类由Java虚拟机在运行时生成。数组的类名是左括号([)+数组元素的类型描述符;数组的类型描述符就是类名本身。例如,int[]的类名是[I,int[][]的类名是[[I,Object[]的类名是[Ljava/lang/Object;,String[][]的类名是[[java/lang/String;,等等。
其次,创建数组的方式和创建普通对象的方式不同。普通对象new指令创建,然后由构造函数初始化。基本类型数组由newarray指令创建;引用类型数组由anewarray指令创建;另外还有一个专门的mulitianewarray指令用于创建多维数组。
最后,很显然,数组和普通对象存在的数据也是不同的。普通对象中存放的是实例变量,通过putfield和getfield指令存取。数组对象中存放的则是数组元素,通过aload和astore系列指令按索引存取。其中可以是a、b、c、d、f、i、l或者s,分别用于存取引用、byte、char、double、float、int、long或者shore类型的数组。另外,还有一个arraylength指令,用于获取数组长度。

环境准备
1、jdk 1.8.0
2、IntelliJ IDEA Community Edition 2018.3.1 x64

配置信息
1、调试配置
2.1、配置位置:Run/Debug Configurations -> program arguments
2.2、配置内容(执行数组计算):-Xjre “C:Program FilesJavajdk1.8.0_161jre” E:itstackgitistack-demoitstack-demo-jvmitstack-demo-jvm-08targettest-classesorgitstackdemotestBubbleSortTest
2.2、配置内容(字符串的输出):-Xjre “C:Program FilesJavajdk1.8.0_161jre” E:itstackgitistack-demoitstack-demo-jvmitstack-demo-jvm-08targettest-classesorgitstackdemotestHelloWorld -verbose true -args 你好,java版虚拟机v1.0,欢迎你的到来。

代码示例

itstack-demo-jvm-08
├── pom.xml
└── src└── main│    └── java│        └── org.itstack.demo.jvm│             ├── classfile│             │   ├── attributes   {BootstrapMethods/Code/ConstantValue...}│             │   ├── constantpool {CONSTANT_TAG_CLASS/CONSTANT_TAG_FIELDREF/CONSTANT_TAG_METHODREF...}│             │   ├── ClassFile.java│             │   ├── ClassReader.java│             │   └── MemberInfo.java   │             ├── classpath│             │   ├── impl│             │   │   ├── CompositeEntry.java│             │   │   ├── DirEntry.java │             │   │   ├── WildcardEntry.java │             │   │   └── ZipEntry.java    │             │   ├── Classpath.java│             │   └── Entry.java   │             ├── classpath│             │   ├── base│             │   │   ├── BytecodeReader.java│             │   │   ├── ClassInitLogic.java│             │   │   ├── Instruction.java│             │   │   ├── InstructionBranch.java│             │   │   ├── InstructionIndex8.java│             │   │   ├── InstructionIndex16.java│             │   │   ├── InstructionNoOperands.java	│             │   │   └── MethodInvokeLogic.java│             │   ├── comparisons│             │   ├── constants│             │   ├── control│             │   ├── conversions│             │   ├── extended│             │   ├── loads│             │   ├── math│             │   ├── references│             │   │   ├── ANEW_ARRAY.java│             │   │   ├── ARRAY_LENGTH.java│             │   │   ├── CHECK_CAST.java│             │   │   ├── GET_FIELD.java│             │   │   ├── GET_STATIC.java│             │   │   ├── INSTANCE_OF.java│             │   │   ├── INVOKE_INTERFACE.java│             │   │   ├── INVOKE_SPECIAL.java│             │   │   ├── INVOKE_STATIC.java│             │   │   ├── INVOKE_VIRTUAL.java│             │   │   ├── MULTI_ANEW_ARRAY.java│             │   │   ├── NEW.java│             │   │   ├── NEW_ARRAY.java│             │   │   ├── PUT_FIELD.java│             │   │   └── PUT_STATIC.java│             │   ├── stack│             │   ├── store│             │   │   └── xastore│             │   │       ├── AASTORE.java	│             │   │       ├── BASTORE.java	│             │   │       ├── CASTORE.java	│             │   │       ├── DASTORE.java│             │   │       ├── FASTORE.java│             │   │       ├── IASTORE.java│             │   │       ├── LASTORE.java	│             │   │       └── SASTORE.java		│             │   └── Factory   │             ├── rtda│             │   ├── heap│             │   │   ├── constantpool│             │   │   ├── methodarea│             │   │   │   ├── Class.java    │             │   │   │   ├── ClassMember.java  │             │   │   │   ├── Field.java    │             │   │   │   ├── Method.java │             │   │   │   ├── MethodDescriptor.java │             │   │   │   ├── MethodDescriptorParser.java │             │   │   │   ├── MethodLookup.java 	│             │   │   │   ├── Object.java   │             │   │   │   ├── Slots.java   │             │   │   │   └── StringPool.java	│             │   │   └── ClassLoader.java  │             │   ├── Frame.java│             │   ├── JvmStack.java│             │   ├── LocalVars.java│             │   ├── OperandStack.java│             │   ├── Slot.java │             │   └── Thread.java│             ├── Cmd.java│             ├── Interpret.java    │             └── Main.java└── test└── java└── org.itstack.demo.test├── BubbleSortTest.java└── HelloWorld.java

代码片段

ANEW_ARRAY.java

package org.itstack.demo.jvm.instructions.references;import org.itstack.demo.jvm.instructions.base.InstructionIndex16;
import org.itstack.demo.jvm.rtda.Frame;
import org.itstack.demo.jvm.rtda.OperandStack;
import org.itstack.demo.jvm.rtda.heap.constantpool.ClassRef;
import org.itstack.demo.jvm.rtda.heap.constantpool.RunTimeConstantPool;
import org.itstack.demo.jvm.rtda.heap.methodarea.Class;
import org.itstack.demo.jvm.rtda.heap.methodarea.Object;/*** http://www.itstack.org* create by fuzhengwei on 2019/4/29* create new array of reference*/
public class ANEW_ARRAY extends InstructionIndex16 {@Overridepublic void execute(Frame frame) {RunTimeConstantPool runTimeConstantPool = frame.method().clazz().constantPool();ClassRef classRef = (ClassRef) runTimeConstantPool.getConstants(this.idx);Class componentClass = classRef.resolvedClass();OperandStack stack = frame.operandStack();int count = stack.popInt();if (count < 0) {throw new NegativeArraySizeException();}Class arrClass = componentClass.arrayClass();Object arr = arrClass.newArray(count);stack.pushRef(arr);}}

ARRAY_LENGTH.java

package org.itstack.demo.jvm.instructions.references;import org.itstack.demo.jvm.instructions.base.InstructionNoOperands;
import org.itstack.demo.jvm.rtda.Frame;
import org.itstack.demo.jvm.rtda.OperandStack;
import org.itstack.demo.jvm.rtda.heap.methodarea.Object;/*** http://www.itstack.org* create by fuzhengwei on 2019/4/29* get length of array*/
public class ARRAY_LENGTH extends InstructionNoOperands {@Overridepublic void execute(Frame frame) {OperandStack stack = frame.operandStack();Object arrRef = stack.popRef();if (null == arrRef){throw new NullPointerException();}int arrLen = arrRef.arrayLength();stack.pushInt(arrLen);}}

NEW_ARRAY.java

package org.itstack.demo.jvm.instructions.references;import org.itstack.demo.jvm.instructions.base.BytecodeReader;
import org.itstack.demo.jvm.instructions.base.Instruction;
import org.itstack.demo.jvm.rtda.Frame;
import org.itstack.demo.jvm.rtda.OperandStack;
import org.itstack.demo.jvm.rtda.heap.ClassLoader;
import org.itstack.demo.jvm.rtda.heap.methodarea.Class;
import org.itstack.demo.jvm.rtda.heap.methodarea.Object;/*** http://www.itstack.org* create by fuzhengwei on 2019/4/29*/
public class NEW_ARRAY implements Instruction {private byte atype;@Overridepublic void fetchOperands(BytecodeReader reader) {this.atype = reader.readByte();}@Overridepublic void execute(Frame frame) {OperandStack stack = frame.operandStack();int count = stack.popInt();if (count < 0) {throw new NegativeArraySizeException();}ClassLoader classLoader = frame.method().clazz().loader();Class arrClass = getPrimitiveArrayClass(classLoader, this.atype);Object arr = arrClass.newArray(count);stack.pushRef(arr);}private Class getPrimitiveArrayClass(ClassLoader loader, byte atype){switch (atype) {case ArrayType.AT_BOOLEAN:return loader.loadClass("[Z");case ArrayType.AT_BYTE:return loader.loadClass("[B");case ArrayType.AT_CHAR:return loader.loadClass("[C");case ArrayType.AT_SHORT:return loader.loadClass("[S");case ArrayType.AT_INT:return loader.loadClass("[I");case ArrayType.AT_LONG:return loader.loadClass("[J");case ArrayType.AT_FLOAT:return loader.loadClass("[F");case ArrayType.AT_DOUBLE:return loader.loadClass("[D");default:throw new RuntimeException("Invalid atype!");}}static class ArrayType {static final byte AT_BOOLEAN = 4;static final byte AT_CHAR = 5;static final byte AT_FLOAT = 6;static final byte AT_DOUBLE = 7;static final byte AT_BYTE = 8;static final byte AT_SHORT = 9;static final byte AT_INT = 10;static final byte AT_LONG = 11;}}

IASTORE.java

package org.itstack.demo.jvm.instructions.stores.xastore;import org.itstack.demo.jvm.instructions.base.InstructionNoOperands;
import org.itstack.demo.jvm.rtda.Frame;
import org.itstack.demo.jvm.rtda.OperandStack;
import org.itstack.demo.jvm.rtda.heap.methodarea.Object;/*** http://www.itstack.org* create by fuzhengwei on 2019/4/29*/
public class IASTORE extends InstructionNoOperands {@Overridepublic void execute(Frame frame) {OperandStack stack = frame.operandStack();int val = stack.popInt();int idx = stack.popInt();Object arrRef = stack.popRef();checkNotNull(arrRef);int[] ints = arrRef.ints();checkIndex(ints.length, idx);ints[idx] = val;}}

StringPool.java

package org.itstack.demo.jvm.rtda.heap.methodarea;import org.itstack.demo.jvm.rtda.heap.ClassLoader;import java.util.HashMap;
import java.util.Map;/*** http://www.itstack.org* create by fuzhengwei on 2019/4/29*/
public class StringPool {private static Map<String, Object> internedStrs = new HashMap<>();public static Object jString(ClassLoader loader, String goStr) {Object internedStr = internedStrs.get(goStr);if (null != internedStr) return internedStr;char[] chars = goStr.toCharArray();Object jChars = new Object(loader.loadClass("[C"), chars);Object jStr = loader.loadClass("java/lang/String").newObject();jStr.setRefVal("value", "[C", jChars);internedStrs.put(goStr, jStr);return jStr;}public static String goString(Object jStr) {Object charArr = jStr.getRefVar("value", "[C");return new String(charArr.chars());}}

Interpret.java

package org.itstack.demo.jvm;import com.alibaba.fastjson.JSON;
import org.itstack.demo.jvm.instructions.Factory;
import org.itstack.demo.jvm.instructions.base.BytecodeReader;
import org.itstack.demo.jvm.instructions.base.Instruction;
import org.itstack.demo.jvm.rtda.Frame;
import org.itstack.demo.jvm.rtda.Thread;
import org.itstack.demo.jvm.rtda.heap.ClassLoader;
import org.itstack.demo.jvm.rtda.heap.methodarea.*;
import org.itstack.demo.jvm.rtda.heap.methodarea.Class;
import org.itstack.demo.jvm.rtda.heap.methodarea.Object;//指令集解释器
class Interpret {Interpret(Method method, boolean logInst, String args) {Thread thread = new Thread();Frame frame = thread.newFrame(method);thread.pushFrame(frame);if (null != args){Object jArgs = createArgsArray(method.clazz().loader(), args.split(" "));frame.localVars().setRef(0, jArgs);}loop(thread, logInst);}private Object createArgsArray(ClassLoader loader, String[] args) {Class stringClass = loader.loadClass("java/lang/String");Object argsArr = stringClass.arrayClass().newArray(args.length);Object[] jArgs = argsArr.refs();for (int i = 0; i < jArgs.length; i++) {jArgs[i] = StringPool.jString(loader, args[i]);}return argsArr;}private void loop(Thread thread, boolean logInst) {BytecodeReader reader = new BytecodeReader();while (true) {Frame frame = thread.currentFrame();int pc = frame.nextPC();thread.setPC(pc);reader.reset(frame.method().code, pc);byte opcode = reader.readByte();Instruction inst = Factory.newInstruction(opcode);if (null == inst) {System.out.println("Unsupported opcode " + byteToHexString(new byte[]{opcode}));break;}inst.fetchOperands(reader);frame.setNextPC(reader.pc());if (logInst) {logInstruction(frame, inst, opcode);}//execinst.execute(frame);if (thread.isStackEmpty()) {break;}}}private static void logInstruction(Frame frame, Instruction inst, byte opcode) {Method method = frame.method();String className = method.clazz().name();String methodName = method.name();String outStr = (className + "." + methodName + "() t") +"寄存器(指令):" + byteToHexString(new byte[]{opcode}) + " -> " + inst.getClass().getSimpleName() + " => 局部变量表:" + 
JSON.toJSONString(frame.operandStack().getSlots()) + " 操作数栈:" + JSON.toJSONString(frame.operandStack().getSlots());System.out.println(outStr);}private static String byteToHexString(byte[] codes) {StringBuilder sb = new StringBuilder();sb.append("0x");for (byte b : codes) {int value = b & 0xFF;String strHex = Integer.toHexString(value);if (strHex.length() < 2) {strHex = "0" + strHex;}sb.append(strHex);}return sb.toString();}}

BubbleSortTest.java

package org.itstack.demo.test;/*** -Xjre "C:Program FilesJavajdk1.8.0_161jre" E:itstackgitistack-demoitstack-demo-jvmitstack-demo-jvm-08targettest-classesorgitstackdemotestBubbleSortTest -verbose true*/
public class BubbleSortTest {public static void main(String[] args) {int[] arr = {22, 84, 77, 11, 95,  9, 78, 56, 36, 97, 65, 36, 10, 24 ,92, 48};//printArray(arr);bubbleSort(arr);//System.out.println(123456789);printArray(arr);}private static void bubbleSort(int[] arr) {boolean swapped = true;int j = 0;int tmp;while (swapped) {swapped = false;j++;for (int i = 0; i < arr.length - j; i++) {if (arr[i] > arr[i + 1]) {tmp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = tmp;swapped = true;}}}}private static void printArray(int[] arr) {for (int i : arr) {System.out.println(i);}}}

HelloWorld.java

package org.itstack.demo.test;/*** -Xjre "C:Program FilesJavajdk1.8.0_161jre" E:itstackgitistack-demoitstack-demo-jvmitstack-demo-jvm-08targettest-classesorgitstackdemotestHelloWorld -verbose true -args 你好,java版虚拟机v1.0,欢迎你的到来。*/
public class HelloWorld {public static void main(String[] args) {for (String str : args) {System.out.println(str);}}}

测试结果一;执行数组

-Xjre "C:Program FilesJavajdk1.8.0_161jre" E:itstackgitistack-demoitstack-demo-jvmitstack-demo-jvm-08targettest-classesorgitstackdemotestBubbleSortTest -verbose true
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":0},{"num":0},{"num":0},{"num":0}] 操作数栈:[{"num":0},{"num":0},{"num":0},{"num":0}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0xbc -> NEW_ARRAY => 局部变量表:[{"num":16},{"num":0},{"num":0},{"num":0}] 操作数栈:[{"num":16},{"num":0},{"num":0},{"num":0}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":0},{"num":0},{"num":0}] 操作数栈:[{"num":16,"ref":{}},{"num":0},{"num":0},{"num":0}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x03 -> ICONST_0 => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":0}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":0}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":0}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":0}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":22}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":22}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":0},{"num":22}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":0},{"num":22}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x04 -> ICONST_1 => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":22}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":0},{"num":22}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":1},{"num":22}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":1},{"num":22}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":1},{"num":84}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":1},{"num":84}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":1},{"num":84}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":1},{"num":84}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x05 -> ICONST_2 => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":1},{"num":84}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":1},{"num":84}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":2},{"num":84}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":2},{"num":84}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":2},{"num":77}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":2},{"num":77}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":2},{"num":77}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":2},{"num":77}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x06 -> ICONST_3 => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":2},{"num":77}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":2},{"num":77}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":3},{"num":77}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":3},{"num":77}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":3},{"num":11}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":3},{"num":11}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":3},{"num":11}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":3},{"num":11}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x07 -> ICONST_4 => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":3},{"num":11}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":3},{"num":11}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":4},{"num":11}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":4},{"num":11}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":4},{"num":95}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":4},{"num":95}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":4},{"num":95}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":4},{"num":95}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x08 -> ICONST_5 => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":4},{"num":95}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":4},{"num":95}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":5},{"num":95}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":5},{"num":95}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":5},{"num":9}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":5},{"num":9}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":5},{"num":9}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":5},{"num":9}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":5},{"num":9}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":5},{"num":9}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":6},{"num":9}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":6},{"num":9}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":6},{"num":78}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":6},{"num":78}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":6},{"num":78}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":6},{"num":78}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":6},{"num":78}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":6},{"num":78}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":7},{"num":78}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":7},{"num":78}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":7},{"num":56}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":7},{"num":56}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":7},{"num":56}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":7},{"num":56}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":7},{"num":56}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":7},{"num":56}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":8},{"num":56}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":8},{"num":56}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":8},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":8},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":8},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":8},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":8},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":8},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":9},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":9},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":9},{"num":97}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":9},{"num":97}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":9},{"num":97}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":9},{"num":97}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":9},{"num":97}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":9},{"num":97}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":10},{"num":97}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":10},{"num":97}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":10},{"num":65}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":10},{"num":65}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":10},{"num":65}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":10},{"num":65}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":10},{"num":65}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":10},{"num":65}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":11},{"num":65}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":11},{"num":65}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":11},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":11},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":11},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":11},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":11},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":11},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":12},{"num":36}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":12},{"num":36}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":12},{"num":10}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":12},{"num":10}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":12},{"num":10}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":12},{"num":10}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":12},{"num":10}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":12},{"num":10}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":13},{"num":10}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":13},{"num":10}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":13},{"num":24}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":13},{"num":24}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":13},{"num":24}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":13},{"num":24}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":13},{"num":24}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":13},{"num":24}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":14},{"num":24}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":14},{"num":24}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":14},{"num":92}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":14},{"num":92}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x59 -> DUP => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":14},{"num":92}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":14},{"num":92}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":14},{"num":92}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":14},{"num":92}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x10 -> BIPUSH => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":15},{"num":92}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":15},{"num":92}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4f -> IASTORE => 局部变量表:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":15},{"num":48}] 操作数栈:[{"num":16,"ref":{}},{"num":16,"ref":{"$ref":"$[0].ref"}},{"num":15},{"num":48}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x4c -> ASTORE_1 => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":15},{"num":48}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":15},{"num":48}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0x2b -> ALOAD_1 => 局部变量表:[{"num":16},{"num":16},{"num":15},{"num":48}] 操作数栈:[{"num":16},{"num":16},{"num":15},{"num":48}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0xb8 -> INVOKE_STATIC => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":15},{"num":48}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":15},{"num":48}]
java/lang/Object.<clinit>() 	寄存器(指令):0xb8 -> INVOKE_STATIC => 局部变量表:null 操作数栈:null
java/lang/Object.<clinit>() 	寄存器(指令):0xb1 -> RETURN => 局部变量表:null 操作数栈:null
... ...
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xb2 -> GET_STATIC => 局部变量表:[{"num":9},{"num":0}] 操作数栈:[{"num":9},{"num":0}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x15 -> ILOAD => 局部变量表:[{"num":9},{"num":0}] 操作数栈:[{"num":9},{"num":0}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xb6 -> INVOKE_VIRTUAL => 局部变量表:[{"num":9},{"num":9}] 操作数栈:[{"num":9},{"num":9}]
9
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x84 -> IINC => 局部变量表:[{"num":9},{"num":9}] 操作数栈:[{"num":9},{"num":9}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xa7 -> GOTO => 局部变量表:[{"num":9},{"num":9}] 操作数栈:[{"num":9},{"num":9}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x1d -> ILOAD_3 => 局部变量表:[{"num":9},{"num":9}] 操作数栈:[{"num":9},{"num":9}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x1c -> ILOAD_2 => 局部变量表:[{"num":1},{"num":9}] 操作数栈:[{"num":1},{"num":9}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xa2 -> IF_ICMPGE => 局部变量表:[{"num":1},{"num":16}] 操作数栈:[{"num":1},{"num":16}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x2b -> ALOAD_1 => 局部变量表:[{"num":1},{"num":16}] 操作数栈:[{"num":1},{"num":16}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x1d -> ILOAD_3 => 局部变量表:[{"num":1,"ref":{}},{"num":16}] 操作数栈:[{"num":1,"ref":{}},{"num":16}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x2e -> IALOAD => 局部变量表:[{"num":1,"ref":{}},{"num":1}] 操作数栈:[{"num":1,"ref":{}},{"num":1}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x36 -> ISTORE => 局部变量表:[{"num":10},{"num":1}] 操作数栈:[{"num":10},{"num":1}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xb2 -> GET_STATIC => 局部变量表:[{"num":10},{"num":1}] 操作数栈:[{"num":10},{"num":1}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x15 -> ILOAD => 局部变量表:[{"num":10},{"num":1}] 操作数栈:[{"num":10},{"num":1}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xb6 -> INVOKE_VIRTUAL => 局部变量表:[{"num":10},{"num":10}] 操作数栈:[{"num":10},{"num":10}]
10
11
22
24
36
36
48
56
65
77
78
84
92
95
97
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x84 -> IINC => 局部变量表:[{"num":97},{"num":97}] 操作数栈:[{"num":97},{"num":97}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xa7 -> GOTO => 局部变量表:[{"num":97},{"num":97}] 操作数栈:[{"num":97},{"num":97}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x1d -> ILOAD_3 => 局部变量表:[{"num":97},{"num":97}] 操作数栈:[{"num":97},{"num":97}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0x1c -> ILOAD_2 => 局部变量表:[{"num":16},{"num":97}] 操作数栈:[{"num":16},{"num":97}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xa2 -> IF_ICMPGE => 局部变量表:[{"num":16},{"num":16}] 操作数栈:[{"num":16},{"num":16}]
org/itstack/demo/test/BubbleSortTest.printArray() 	寄存器(指令):0xb1 -> RETURN => 局部变量表:[{"num":16},{"num":16}] 操作数栈:[{"num":16},{"num":16}]
org/itstack/demo/test/BubbleSortTest.main() 	寄存器(指令):0xb1 -> RETURN => 局部变量表:[{"num":16,"ref":{}},{"num":16},{"num":15},{"num":48}] 操作数栈:[{"num":16,"ref":{}},{"num":16},{"num":15},{"num":48}]Process finished with exit code 0

原作者:付政委
原文链接:用Java实现JVM第八章《数组和字符串》
原出处:付政委的博客

0a07cb4701c6e2711f591bfa37c0ce0e.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机IP为什么只有255,为什么电脑IP地址最大值是255?

一、为什么电脑IP地址最大值是255&#xff1f;目前我们常用的IP地址叫IPV4地址&#xff0c;如IP地址&#xff1a;192.168.1.1它是4个字节(Byte)的数据&#xff0c;在计算机中1个字节(Byte)8个二进制位(bit)所以一个IP地址共有4832个二进制位&#xff0c;通常被分割为4组&#x…

c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

第三章&#xff1a;栈和队列下面讲解栈的应用主要内容有&#xff1a;栈的应用、括号匹配、中 后 前 缀表达式转换1.栈的应用1.1括号匹配我们在数学运算中 [(Ab)*c] - (E-F) 往往都会有[ ] 和 ( ) 来表示运算的优先级&#xff0c;我们把这样的[ ] 和 ( ) 提取出来组成的序列叫做…

测试你是什么样的双眼皮软件,来测试你适合哪种双眼皮?

你的脸型适合哪种双眼皮&#xff1f;自己可以来测试下很多人喜欢大眼睛&#xff0c;双眼皮&#xff0c;觉得越宽越大越好看。我觉得只要和自己五官协调就是最好看的。不同脸型适合什么样的双眼皮&#xff1f;1、平行型&#xff1a;适合眼睛比较大、眉弓比较高、眉毛距眼睛较远且…

服务器内存不认硬盘_服务器品牌有哪些?如何选择服务器?

前段时间我们发布丰富机房建设相关内容&#xff0c;有很多朋友就问到如何保证服务器可以支持百万用户访问&#xff1f;服务器品牌有哪些&#xff1f;服务打开速度慢怎么办&#xff1f;选择服务器主要看哪些参数&#xff1f;。本期我们一起来了解这方面内容。一、服务器品牌服务…

mpi由于目标计算机积极拒绝,windows系统lammps安装MPICH2的问题

20170610补充&#xff1a;补充上次补充内容的文字说明&#xff1a;MPICH2的安装一半没问题。最常遇到的问题是不清楚注册时候到底使用哪个用户名或者计算机名。在确保安装成功的前提下&#xff0c;运行命令&#xff1a;mpiexec -register会让输入用户名和密码。这个用户名是计算…

datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集

这是第151篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题&#xff0c;建议阅读时间10分钟&#xff0c;认真读完必有收获。UWA 问答社区&#xff1a;answer.uwa4d.comUWA QQ群2&#xff1a;793972859(原群已满员)本期目录&#xff1a;如何规划UI…

贾立平是中科学院计算机所博士,中国科学院博士生贾立平:创新变通能力才是未来最根本的竞争力...

人民网北京1月8日电 宇宙巡游2020——UCCA Kids艺术嘉年华4日开幕。中国科学院博士生贾立平表示&#xff0c;脑科学可以更好地了解孩子的想象力、创造力&#xff0c;通过艺术&#xff0c;会更快地促进孩子能力的发展。“宇宙巡游2020”儿童艺术展览学生作品《太阳系的热带森林》…

音频服务器未运行怎么办,音频服务未运行怎么办 音频服务未运行解决方法【详细介绍】...

最近许多网友在使用电脑时遇到了“音频服务未运行”的错误提示&#xff0c;出现这种提示的原因有很多&#xff0c;症状也不尽相同。今天我们就针对不同的“音频服务未运行”症状进行分析解答&#xff0c;希望能对大家有所帮助。由于音频服务未运行可能是硬件配置不正确造成的&a…

jquery查找父窗体id_Vue父组件获取子组件中的变量

全世界只有不到3 % 的人关注了我你真是个特别的人在vue项目日常开发中&#xff0c;难免要把功能性组件抽离出来&#xff0c;这样结构就会出现父子组件&#xff0c;兄弟组件等&#xff0c;但是这样就会涉及到不同组件需要互相使用其中的某个值的问题。之前有说过通过ref来让父组…

服务器固态硬盘接口类型,固态硬盘接口都有哪些类型

其实固态硬盘拥有几种接口&#xff0c;根据不同应用场合的固态硬盘一般会有不同的接口。固态硬盘与传统机械硬盘相比&#xff0c;接口规格较多也容易被初用者混淆&#xff0c;因此小编特意整理了一篇名叫“怎么看固态硬盘接口?固态硬盘接口都有哪些类型?”的文章&#xff0c;…

汉字为什么能流传至今_能让历史重新活起来的中国舞,再次席卷而来

如果那些耳熟能详的故事&#xff0c;通过舞蹈重新出现在你的眼前。不再让你仅凭想象&#xff0c;去体会它独一无二的魅力时&#xff0c;你愿意静下心&#xff0c;去重新定义“舞蹈”吗&#xff1f;当书本上的汉字跳跃到你的眼前&#xff0c;当一切虚幻的想象&#xff0c;用舞蹈…

我的世界服务器的文件名叫什么,我的世界 外国服务器叫什么名字 | 手游网游页游攻略大全...

发布时间&#xff1a;2015-11-15COD5服务器里改名字颜色 改名字颜色方法1:1. 搜索config_mp.cfg 文件2. 用记事本打开该文件 搜索seta clanName ""3. 在&qu ...标签&#xff1a;使命召唤5&#xff1a;世界战争发布时间&#xff1a;2015-11-10伤害世界Hurtworld服…

友盟消息推送服务器demo,友盟消息推送总结

分享的文章连接1 http://blog.csdn.net/shenjie12345678/article/details/411206372&#xff1b;http://dev.umeng.com/push/ios/integration重点解析&#xff1a;1&#xff1a;如何获得友盟推送的AppKey&#xff1f;1.1登陆到友盟的消息推送界面——>添加应用,出现如下界面…

cocos creator 方法数组_基于 Cocos 游戏引擎的音视频研发探索

本文转载自公众号&#xff1a;流利说技术团队(lls_tech)版权归原作者所有本文主要介绍了流利说团队基于 Cocos 游戏引擎进行音视频相关需求开发过程中所遇到的问题和解决方案。文章中将依次阐述 Cocos 引擎直接渲染视频的方案&#xff0c;继而引申出多线程环境下 OpenGL 环境的…

华为服务器双系统教程,服务器上安装双系统

服务器上安装双系统 内容精选换一换Atlas 800 训练服务器(型号 9000)安装上架、服务器基础参数配置、安装操作系统等操作请参见《Atlas 800 训练服务器 用户指南 (型号9000, 风冷)》或《Atlas 800 训练服务器 用户指南 (型号9000, 液冷)》。Atlas 800 训练服务器(型号 9000)适配…

线程销毁_多线程(2)-Java高级知识(9)

前面有一篇文章写的是多线程的基本知识&#xff0c;以及线程实现的两种方式&#xff0c;一种是继承Thread类&#xff0c;另一种实现Runnable 接口&#xff0c;今天沿着前面的多线程&#xff0c;继续分享多线程的第三种创建方法&#xff0c;以及第三种创建方法的优势&#xff0c…

怎么查看服务器系统内存,怎么查看服务器系统内存

怎么查看服务器系统内存 内容精选换一换确认服务器服务是否开启。登录虚拟机内部。执行如下命令&#xff0c;查看系统的端口监听状态&#xff0c;如图1所示。netstat -ntplWindows虚拟机可以在命令行中执行netstat -ano查看系统的端口监听状态&#xff0c;或者查看服务端软件状…

as工程放到源码编译_Flutter源码剖析(二):源码的阅读与调试环境配置

综述 Flutter从架构上来说有3部分&#xff1a;用Dart写的Framework层&#xff0c;面向开发者用Java/Kotlin写的Embdder层(For Android&#xff0c;iOS是OC/Swift)&#xff0c;纯Flutter App不需要关心用C写的Engine层&#xff0c;提供Dart运行环境和底层绘制能力针对每个部分&a…

workbook加载文件路径_【Python】文件重命名(按照Excel清单)

问题&#xff1a;1、扫描了很多文件&#xff0c;想批量加上文件编号2、网页下载了一堆图片&#xff0c;批量加上图片分类3、文件命名不规范&#xff0c;想批量调整效果图&#xff1a;需求解析&#xff1a;1、想重命名&#xff0c;就要有原名字和修改后的名字&#xff0c;清单准…

ppap文件过程流程图制作_收藏 | 据说PPAP的精华都在这个PPT里!一起来鉴定下

一组数字的PPAP3种情况必须提交8种情况通知提交5种提交等级3种提交状态18份提交内容“3”——以下3种情况&#xff0c;必须向顾客提交PPAP&#xff1a;1)一种新的零件或产品&#xff1b;2)对以前所提供不符合零件的纠正&#xff1b;3)由于设计记录、规范或材料方面的工程变更从…