limite do código de um método é de 65535 bytes? [RESOLVIDO]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Olá.
Estou criando um parser com a ferramenta javaCC, que por sua vez gera várias classes java. Em uma destas classes geradas estou recebendo o seguinte erro:
The code of method X is exceeding the 65535 bytes limit


Pesquisei o problema e a recomendação diz que este é um limite do java e que eu devo rever a gramática que estou implementando para otimizá-la.
Tudo bem, vou fazer isto. Mas este limite é fixo ou existe forma de configurar algum parametro de compilação ou algo assim?

This message was edited 2 times. Last update was at 23/10/2009 10:27:18

[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Sim, é fixo. E que eu saiba não existe.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Se seu método é maior que isso talvez seja uma boa hora de refatorar.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Existe alguma ferramenta, utilitário, plugin, etc... que possa fazer um refactor, clean-up ou algo parecido com o fonte ou com o código java compilado?
A intensão é somente reduzir o tamanho do código, já que a manutenção dos fontes não será feita diretamente no java (e sim pelo javaCC).
[WWW]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

eu não sabia que existia esse limite. Mas um método com mais 65000 bytes também é exorbitante.

This message was edited 1 time. Last update was at 16/10/2009 09:34:22


www.citrox.com.br
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Como disse no início do tópico a classe é gerada automaticamente, por isso não posso dar manutenção direta no fonte. Quando eu compilar novamente a definição do javaCC ele vai regerar as classes e consequentemente perderá as alterações. Se houver uma ferramenta de refactor automatico, aplico novamente toda vez que forem regeradas.
[WWW]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Perguntinha. Digamos que seu método esteja gerando uma grande quantidade de bytecodes porque ele contém uma grande quantidade de constantes string. Seria possível acumular essas strings e lê-las de um resource, em vez de estarem no arquivo .class?
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Boa idéia. Já havia pensado nisto. Mas examinei o fonte e não tem nenhuma string.... quem projetou o compilador javaCC já deve ter pensado neste tipo de otimização...

Vou colocar parte do fonte para ilustrar:
Os números que aparecem apontam para o código definido em uma classe de constantes.

This message was edited 1 time. Last update was at 16/10/2009 10:51:34

[WWW]
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Fiz uma intervenção manual que resolve provisoriamente o problema. Se alguém souber de uma solução melhor, agradeço.

This message was edited 1 time. Last update was at 16/10/2009 12:22:36

[WWW]
fabiofalci
GUJ Master
[Avatar]

Membro desde: 11/04/2006 09:23:14
Mensagens: 1057
Localização: Porto Alegre - RS
Offline

Olhando rapidamente no google há dicas para usar javaCC de uma forma mais eficiente.
Como esse post http://markmail.org/message/ztzrnyhkhnoai5uk que leva a essa url
http://javacc.dev.java.net/doc/lexertips.html

Ali deve ter dicas para solucionar o teu caso. O problema é que parece estar fora do ar.
[WWW] [MSN] [ICQ]
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Para registrar uma solução mais inteligente:
Como o problema era com a quantidade de palavras reservadas existentes na gramática, implementei uma segmentação separando alguns statements em um parser independente. No parser principal aciono o parser segundário quando o token específico for encontrado....
Alterei a definição do token (<DEFINE> para capturar a linha completa do statement ( e não apenas a palavra DEFINE ):


A chamada ao parser secundário (IdcamsDefine) dentro do parser principal (Idcams) ficou assim:

This message was edited 1 time. Last update was at 23/10/2009 10:44:08

[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team