标签: bytecode

是否每次到达行时都会重新解释解释语言的代码?

假设没有为程序生成字节码,比如在Ruby,Perl或PHP中,在这种情况下,每次执行再次到达第1行时,下面的第1行是否重新解释?

while ($indexArrayMoviesData < $countArrayMoviesData + $countNewlyAddedMoviesData) {
  # do something
}
Run Code Online (Sandbox Code Playgroud)

也就是说,如果循环运行100,000次,那么该行将被重新解释100,000次?

如果是这样,字节码创建不仅有助于程序的初始启动,还有助于执行期间?(因为代码不需要再次重新解释)

bytecode interpreted-language

2
推荐指数
1
解决办法
224
查看次数

解密Lua字节码?

我用这个脚本加密我的Lua代码.

local script = string.dump(
    function()
        local function h4x(strtbl)
            buffer=""
            for v in strtbl do
                buffer=buffer..strtbl[v]
            end
            return buffer
        end

        print("encrypted")

    end
)

buff=""
for v=1,string.len(script) do --Convert our string into a hex string.
    buff=buff..'\\'..string.byte(script,v)
end

file=io.open('encrypted.txt','w') --Output our bytecode into ascii format to encrypted.txt
file:write(buff)
file:flush()
file:close()
Run Code Online (Sandbox Code Playgroud)

encrypted.txt的输出类似于"00/12/46/4/2/6/4/62 /".我如何解密字节码?

encryption lua bytecode

2
推荐指数
1
解决办法
3145
查看次数

Java在64位操作系统上编译32位操作系统运行时问题

运行在32位计算机上编译并在64位计算机上运行的Java应用程序是否存在已知问题?

java jvm bytecode

2
推荐指数
1
解决办法
1867
查看次数

Integer类的内部工作

我想知道Integer课堂上的一些内部工作.

例如,我们可以写:

Integer num = 9;
Run Code Online (Sandbox Code Playgroud)

我想知道Integer在这种情况下如何创建一个类,因为我们还没有创建任何类Object.它在内部如何运作?

java bytecode

2
推荐指数
1
解决办法
175
查看次数

如何在java字节码中引用"this"对象

我正在用Java字节码创建一个类.我需要知道如何引用此对象中的字段.首先,我需要知道如何引用"this"对象,就像我this.var1从课堂上访问一样TestClass.我知道如何访问其他对象中的字段,但不知道我正在执行的同一个对象.

java bytecode

2
推荐指数
1
解决办法
201
查看次数

如何判断编译jar的java版本范围

如何查看编译的jar文件将使用哪些java版本?

谢谢

java bytecode jar

2
推荐指数
1
解决办法
1080
查看次数

如何在ASM中读取最终字符串值?

假设某人给了我以下源代码的Java字节码:

class MyClass {
  public static void foo() {
     final String bar = "Hello";         
  }
}
Run Code Online (Sandbox Code Playgroud)

我想扫描这个类中的所有方法MyClass.如果任何方法包含一个final String被调用的变量bar,我需要输出变量的文字值.在这种情况下,Hello.

我设法得到bar方法中调用的变量如下:

// Scala code
import scala.collection.JavaConversions._
import org.objectweb.asm._
import org.objectweb.asm.tree._

def processClass(is:java.io.InputStream) = {
  val cn = new ClassNode
  val cr = new ClassReader(is)
  cr.accept(cn, 0)
  is.close
  val methods = cn.methods.asInstanceOf[java.util.List[MethodNode]]
  val m = methods(0)  // get first method as an example
  val vars = m.localVariables.asInstanceOf[java.util.List[LocalVariableNode]];
  val bar = vars.find(_.name == "bar").find(v …
Run Code Online (Sandbox Code Playgroud)

java scala bytecode java-bytecode-asm

2
推荐指数
1
解决办法
405
查看次数

java stream.peek()如何影响字节码?

据我所知,如果我有一个带有两个过滤器的流,它们将与字节码中的&&结合使用.

例如

IntStream.range(1,10)
  .filter(i -> i % 2 == 0)
  .filter(i -> i % 3 == 0)
  .sum();
Run Code Online (Sandbox Code Playgroud)

会像i%2 == 0 && i%3 == 0.

偷看会影响这个吗?

如果你在第一个文件管理器后偷看你得到2468,如果你偷看第二个,你只得到6(当然).

但如果你偷看这两个地方

IntStream.range(1,10)
            .filter(integer -> integer % 2 == 0)
            .peek(i-> System.out.print(i))
            .filter(integer -> integer % 3 == 0)
            .peek(i-> System.out.print(i))
            .sum();
Run Code Online (Sandbox Code Playgroud)

你得到24668.

我的假设是,这必然意味着操作在某种程度上是由于窥视调用而分开的.就像是

if(i%2==0)
  peek
  if(i%3==0)
Run Code Online (Sandbox Code Playgroud)

这是真的,如果是这样会影响性能(我认为不会).

java performance bytecode java-8 java-stream

2
推荐指数
1
解决办法
161
查看次数

使用JDB(或类似程序)调试ASM生成的字节码

因此,我有一些功能不良的代码可以调试在某些地方抛出NPE的地方,我想逐步介绍一些生成的方法,以尝试找出原因。

除了盲目踏步不是真正有用的。

Thread-4[1] list
Source file not found: Foo.java
Thread-4[1] locals
Local variable information not available.  Compile with -g to generate variable information
Run Code Online (Sandbox Code Playgroud)

代码已生成,因此当然没有.java可用于JDB的文件。

而且由于我不使用javac进行编译,因此也没有指定任何-g标志。

我可以告诉JDB给我看一下字节码吗(他显然有字节码,因为否则Java将没有任何执行力)?

我可以告诉ASM生成本地信息,就像使用它进行编译一样javac -g吗?

还是那里有一个有用的调试器可以满足我的需求?

java debugging bytecode jdb java-bytecode-asm

2
推荐指数
1
解决办法
544
查看次数

方法签名中带有或不带有同步关键字的方法的相同字节码

对于以下两个类,它们具有相同的Java字节码。

Java版本:

Java版本“ 1.8.0_181” Java™SE运行时环境(内部版本1.8.0_181-b13)Java HotSpot(TM)64位服务器VM(内部版本25.181-b13,混合模式)

javac和javap版本:

1.8.0_181

我的疑问是

  1. 不应法同步关键字有不同的字节码,我们可以看到在synchronized块中monitorentermonitorexit,或让我们假设我不应该混合synchronized块synchronized方法

  2. JVM如何以不同方式处理这两种方法?

    public class MySingleton1 {
    
    private MySingleton1() {}
    
    private static MySingleton1 ourInstance;
    
    public static MySingleton1 getInstance() {
        if (ourInstance == null) {
            ourInstance = new MySingleton1();
        }
        return ourInstance;
    }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    public class MySingleton2 {
    
    private MySingleton2() {}
    
    private static MySingleton2 ourInstance;
    
    public static synchronized MySingleton2 getInstance() {
        if (ourInstance == null) {
            ourInstance = new MySingleton2(); …
    Run Code Online (Sandbox Code Playgroud)

java bytecode synchronized

2
推荐指数
1
解决办法
104
查看次数